semanticFusion_训练替换其他网络个人记录训练替换其他网络个人记录
semanticFusion(SF)替换其他网络常见问题总结:替换其他网络常见问题总结:
分为两种方式,第一种直接替换,第二种部分替换,第一种方便快捷,第二种是要学习caffe必须要掌握的。
-------------------------分割线----------------------------
第一种直接替换:第一种直接替换:
caffe_semanticfusion模块,可直接替换其他可直接替换其他caffe版本语义分割网络,只需要将改一下名字版本语义分割网络,只需要将改一下名字(eg:deeplab-public-ver2->caffe_semanticfusion),提换SF原有模块,然后在此基础上训练,将生成好的
caffemodel放入替换对应位置。
如果只是rgb的网络,不使用深度信息,需要更改/semanticfusion/src/main.cpp中的路径。
//caffe.Init("../caffe_semanticfusion/models/nyu_rgbd/inference.prototxt","../caffe_semanticfusion/models/nyu_rgbd/inference.caffemodel");
// This is for the RGB network
caffe.Init("../caffe_semanticfusion/models/nyu_rgb/inference.prototxt","../caffe_semanticfusion/models/nyu_rgb/inference.caffemodel");
比如直接替换deeplabv2:
但可能会遇到一些问题:但可能会遇到一些问题:
1.cudn不匹配问题,下边有解决方案。
2. ./include/caffe/common.cuh(9): error: function "atomicAdd(double *, double)" has already been defined,解决方案here
3.解决方案
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarCreate'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_CreateVer'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarWrite'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarFree'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarReadInfo'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_Close'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarReadDataLinear'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_Open'
collect2: error: ld returned 1 exit status
caffe_semanticfusion/tools/CMakeFiles/upgrad
4.权限 / 库冲突 (简单点的,就整个sudo su,在root下,先编译caffe_semanticfusion,再编译外边的semanticfusion.
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFWriteEncodedStrip@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFIsTiled@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFOpen@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFReadEncodedStrip@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFSetField@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFWriteScanline@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFGetField@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFScanlineSize@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFNumberOfStrips@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFSetWarningHandler@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFSetErrorHandler@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFReadEncodedTile@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFReadRGBATile@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFClose@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFRGBAImageOK@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFClientOpen@LIBTIFF_4.0'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'
-------------------------分割线----------------------------
第二种部分替换:第二种部分替换:
如果想自己增添修改网络,建议自己安装Meld对比软件(apt-get install),查找学习各个caffe开源网络,替换相关层与数据。
下面不是直接替换下面不是直接替换
下面是部分替换下面是部分替换
建议上面的方法最便捷,但如果要用建议上面的方法最便捷,但如果要用caffe学习,就要学会自己设计。学习,就要学会自己设计。
1.编译编译caffe_semanticfusion的的python接口接口
SF里的caffe是原本用cmake来编译的,配置文件是CMakeLists.txt, 但我使用本地caffe文件里的Makefile.config来配置,使用 make all -j8 命令直接在caffe_semanticfusion里编译,不新建build使用cmake,因为SF里的caffe并没有编译python接口和tools等,当然你也可以你也可以选择修改CMakeLists.txt文件。