服務器我的環境下pytorch0.4.1編譯warp-ctc遇到的問題及解決方法

1、關於warp-ctchtml

  CTC能夠生成一個損失函數,用於在序列數據上進行監督式學習不須要對齊輸入數據及標籤,常常鏈接在一個RNN網絡的末端,訓練端到端的語音或文本識別系統。CTC論文前端

  CTC網絡的輸入python

CTC網絡的輸入是一個樣本(圖像)通過網絡(通常是CNN+RNN)計算後生成的特徵向量(特徵序列),這部分可參考CRNN論文linux

    特徵序列裏各個向量是按序排布的,是從圖像樣本上從左到右的一個個小的區間映射過來的,能夠設置區間的大小(寬度),寬度越小,得到的特徵序列裏的特徵向量個數越多,極端狀況下,能夠設置區間寬度爲1,這樣就會生成width(圖像寬度)個特徵向量(做爲後續RNN的輸入)。git

    將CNN產生的一系列(假設爲width個)特徵序列做爲後續RNN(在CRNN中用的是Bi-LSTM)的輸入,能夠獲得一個width維的機率矩陣,這個機率矩陣就能夠做爲CTC的輸入,用來計算CTC loss。github

CTC網絡的計算過程算法

    CTC網絡的計算是爲了獲得特徵序列最可能對應的標籤對象,對語音識別是一段話,對文本識別是一段文字。vim

    計算特徵序列裏每一個特徵向量(共N個)分別對應的n個可能結果的機率。若是當前的特徵向量的預測結果不在樣本標籤列表裏,就置預測結果爲blank空格或下劃線。計算結果從一個N維的特徵序列,獲得一個N×n的機率矩陣(就是上面所說的)。bash

    計算上述預測的N×n的機率矩陣的全部可能結果的機率,中間涉及到去除重複字母和blank的操做。N個n維的特徵向量(即N×n的機率矩陣)對應的全部可能的結果有Nn服務器

    NXn個,涉及到組合學,計算全部可能機率的成本會很高,可是CTC運用了動態規劃(先後向算法,這部分推薦看一下HMM)以大幅下降計算的複雜性。

CTC網絡的輸出

  對識別過程,取出最大機率對應的結果做爲識別結果輸出;

對訓練過程,取最大機率對應的結果跟真實標籤之間的差別(計算編輯距離等方法),做爲訓練Loss,反向傳輸給前端網絡。

 

 

 

原文連接:https://blog.csdn.net/ft_sunshine/article/details/90300938

 

2、pytorch環境配置warp-ctc

注:本次編譯是按照https://github.com/SeanNaren/warp-ctc的instruction進行的

服務器我的帳戶環境:

torch0.4.1

python3.7.0

cuda9.0

cudnn

 

 

 

 

2.1 torch0.4.1

 

目前pytorch的版本爲pytorch1.3.1,官網「get started」提供的下載方式是針對最新版本的。對於舊版本的pytorch,

能夠採用pip安裝。

pytorch發佈的各個版本的torch連接爲:https://download.pytorch.org/whl/cu90/torch_stable.html

 

 

 

在官網上也能夠找到舊版本。

進入pytorch官網,點擊「get started」進入以下界面:

 

 

 

能夠看到「Previous PyTorch Versions」的選項,選擇,下拉,進入

COMMANDS FOR VERSIONS < 1.0.0

找到「via pip",能夠找到相應的pytorch版本(不全)。

 

從上面的連接下載

torch-0.4.1-cp37-cp37m-linux_x86_64.whl

 

來自 <https://download.pytorch.org/whl/cu90/torch_stable.html>

 

這一版本的torch,而後進行安裝。

 

2.2 torch0.4.1的安裝

 

在命令行輸入如下指令:

 

#新建一個虛擬環境

conda create -n torch0.4.1 python=3.7.0

 

#進入虛擬環境

conda activate torch0.4.1

 

#pip安裝torch0.4.1

pip install torch-0.4.1-cp37-cp37m-linux_x86_64.whl

 

