ubuntu18.04配置caffe并实现ssd的成功运行
配置caffe
- 按照https://blog.csdn.net/CAU_Ayao/article/details/83536320此网址安装依赖库(只安装依赖库就可以了),按照https://www.jianshu.com/p/4eaedaeafcb4此网址git clone caffe 和 ssd 。
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd(出现“分支”则说明copy-check成功...作者caffe目录下有三个分支fcn/master/ssd,利用git checkout来切换分支,否则只有master目录下的文件)
- 然后修改Makefile和Makefile.onfig,修改在根目录下的Makefile.config文件,主要是关于使用GPU还是CPU,Cuda路径、cudnn路径、python路径以及matlab路径的设置。在这里我不讲解怎么具体去修改该文件我给出Makefile 和Makefile.config修改后的源码。
- 修改完之后执行代码进行make编译
cd ~caffe
sudo make clean
mkdir build
cd build
sudo cmake ..
cd ..
sudo make all
sudo make test
sudo make runtest
sudo make pycaffe (执行这句话之前一定将python路径添加到环境变量 export PYTHONPATH=/home/yh/caffe/python:$PYTHONPATH
可根据你的caffe下的python路径进行修改)
在运行Make的时候可能会报错,我列出我遇见的错误:
错误1:
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
collect2: error: ld returned 1 exit status
错误1的解决办法:
在caffe根目录下的Makefile文件最后添加以下代码:
ifeq ($(USE_OPENCV), 1)
LIBRARIES += opencv_core opencv_imgproc opencv_videoio
ifeq ($(OPENCV_VERSION), 3)
LIBRARIES += opencv_imgcodecs opencv_videoio
endif
endif
如果还是没有成功,按照 链接 (https://blog.csdn.net/CAU_Ayao/article/details/83899878) 重新编译boost,但是记住无需./b2 install --prefix=/usr
直接 ./b2 install
安装在默认的位置就好了。**
错误2:
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::io::CodedOutputStream::WriteVarint64ToArray(unsigned long long, unsigned char*)'未定义的引用
错误2的解决办法:
1.将Makefile.config中的INCLUDE_DIRS和LIBRARY_DIRS改成如下格式,此问题是因为存在多个版本的protobuf(自己安装了一个,anaconda中有一个),所以将$(PYTHON_INCLUDE)移动到 INCLUDE_DIRS的最后,这样就会先调用其他地方的protoc,而不是调用anaconda中的protoc就可以解决上面的问题了!!!!如果解决不了,在此基础上进行步骤2
INCLUDE_DIRS := /usr/local/include /usr/include/hdf5/serial $(PYTHON_INCLUDE)
LIBRARY_DIRS := /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial $(PYTHON_LIB)
2.用which protoc查看自己的protoc的位置是否是anaconda下的,如果是的话就重新安装一个非anaconda内部的protobuf,安装办法: 链接此办法在Ubuntu18.04下依旧适用。
make all 或者 make runtest的时候出现 错误3:
.build_release/tools/caffe
.build_release/tools/caffe: error while loading shared libraries: libcurand.so.9.0: cannot open shared object file: No such file or directory
Makefile:544: recipe for target 'runtest' failed
make: *** [runtest] Error 127
错误3解决办法:
sudo cp /usr/local/cuda-9.0/lib64/libcudart.so.9.0 /usr/local/lib/libcudart.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcublas.so.9.0 /usr/local/lib/libcublas.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcurand.so.9.0 /usr/local/lib/libcurand.so.9.0 && sudo ldconfig
如果是 cuda8.0 就将三句话里面的9.0换为8.0就可以了~~
其他的错误在网上都能很简单的搜索到解决办法。祝大家先编译成功。
数据集和模型准备
VOC数据集下载
VOC2007 VOC2012数据集下载
只需要下载如图所示的三个文件即可。
分别为:
- VOC2012trainval
VOC2007trainval
VOC2007test
#### Download the data.
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
# Extract the data.
(先在根目录(注意是在根目录下也就是home目录下,这样我们不需要更改后面文件的路径了)下建立data文件夹夹,然后进入data文件夹,按照顺序解压下面三个文件到data文件夹
mkdir data
cd data
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
VGG-16预训练模型下载
将此模型放在caffe/models/VGGNet下,如果没有就新建这个目录然后放入。
LMDB数据集制作
直接运行
cd /home/yh/caffe
sh ./data/VOC0712/create_list.sh
sh ./data/VOC0712/create_data.sh
create_list.sh 和 create_data.sh 文件链接点击查看。
可能会报错1
关于模型找不到的错误,具体代码我这就不贴出来了
解决办法:
在报错文件中加入caffe下面的python路径
import sys
sys.path.insert(0,'/home/yh/caffe/python')
此时数据集已经准备好了。
训练模型
首先需要修改/caffe/examples/ssd/ssd_pascal.py文件
注意:最后跑 ssd_pascal.py 必须在caffe目录下,用sudo python examples/ssd/ssd_pascal.py
,因为 ssd_pascal.py 中有相应的路径查找必须从caffe目录开始查找。
因为我要跑原始的caffe ssd,所以这里只修改了gpus = "0,1,2,3"
改为了gpus = "0"
错误报告1
模型找不到
错误1解决办法
在ssd_pascal.py文件的最上面加入
import sys
sys.path.insert(0,'/home/yh/caffe/python')
错误报告2
I1101 21:03:16.666795 10547 layer_factory.hpp:77] Creating layer data
I1101 21:03:16.666965 10547 net.cpp:100] Creating Layer data
I1101 21:03:16.666981 10547 net.cpp:408] data -> data
I1101 21:03:16.667016 10547 net.cpp:408] data -> label
F1101 21:03:16.668125 10578 db_lmdb.hpp:15] Check failed: mdb_status == 0 (13 vs. 0) Permission denied
*** Check failure stack trace: ***
@ 0x7f7481daa0cd google::LogMessage::Fail()
@ 0x7f7481dabf33 google::LogMessage::SendToLog()
@ 0x7f7481da9c28 google::LogMessage::Flush()
@ 0x7f7481dac999 google::LogMessageFatal::~LogMessageFatal()
@ 0x7f74824c9890 caffe::db::LMDB::Open()
@ 0x7f74826a0416 caffe::DataReader<>::Body::InternalThreadEntry()
@ 0x7f748269c7c5 caffe::InternalThread::entry()
@ 0x7f74772df8d5 thread_proxy
@ 0x7f74630ae6db start_thread
@ 0x7f748058988f clone
错误2解决办法
从打印的日志文件看出:错误出现的原因是因为数据文件没有找到,这个时候可能是因为你根本没有生成数据文件,也可能是因为你的数据文件生成的时候用sudo,所以现在读取没用sudo就没有权限读取,所以解决办法是:sudo python examples/ssd/ssd_pascal.py
,一定记得用sudo噢!
如果还有其他错误,请参考 链接(这个链接非常好,基本能解决所有运行ssd_pascal.py的错误)
最后终于成功开始训练了
注意每次重新执行都要重新运行一遍:sudo make pycaffe
,否则会报错找不到caffe模型