warp-CTC安装踩坑:make与install步骤出错解决方案_crnn踩坑_Tianlong Lee的博客-程序员资料

技术标签: CRNN  python  warp-ctc  Text Recognization  ocr  

warp-CTC安装踩坑

最近了解了下crnn+ctc,pytorch版本大于1.0自带ctc_loss,但是低版本的pytorch需要自己配置warpctc环境,开始用pytorch(1.3.0)自带的CTCLoss,总是莫名其妙的获得nan的梯度,看了一下知乎大佬们的分享,似乎也有人遇到了这个问题,作为只想完成任务的我果断换了warp-ctc。
在这里插入图片描述
如果torch自带的没有问题,在使用时应该注意二者的传入参数是不一样的,如果使用torch自带的ctcloss,在传入网络输出概率时,应先进行log_softmax,具体使用可参考链接

安装warp-ctc的大致步骤如下:

git clone https://github.com/SeanNaren/warp-ctc.git
cd warp-ctc
git reset ac045b6
mkdir build; cd build
cmake ..
make

cd ../pytorch_binding
python setup.py install

如果使用的是pytorch0.4,需要将第一句下载变为以下命令。

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

如果是ubuntu系统等自己带有权限的,最好将gcc降级一下,正常可降至4.9及以下,不过可以先尝试下面的步骤,这里不是必须的。

sudo apt install gcc-4.8 g++-4.8
cd /usr/bin
sudo mv gcc gcc_bak
sudo mv g++ g++_bak
sudo ln -s gcc-4.8 gcc
sudo ln -s g++-4.8 g++ 

官方推荐的是pytorch 0.4,然后走上述流程也会比较顺畅,这是你的显卡最好不要太好,不然与其匹配的最低CUDA版本会比较高,亲测pytorch 1.3.1也可,但是在make步骤出现了错误。在make之前,最好指定一下cuda版本,以便make能够找到我们所使用的cuda。目前来看CUDA 10.0及以下是安全的,我一开始用CUDA 10.1在make的最后一步卡住了,相同问题可见链接。指定CUDA版本如下:

 export CUDA_HOME=/usr/local/cuda-9.0/

第二步就是在install的时候出错了,这个时候可以按照以下方法进行修改pytorch_bingding/src/binding.cpp,我在使用的时候,行号好像不是很对应,但是变量名是唯一的,所以还是可用的。

1 at 92 line
int probs_size = THCudaTensor_size(state, probs, 2);
2 at l05 lines
void* gpu_workspace;
THCudaMalloc(state, &gpu_workspace, gpu_size_bytes);

如果使用的是pytorch0.4,在install的时候还可能弹出fatal error: torch/extension.h: No such file or directory的错误,原因可能是这样,此时在warp-ctc目录下,运行如下命令,然后重复安装即可。

git checkout ac045b6

如果上述改动依然无法安装成功,可以尝试使用如下方法代替python setup.py install,注意torch和cuda的版本号与自己的对应。

pip install warpctc-pytorch10-cuda90==0.1.3

安装完成后,需要添加环境变量。

export WARP_CTC_PATH="yourpath/warp-ctc/build"

之后可以简单测试一下,也可以直接到python中调用一下,行与不行一试便知

from warpctc_pytorch import CTCLoss

安装是个让人头疼的事,大家可以多到官网上找找答案,博客上写出来的问题毕竟只是一部分。
SeanNarenbaidu-research

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ly18846826264/article/details/107076297

智能推荐

程序员的乐趣,生成自定义二维码,5行Python代码就搞定_程序员玩二维码_程序员生活志的博客-程序员资料

作者:Arindom Bhattacharjee随着互联网和智能移动设备不断普及,二维码(Quick Response code)已经成为世界上应用最为广泛的信息载体之一。生成二维码的工具也层出不穷,但多数需要在线完成,并且生成的图案也千篇一律,过于单调。那么有没有办法实现自定义生成二维码呢?近日,一位热衷于终身学习的工程师兼摄影师 Arindom Bhattacharjee 撰写了一篇自定义生成二维码的方法,并且整个生成过程只需要 5 行 Python 代码即可完成。感兴趣的读者可以自己实现下

@Html.DropDownList()的四种用法及自定义DropDownList扩展_changuncle的博客-程序员资料

