Ubuntu16.04 系统下使用pytorch库(cpu版)编译配置warp-CTC(2018年6月)

2018年6月13日,终于爬出坑了,还好没放弃~

无论你碰到什么事情,需要使用百度搜索时,务必在搜索工具这里调整为搜索最新的网页。最新!最新!最新!重要的事情说三遍。

本篇文档主要介绍Ubuntu16.04 系统下使用pytorch库(cpu版)编译配置warp-CTC。关于百度开源库warp-CTC的更多介绍,请移步这里[1]。

百度开源库warp-CTC长时间未更新维护,很容易出现各种版本兼容性问题,最终导致warp-CTC配置失败。正是由于在编译配置过程中,反复出现这种兼容性问题,我在坑里爬了好几天,就差各种脏话都要蹦出来了。本着前人种树后人乘凉的精神,在这里写下这篇文档,希望能帮助到后来人。


系统环境

安装及配置

本部分分别介绍pytorch和warp-CTC的安装与编译配置。

pytorch的安装与配置

尽管pytorch到我写下这篇文档时已经更新到0.5.0+版本了,但是SeanNaren/warp-ctc项目目前只兼容pytorch 0.4.0版本。所以安装过程中,请不要使用git clone法安装 pytorch,而是选用conda进行安装。

  • pytorch 0.4.0版本安装
conda install pytorch=0.4.0 -c soumith 

在这一步,除了可能提示因为网速不好需要让你重新安装这种问题,pytorch 0.4.0版本安装基本不会出现其他什么问题的报错。

  • pytorch 0.4.0 导入测试

Python环境下,导入pytorch包,确认pytorch是否安装成功。

import torch
print torch.__version__

输出结果即为所安装pytorch包的版本号,如下所示:

0.4.0

warp-CTC的安装与编译配置

  • warp-CTC的安装与编译配置
git clone https://github.com/SeanNaren/warp-ctc.git
cd warp-ctc
mkdir build; cd build
cmake ..
make

生成了可执行文件test-cpu,执行命令:

./test-cpu

输出结果以下,代表编译成功。

Running CPU tests
Tests pass

温馨提示:执行到这里,还不算结束哈~请看下面非常关键的一步。
- pytorch_binding安装

cd pytorch_binding
python setup.py install

如果你是按照我以上步骤一步一步执行的,这一步安装应该非常顺利。


在我之前安装过程中,因为各种兼容性报错安装失败n次。我一开始安装的pytorch不是0.5.0+版本,在执行pytorch_binding安装过程中,出现了以下报错:

~/.../anaconda2/lib/python2.7/site-packages/torch/utils/ffi/../../lib/include/TH/generic/THTensor.h:10:16: note: forward declaration of ‘THTensor {aka struct THTensor}’

~/.../warp-ctc/pytorch_binding/src/binding.cpp:50:35: error: invalid use of incomplete type ‘THTensor {aka struct THTensor}’

如果你也遇到这样的报错提示,请按我前面所写方法,安装pytorch 0.4.0版本。

warp-CTC测试

在SeanNaren/warp-ctc项目中附有测试程序,可用于测试是否通过。原测试程序好像没有输出结果,因此我增加了print结果输出。

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

输出结果:

tensor([ 2.4629])

一切搞定~

参考链接

[1] 百度开源项目warp-CTC

https://github.com/baidu-research/warp-ctc

[2] Anaconda镜像下载:

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda2-5.2.0-Linux-x86_64.sh

更多精彩项目及分享,请关注我的个人公众号:gbxiao992
这里写图片描述


版权声明:本文为u010636181原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。