在caffe的容器使用warpctc的代码

环境:

ubuntu18.04,     4GPU,    已经安装了nvidia-docker,    下载了caffe的gpu版本docker

docker的安装,以及gpu版本的nvidia-docker的安装可以参考链接

https://blog.csdn.net/Diana_Z/article/details/100011628

https://blog.csdn.net/Diana_Z/article/details/97376691

1、ctc

(1)下载ctc并安装ctc

因为caffe的官网docker中caffe的文件夹在/opt/目录下,所以我们将之后的ctc以及warptct-caffe的文件也放在这里。

参考:https://blog.csdn.net/qq_26819733/article/details/53608308

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

cd warp-ctc
mkdir build
cd build
cmake ..
make

在caffe的容器使用warpctc的代码_第1张图片

2、测试ctc是否可用

查看/build/文件,可以看到里面有test_cpu和test_gpu,如果是cpu编译,那就只有_cpu

之前使用cpu的时候出现的一个错误,提示找不到so文件

所以这次使用gpu的时候先复制,再测试

cp libwarpctc.so /usr/lib/
./test_gpu

2、warpctc-caffe

(1)下载代码

caffe的官方docker里面已经有caffe的代码了,但是因为我特别需要的是ctc层,所以下载了下面这个地址的caffe代码

caffe中的最新代码在makectc的时候有可能会产生问题,需要使用专门版本的caffe。

参考:https://blog.csdn.net/zchang81/article/details/77040448

git地址:https://github.com/xmfbit/warpctc-caffe

git clone --depth=1 --recursive https://github.com/xmfbit/warpctc-caffe.git

--depth=1   只下载当前最新的版本

--recursive  下载子文件

(2)将编译好的ctc的include和src里面的文件放到相应位置覆盖原来的文件

我试过,不覆盖也可以编译,没有出现什么问题

将warp-ctc里面编译好的include放到warpctc-caffe/include/caffe/3rdparty里面

cd warp-ctc/include/
cp -r contrib/ /opt/warpctc-caffe/include/caffe/3rdparty/
cp -r detail/ /opt/warpctc-caffe/include/caffe/3rdparty/
cp ctc.h /opt/warpctc-caffe/include/caffe/3rdparty/

 

在caffe的容器使用warpctc的代码_第2张图片

将warp-ctc里面src里面的文件放到warpctc-caffe/src/caffe/3rdparty/

cd ../src/
cp * /opt/warpctc-caffe/src/caffe/3rdparty/

(3)make整个caffe

参考:http://caffe.berkeleyvision.org/installation.html

cd warpctc-caffe/
cp Makefile.config.example Makefile.config
#修改Makefile.config 文件
make all

修改Makefile.confin的GPU/CPU

如果可以直接在容器中vim打开,那就直接打开

如果不可以,我就直接复制出来,然后再改好再传回去

CPU修改

GPU修改

在caffe的容器使用warpctc的代码_第3张图片

make all的时候其实就是为了生成一个*.o文件,我下面出现的连个报错都是因为在生成.o文件的时候没有找到c++代码里面的头文件,只要确保路径找到,然后成功生成层的编译文件.o就可以。

并且,在make all的过程中发现,如果make到一半报错,修改之后再次make是会从报错的点开始的。

(4)make过程中报错

1、hdf5

src/caffe/layers/hdf5_output_layer.cpp:3:18: fatal error: hdf5.h: No such file or directory
compilation terminated.
Makefile:580: recipe for target '.build_release/src/caffe/layers/hdf5_output_layer.o' failed
make: *** [.build_release/src/caffe/layers/hdf5_output_layer.o] Error 1

参考:https://blog.csdn.net/xue_wenyuan/article/details/52037121

2、ctc

src/caffe/3rdparty/ctc_entrypoint.cpp:5:17: fatal error: ctc.h: No such file or directory
compilation terminated.
Makefile:581: recipe for target '.build_release/src/caffe/3rdparty/ctc_entrypoint.o' failed
make: *** [.build_release/src/caffe/3rdparty/ctc_entrypoint.o] Error 1

同上,在Makefile.confin文件中修改,将/opt/warp-ctc/include加入到这行的末尾

3、关键字"__shfl_down"的错误

参考:https://blog.csdn.net/Diana_Z/article/details/100021952

(5)继续make

make test
make runtest

在caffe的容器使用warpctc的代码_第4张图片

在caffe的容器使用warpctc的代码_第5张图片

在caffe的容器使用warpctc的代码_第6张图片

 

配置文件

solver

net: "./examples/warpctc_captcha/lstm_ctc.prototxt"
//网络模型文件
test_iter: 156
//测试图片一个epoch需要的step个数
//我使用测试数据10034,batchsize=64,
test_interval: 500
//测试间隔,每训练500次,一次测试
base_lr: 0.0001
lr_policy: "step"
gamma: 0.1
//学习率以及相关参数
stepsize: 25000
//
display: 500
//每训练500次,在屏幕上显示一次。如果设置为0,则不显示。
max_iter: 50000
//最大迭代次数。这个数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间。
momentum: 0.9
//上一次梯度更新的权重
weight_decay: 0.0005
//权重衰减项,防止过拟合的一个参数
snapshot: 500
//快照。将训练出来的model和solver状态进行保存,snapshot用于设置训练多少次后进行保存,默认为0,不保存。
snapshot_prefix: "./examples/warpctc_captcha/model/lstm_ctc"
//模型保存地址
solver_mode: CPU
//cpu训练还是gpu训练
clip_gradients: 5000
                 

 

 

 

 

 

 

 

你可能感兴趣的:(在caffe的容器使用warpctc的代码)