#pip安裝torchvision

#若是pip安裝失敗,改爲conda install torvision

pip install torchvision

 

如此,完成torch0.4.1的安裝

測試

python

import torch

torch.cuda.is_available()

 

#輸出:True

 

print(torch.__version__)

 

#輸出:0.4.1

這樣即完成torch0.4.1的配置了。

 

3、在pytorch環境編譯warp-ctc

 

 

git clone https://github.com/SeanNaren/warp-ctc.git

cd warp-ctc

mkdir build

cd build

cmake ..

make

cd ../pytorch_binding

python setup.py install

 

 

 

 

可是這樣出問題了!

 

問題一:

在服務器我的帳戶下,沒法使用

 

git clone https://github.com/SeanNaren/warp-ctc.git

git clone git@github.com:SeanNaren/warp-ctc.git

 

所以採用把安裝包下載下來,而後在指定目錄下解壓,編譯。

 

 

 

 

 

 

 

這裏面zip解壓後獲得的文件夾名不是「warp-ctc」,須要將其改成「warp-ctc」。

 

而後按照:

conda activate torch0.4.1

cd warp-ctc

mkdir build

cd build

cmake ..

make

cd ../pytorch_binding

python setup.py install

進行操做

 

再次出現問題

 

問題二:

python setup.py install 時,發生錯誤

 

應該是torch0.4.1版本過於陳舊,而warp-ctc在不斷更新,所以,舊版本的pytorch0.4.1缺乏編譯warp-ctc的包或者接口

 

解決方法,參見連接

https://www.twblogs.net/a/5c2a85a1bd9eee01606d3c4c

下載舊的版本。

網上有不少教程,其中issues裏面的一個解決方案時用「

ac045b6072b9bc3454fb9f9f17674f0d59373789」

來自 <https://github.com/SeanNaren/warp-ctc/issues/101>

這一版本。

具體操做以下:

 

 

 

 

 

 

 

 

 

而後按照上面的流程操做便可:

 

conda activate torch0.4.1

cd warp-ctc

mkdir build

cd build

cmake ..

make

cd ../pytorch_binding

python setup.py install

在「cmake ..「過程當中,會出現下圖的問題,但對後面的」make「和」python setup.py install「彷佛沒有什麼影響

 

 

 

在執行」python setup.py install「時,可能會遇到缺乏安裝包的狀況,此時,直接pip install對應的包應該可以解決問題的。

我遇到的狀況以下圖所示:

 

 

 

再次執行「python setup.py install」:

 

 

配置環境變量:

執行

vi ~/.bashrc

進入配置文件(關於vim編輯問題,能夠查閱vim教程)

在文件最後加入

export WARP_CTC_PATH="/home2/jiangjz/warp-ctc/build"

保存退出,而後讓配置生效

source ~/.bashrc

 

最後進行驗證:

 

python

import torch
from warpctc_pytorch import CTCLoss
ctc_loss = CTCLoss()
# expected shape of seqLength x batchSize x alphabet_size
probs = torch.FloatTensor([[[0.1, 0.6, 0.1, 0.1, 0.1], [0.1, 0.1, 0.6, 0.1, 0.1]]]).transpose(0, 1).contiguous()
labels = torch.IntTensor([1, 2])
label_sizes = torch.IntTensor([2])
probs_sizes = torch.IntTensor([2])
probs.requires_grad_(True)  # tells autograd to compute gradients for probs
cost = ctc_loss(probs, labels, probs_sizes, label_sizes)
cost.backward()

print(cost)

來自 <https://github.com/SeanNaren/warp-ctc>

 

這裏在「from warpctc_pytorch import CTCLoss」時報了錯:

 

解決方法是添加環境變量(這一塊有點紊亂了,可是將warp-ctc的路徑添加到環境變量,應該可以解決問題)

 

從新運行:

 

 

具體解決方法見下面的連接:

https://github.com/SeanNaren/deepspeech.pytorch/issues/155

最後將測試過程再次貼出來:

 

 

相關文章
相關標籤/搜索