常用方法后台代码:public ActionResult Index(){ ViewData["deptOu"] = "SOHO"; using (ISession session = new NHibernateHelper(DataBase.ADDB).OpenSession()) { IList<t_data_DeptOU> dep...

php程序员前途,mysql数据库和oracle的区别和选择 _lelong999的博客-程序员资料

 php程序员前途,mysql数据库和oracle的区别和选择:LAMP大会的时候我跟Yahoo的一个技术高管聊的时候,我问他Yahoo在选择MySQL还是Oracle的时候是怎么考虑,他的答案令我非常惊讶。他说大部分的时候我们是会用MySQL的,因为它的性能已经达到我们的要求。但是什么时候我们会选用Oracle呢,就是当我们需要存储收费用户的数据的时候。我就问为什么,难道Oracle比MyS...

第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F 等式(数学)_第13届广东工业大学acm b题_鶸鶸的博客-程序员资料

题意:中文题思路:给你一个1/x + 1/y = 1/n  ,两边同时乘上xyn之后得到式子 nx+ny = xy ,之后通过(自我感觉)非常非常非常敏锐的数学思想,两边同时加上n^2,得到(n-x)*(n-y) = n^2。由此可以看出我们现在要求出的是n^2的所有因子,因为n有1e9所以直接求因子会超时,这个时候我们引入一个非常吊的公式,所有数都可以化为几个质数次方和相加p = a1^x1+a...

CVTE c/c++软件类在线笔试 编程题_water_shine的博客-程序员资料

昨天参加了CVTE的在线笔试,由于隔了很久没有接触C语言了,C++自学的状态也不是很好,再加上最近搞毕设脑袋里全是MATLAB的语法等。笔试状态不是很好,编程题挺简单的,但是由于时间心态原因做的不对或者不全,特私下自己改正完善了下。        由于是C++初学者,代码有哪些不合适或者可以简便些的地方,还望读者能够指出,我们一起讨论与学习。

JSON.parse()和JSON.stringfy()使用注意事项_json.parse string_TomHe789的博客-程序员资料

JSON.parse()作用:用于解析JSON字符串,返回该字符串所描述的JavaScript值或对象。注意:被解析的json字符串必须遵守JSON规范,也就是字符串整体单引号包裹双引号例如:若被解析的字符串为对象,则**对象的键(key)必须使用双引号包裹,如果对象的值(value)**为String类型则也需使用双引号包裹,字符串整体则用单引号包裹:'{"name": "tomhe", "age": 21}'若被解析的字符串为数组,并且数组中的元素为字符串类型,则数组中的元素必须使用双引号包

随便推点

Spark基于Standalone提交任务两种方式_weixin_30716725的博客-程序员资料

Standalone-client模式:1、client模式提交任务后,会在客户端启动Driver进程2、Driver会向Master申请启动Application启动的资源3、资源申请成功,Driver端将task发送到worker端执行4、worker将task执行结果返回到Driver端client模式适用于测试调试程序。Driver进程是在客户端启动的...

IMAP协议与imbox第三方库读取所有邮件_imbox下载邮箱附件_早起的虫子被鸟吃v的博客-程序员资料

IMAP协议全称Internet Mail Access Protocol,即交互式邮件存取协议,邮件客户端通过该协议从邮件服务器上获取邮件信息,下载邮件等。开启方式与POP3/SMTP一样。imbox第三方库安装:pip install imbox读取所有邮件示例:from imbox import Imboximport keyringpwd = keyring.get_password("yagmail","[email protected]")with Imbox("imap.qq.co

jetson nano(B01)配置pytorch和torchvision环境+tensorrtx模型转换+Deepstream部署yolov5(亲测可用)_jetson nano b01 yolov5_我与nano的博客-程序员资料

jetson nano(B01)配置pytorch和torchvision环境+tensorrtx模型转换+Deepstream部署yolov5(亲测可用)前言因为一次比赛接触到了jetson nano,需要使用pycharm训练自己的模型加上yolov5进行目标检测,并部署到jetson nano上,直到比赛结束也没有搞出来,后来jetson nano开始吃灰,后来因为大创需要重新开始了我的yolov5部署之路。网上资料断断续续,不是太清晰,也有太多的坑和bug,在环境配置中跌跌撞撞好几天,最后实现了

遗传算法解决旅行商问题_旅行商问题求解,自行设计城市网络,实现最短路径求解 ①任选语言,利用遗传算法_-wshuhu-的博客-程序员资料

文章目录1.算法原理2.基本步骤3.代码实现1.算法原理2.基本步骤初始化种群个数、交叉概率、变异概率、城市数量等参数值以及适应度函数选择。轮盘赌操作随机选择,并保存当代最佳个体。交叉。确定城市序列后,随机选择某一个城市序列,对其相邻进行交叉操作。 随机选择一个交叉位,点对交换城市。变异。随机产生两个数,当随机数小于变异概率,两个数对应的城市交换迭代更新适应度,记录每一次最短路径。...

oracle期末考试参考答案_奇迹是执着的人创造的的博客-程序员资料

刚刚考完,参考答案,欢迎斧正!A,B相同的准备工作准备工作: 开两个cmd其中一个: sqlplus sys/123456 as sysdba; alter user scott account unlock;另一个: sqlplus scott/tiger;A卷题解1.请完成以下sql...