warp-CTC安裝
warp-CTC是百度開源的一個可以應用在CPU和GPU上高效並行的CTC代碼庫,對CTC算法進行了並行處理。
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
添加環境變量:
gedit ./.bashrc
export WARP_CTC_PATH=/home/xxx/warp-ctc/build
我做的過程中,遇到了兩個問題:
1.ImportError: No module named ‘warpctc_pytorch._warp_ctc’
>>> from warpctc_pytorch import CTCLoss
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/work_nfs3/fyu/tools/warp-ctc/pytorch_binding/warpctc_pytorch/__init__.py", line 6, in <module>
from ._warp_ctc import *
ImportError: No module named 'warpctc_pytorch._warp_ctc'
解決方法:
將warp-ctc/build路徑下面的libwarpctc.so複製到你的anaconda3/lib路徑下面。
2.ImportError: anaconda3/lib/python3.5/site-packages/warpctc_pytorch-0.1-py3.5-linux-x86_64.egg/warpctc_pytorch/_warp_ctc.cpython-35m-x86_64-linux-gnu.so: undefined symbol: _ZNSt13runtime_errorC2EPKc
原因:修改了清華源https://pypi.tuna.tsinghua.edu.cn/simple之後,conda下載的pytorch1.0編譯時候,gcc配置存在問題。
解決方法:
如何確定是gcc配置問題導致的?torch._C._GLIBCXX_USE_CXX11_ABI,如果是true的話就說明是這個問題。
解決辦法的話,可以修改conda的源爲- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/。用這個源重新安裝pytorch,此時的gcc配置將沒有問題。
或者更新當前的gcc編譯器。conda install libgcc(這個方法有些環境可以,上面的方法是萬能)
測試
warp-ctc/pytorch_binding/tests路徑下運行:
python test_cpu.py
python test_gpu.py
或:
import torch
from torch.autograd import Variable
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 = Variable(torch.IntTensor([1, 2]))
label_sizes = Variable(torch.IntTensor([2]))
probs_sizes = Variable(torch.IntTensor([2]))
probs = Variable(probs, requires_grad=True) # tells autograd to compute gradients for probs
cost = ctc_loss(probs, labels, probs_sizes, label_sizes)
cost.backward()
print('PyTorch bindings for Warp-ctc')