前言
segnet語義分割模型是一種經典的Encoder-Decoder的全卷積網絡模型。github上有比較多使用pytorch框架來該模型的實現。而論文作者Alex是基於caffe框架來對它進行復現。 、
我們這裏考慮是後者,其對應的github地址爲https://github.com/alexgkendall/caffe-segnet
代碼下載及準備
首先下載代碼,如下圖所示。 網絡不好時,容易下載失敗。有時明明直接下載zip包成功,但是解壓縮失敗。總之多試幾次。
2)依賴包的安裝
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev
編譯過程
1)在caffe-segnet根目錄下, cp Makefile.config.example Makefile.config 然後對Makefile.config進行修改,如下所示。
2)編譯遇到的第一個問題:protoc: Command not found 如下圖所示
解決方法:需要安裝protoc-c
sudo apt-get install protobuf-c-compiler protobuf-compiler
3)gflags.h找不到的錯誤,如下所示
./include/caffe/common.hpp:5:10: fatal error: gflags/gflags.h: 沒有那個文件或目錄
#include <gflags/gflags.h>
解決思路:
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
4)cblas.h找不到的錯誤
./include/caffe/util/mkl_alternate.hpp:11:10: fatal error: cblas.h: 沒有那個文件或目錄
#include <cblas.h>
解決方法:
sudo apt-get install libblas-dev
5)找不到hdf5.h文件
./include/caffe/data_layers.hpp:9:10: fatal error: hdf5.h: 沒有那個文件或目錄
#include "hdf5.h"
解決方法:
sudo apt-get install libhdf5-serial-dev
6)不支持 compuer_20的CUDA架構
nvcc fatal : Unsupported gpu architecture 'compute_20'
Makefile:539: recipe for target '.build_release/cuda/src/caffe/layers/mvn_layer.o' failed
解決辦法,如上面截圖所示,就是將Makefile.confg中的computer_20,computer_21給注掉。
7)鏈接時找不到 atlas庫
LD -o .build_release/lib/libcaffe.so
/usr/bin/ld: 找不到 -lcblas
/usr/bin/ld: 找不到 -latlas
解決辦法:
sudo apt-get install libatlas-base-dev
8)最後一個鏈接錯誤是,找不到imread之類的opencv APIs.
build_release/lib/libcaffe.so:對‘cv::imread(cv::String const&, int)’未定義的引用
解決方法是 在Makefile裏面 將libopencv_imgcodecs.so庫鏈接進來
結束語
終於可以 make all -j8 以及 make pycaffe -j8成功了。這其實就是在一個比較乾淨的ubuntu18.04上面想要編譯caffe代碼通過的程。