CTC+pytorch編譯配置warp-CTC
CTC
CTC網路的輸入
CTC網路的輸入是一個樣本(影象)經過網路(一般是CNN+RNN)計算後生成的特徵向量(特徵序列)。
特徵序列裡各個向量是按序排布的,是從影象樣本上從左到右的一個個小的區間對映過來的,可以設定區間的大小(寬度),寬度越小,獲得的特徵序列裡的特徵向量個數越多,極端情況下,可以設定區間寬度為1,這樣就會生成width(影象寬度)個特徵向量。
CTC網路的計算過程
CTC網路的計算是為了得到特徵序列最可能對應的標籤物件,對語音識別是一段話,對文字識別是一段文字。
1. 計算特徵序列裡N個特徵向量分別對應的n個可能結果的概率。如果當前的特徵向量的預測結果不在樣本標籤列表裡,就置預測結果為blank空格或下劃線。計算結果從一個N維的特徵序列,得到一個N×n的預測序列。
2. 計算N×n的預測序列對應的所有可能的結果的概率,中間涉及到去除重複字母和blank的操作。N×n個特徵向量對應的所有可能結果有n的N次方個,涉及到組合學,計算所有可能概率的成本會很高,但是CTC運用了動態規劃以大幅降低計算的複雜性。
CTC網路的輸出
對訓練過程,取最大概率對應的結果跟真實標籤之間的差異(計算編輯距離等方法),作為訓練Loss,反向傳輸給前端網路。
CTC計算過程示意圖:
pytorch安裝
GPU版本的:
conda install pytorch=0.3.0 cuda80 -c soumith
CPU版本的:
conda install pytorch=0.3.0 -c soumith
參考官網: https://pytorch.org/#pip-install-pytorch
warp-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
驗證pytorch中warp-CTC是否可用GPU例子:
cd /home/xxx/warp-ctc/pytorch_binding/tests
python test_gpu.py
OK輸出:
或:
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')
PyTorch bindings for Warp-ctc參考:https://github.com/SeanNaren/warp-ctc
相關文章
- Eclipse配置反編譯Eclipse編譯
- nginx的編譯和配置Nginx編譯
- LNMP編譯安裝配置+discuzLNMP編譯
- Ubuntu交叉編譯環境配置Ubuntu編譯
- nginx 編譯安裝與配置使用Nginx編譯
- openssl原始碼編譯及配置方法原始碼編譯
- 配置C#命令列編譯器C#命令列編譯
- GoLand編譯器配置代理和專案環境配置GoLand編譯
- Tinyx 交叉編譯配置檔案(arm版)編譯
- [轉]:xmake編譯配置過程詳解編譯
- 編譯配置的一些經驗編譯
- LAMP原始碼編譯安裝配置+wordpressLAMP原始碼編譯
- FFmpeg音視訊編譯配置選項編譯
- ecplise配置jad反編譯.class檔案編譯
- MyEclipse6.5配置反編譯外掛Eclipse編譯
- Java編譯與反編譯Java編譯
- [非專業翻譯] Mapster - 對映配置驗證和編譯編譯
- 編譯安裝nginx時配置開機自啟編譯Nginx
- Sublime Text3 自動編譯less 的配置編譯
- 在Ubuntu伺服器配置Swift編譯環境Ubuntu伺服器Swift編譯
- CLion 配置 C C++ 編譯環境(MinGW)C++編譯
- CUDA常見編譯器配置問題一覽編譯
- 漢文博士詞典編譯配置檔案概述編譯
- 編譯編譯
- C# 編譯器選項(Visual Studio配置)C#編譯
- Linux下的C/C++編譯環境配置LinuxC++編譯
- VS2010編譯配置Blitz-0.9編譯
- JDK20安裝+環境配置+編譯執行JDK編譯
- hadoop編譯—+2.x編譯Hadoop編譯
- gcc 編譯器與 clang 編譯器GC編譯
- 編譯器的編譯基本過程編譯
- 一張圖解析 編譯器編譯流程圖解編譯
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- [譯]iOS編譯器iOS編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 開源編譯工具和編譯軟體編譯
- Make編譯之編譯32bit ffmpeg編譯
- N1064編譯鏈編譯編譯