1. 程式人生 > >SSD配置和訓練以及遇到的坑

SSD配置和訓練以及遇到的坑

SSD配置

1、clone作者github下的caffe檔案包

git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd(出現“分支”則說明copy-check成功...作者caffe目錄下有三個分支fcn/master/ssd, 利用git checkout來切換分支,否則只有master目錄下的檔案,這一步特別重要,一定不能省略)

2.修改Makefile和Makefile.config 檔案(和配置caffe過程中的修改一樣,具體可參考caffe編譯中的python問題

3.編譯,編譯的時候有兩種選擇

1) 網上很多教程說需要cmake,其實不用cmake,直接make (親測有效)

make all –j512
make runtest
make pycaffe

2) 當然如果make後失敗,可以採用這種第二種方法(如果已經make過了,首先記得make clean)

mkdir build
cd build
cmake ..
make all –j512
make install
make runtest #這一步不是必須的
make pycaffe

tips:使用第二種方法時,這裡由於博主使用的電腦沒有安裝cudnn,於是在make all 的時候出現了很多關於cudnn的錯誤,解決這個問題的方法是修改CMakeList.txt的下面這一句,將ON改成OFF。

caffe_option(USE_CUDNN"Build Caffe with cuDNN library support" OFF IFNOT CPU_ONLY)

訓練

1.    下載預訓練模型

http://cs.unc.edu/~wliu/projects/ParseNet/VGG_ILSVRC_16_layers_fc_reduced.caffemodel

放到caffe/models/VGGNet/路徑下

2.    準備資料集

1)下載資料集caffe/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

2)解壓資料

tar -xvf  VOCtrainval_11-May-2012.tar
tar –xvf  VOCtrainval_06-Nov-2007.tar
tar -xvf  VOCtest_06-Nov-2007.tar

資料解壓後會得到一個名為VOCdevkit的資料夾,裡面存放了VOC2007和VOC2012兩個資料集的資料。

3)接下來生成lmdb檔案以及label檔案。

./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh

tips:這裡注意需要修改data/VOC0712/create_list.sh和 data/VOC0712/create_data.sh裡面的路徑,將root_dir改為自己路徑



訓練

執行

cd caffe
python examples/ssd/ssd_pascal.py

tips:一定要在caffe路徑下執行,否則會出現找不到caffe的錯誤。

遇到的問題

1)    配置SSD-caffe出現“ AttributeError: 'module' object has no attribute 'LabelMap'”

這是由於caffe的Python環境變數未配置好,可按照下面方法解決:

echo "exportPYTHONPATH=/home/huster/xxp/ssd/caffe/python" >> ~/.profile 
source ~/.profile 
echo $PYTHONPATH #檢查環境變數的值

2 配置SSD-caffe測試時出現“Check failed: error ==cudaSuccess (10 vs. 0) invalid device ordinal”

     這是由於GPU數量不匹配造成的,如果訓練自己的資料,那麼我們只需要將solver.prototxt檔案中的device_id 項改為自己的GPU塊數,一塊就是0,兩塊就是1,以此類推。

但是SSD配置時的例子是將訓練語句整合成一個python檔案ssd_pascal.py,所以需要改此程式碼。相關配置訓練方法請參看轉載博文:http://blog.csdn.net/xunan003/article/details/78427446

解決方法:將ssd_pascal.py檔案中第332行gpus= "0,1,2,3"的GPU選擇改為gpus = "0",後面的1,2,3都刪掉即可。再次訓練即可。

當然,由於博主只有一塊GPU且電腦執行記憶體有限,還需要將ssd_pascal.py檔案中的337行batch_size= 32和338行accum_batch_size= 32都改小一倍,即更改批量大小,不然會出現“Check failed: error == cudaSuccess(2 vs. 0)  invalid ...”的錯誤。

終於能開始訓練了。剩下的下次更新。奮鬥

感謝以下部落格:

【1】https://www.jianshu.com/p/4eaedaeafcb4

【2】https://blog.csdn.net/xunan003/article/details/78432943