语义分割学习之SegNet的C++编译
Abstract
安装好Segnet并使用Python进行训练和测试之后,考虑项目的应用,需要在C++的工程环境下进行继续开发,所以这里的主要内容是用C++建立工程,使用相应的数据集和权重参数文件进行测试。
Caffe本身就是用C++开发的,所以也提供了相应的C++接口。作为简单的测试和学习,这里采用开源代码里的SegNet_with_C++进行测试,主要熟悉相关流程。在SegNet的目录下,examples/SegNet_with_C++里包含test_segmentation.cpp。可以使用该文件,建立C++工程。下面是相应步骤。
- 建立一个新的文件夹MySegNet,内部再建立src文件夹,将上述cpp文件copy到src文件夹里。同时将caffe里src下的其他cpp按源目录结构拷贝至此src下。
- 对应的include文件夹也拷贝到MySegNet下。
- 新建一个build文件夹。
- 新建一个CMakeLists.txt。按以下编辑相应的内容。
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(MySegnet) SET(CMAKE_BUILD_TYPE Debug) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread") set(build_libraries ${Caffe_LIBRARIES} ${OpenCV_LIBS} ${BOOST_LIBRARIES} ) add_executable(MySegnet test_segmentation.cpp ) INCLUDE_DIRECTORIES(/home/SegNet/MySegnet/include /home/SegNet/MySegnet/include/caffe /home/SegNet/MySegnet/include/caffe/layer /home/SegNet/MySegnet/include/caffe/util /home/SegNet/MySegnet/include/caffe/test /usr/local/include /usr/local/cuda/include ) target_link_libraries(MySegnet /home/SegNet/caffe-segnet-cudnn5-master/build/lib/libcaffe.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_imgproc.so /usr/lib/x86_64-linux-gnu/libglog.so /usr/lib/x86_64-linux-gnu/libboost_system.so /usr/local/lib/libopencv_imgcodecs.so.3.4 )
上面可能有多余,也可能有不够的,按需添加。注意相应路径的修改。在路径使用上,可以使用绝对路径,也可以使用相对路径。
- 进入build文件夹,在终端打开。
make成功建立target文件就好的,有什么错误对应解决,一般是缺东西,添加相应的内容即可。
cmake (之前CMakeLists.txt所在的路径)
make - 这时可以看到生成的可执行文件,直接执行是没有什么作用的,需要带参数执行。由cpp中main函数代码可知,基本的执行语句是:
sudo ./MySegnet /home/SegNet/MySegnet/bin/segnet_sun.prototxt /home/SegNet/MySegnet/bin/segnet_sun.caffemodel /home/SegNet/MySegnet/image/cat_gray.jpg /home/SegNet/MySegnet/img/sun.png
(exe) (model_file) (trained_file) (test_img) (colors_img)部分文件或图片在caffe_segnet_cudnn5-master里能找到,部分可以去Github上下载。附网址。
-
需要测试更多图片的,可以在main函数中做相应的修改,重新make。测试新的分割,可以自己更改网络,重新训练并使用自己的model_file和trained_file
附相关文章链接:Segnet学习
浙公网安备 33010602011771号