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
因为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
查看/build/文件,可以看到里面有test_cpu和test_gpu,如果是cpu编译,那就只有_cpu
之前使用cpu的时候出现的一个错误,提示找不到so文件
所以这次使用gpu的时候先复制,再测试
cp libwarpctc.so /usr/lib/
./test_gpu
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 下载子文件
我试过,不覆盖也可以编译,没有出现什么问题
将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/
将warp-ctc里面src里面的文件放到warpctc-caffe/src/caffe/3rdparty/
cd ../src/
cp * /opt/warpctc-caffe/src/caffe/3rdparty/
参考: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修改
make all的时候其实就是为了生成一个*.o文件,我下面出现的连个报错都是因为在生成.o文件的时候没有找到c++代码里面的头文件,只要确保路径找到,然后成功生成层的编译文件.o就可以。
并且,在make all的过程中发现,如果make到一半报错,修改之后再次make是会从报错的点开始的。
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
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加入到这行的末尾
参考:https://blog.csdn.net/Diana_Z/article/details/100021952
make test
make runtest
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