SSD: Single Shot MultiBox Detector的安裝配置和運行

SSD(Single Shot MultiBox Detector)算是一個比較不錯的目標檢測算法,主攻方向是速度,當然精度也比Yolo提高了一些,最近在ubuntu16.04下實現了代碼運行,此博文主要內容來自原作者的github,加上了一些個人理解,歡迎探討。

PS:SSD代碼和模型常常在更新,我給的鏈接可能不是最新版,如運行出錯請參看官方github。

準備工作:linux+cuda+caffe是標配,我就不詳述了,推薦博客:

ubuntu16.04+nvidia gt740m+cuda7.5+caffe安裝、測試經歷 http://blog.csdn.net/WoPawn/article/details/52313914

下面正式開始:

1.獲取源碼

git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

說明:SSD採用的是在caffe文件夾中內嵌例程的方式,作者改動了原版caffe,所以你需要把原來的caffe文件夾移除,git命令會新建一個帶有SSD程序的caffe文件夾,當然,這個新的caffe要重新編譯一次。

2.編譯caffe

cd /home/mx/caffe
cp Makefile.config.example Makefile.config

運行時報錯不斷,事後總結,需要修改配置文件,用gedit或者vim打開配置文件進行修改:

1)Makefile.config文件中

USE_CUDNN :=1取消註釋

2)Makefile.config文件中

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include後面打上一個空格,

然後添加/usr/include/hdf5/serial, 如果沒有這一句會報一個找不到hdf5.h的錯誤

3)makefile文件中

替換NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) 

保存退出。

繼續輸入命令

make -j8 #8線程
make py
make test -j8
make runtest -j8 #貌似不是必須的,跑一遍用了10多分鐘

3.訓練模型

節省時間的做法是,直接下載原作者最終弄好的模型:

http://www.cs.unc.edu/~wliu/projects/SSD/models_VGGNet_VOC0712_SSD_300x300.tar.gz 

解壓後將voc0712文件夾放入/home/mx/caffe/models/VGGNet/之下

OR:條件較好的同學可以下載圖片數據和預訓練模型,進行finetuning,得到最終可用的模型,步驟如下:

1)下載預訓練模型 

https://gist.github.com/weiliu89/2ed6e13bfd5b57cf81d6

將其放入新建的文件夾/home/mx/caffe/models/VGGNet/

2)下載voc2007和voc2012數據集

cd /home/mx/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

如果終端下載太慢,那就按照地址手動下載文件,依然放入文件夾/home/mx/data/

解壓文件,按照順序來

cd /home/mx/data
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar

3)將圖片轉化爲LMDB文件,用於訓練

cd /home/mx/caffe
./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh

這裏用的腳本實現批處理,可能會出現錯誤:no module named caffe或者no module named caffe-proto,那是caffe的Python環境變量未配置好,解決方法:


echo "export PYTHONPATH=/home/username/caffe/python:$PYTHONPATH" >> ~/.profile
source ~/.profile
echo $PYTHONPATH #檢查環境變量的值

設好環境變量後,重新運行命令就不會出錯了

4)訓練模型(finetuning)

cd caffe/
python examples/ssd/ssd_pascal.py

4.演示效果

PS:之前有說過,SSD代碼和模型常在更新,如果有同學遇到“shape mismatch. Source param shape is 12 512 3 3 (55296); target param shape is 16 512 3 3 (73728)”這種錯誤,請一定去github下載最新的模型。

SSD的作者在/home/mx/caffe/examples/ssd/文件夾下,放了好幾個Python文件,都是直接調用,可以檢測圖片,視頻,以及電腦前置攝像頭

1)圖片測試集

python examples/ssd/score_ssd_pascal.py

大概看了下代碼們這裏是跑了一遍數據集,得出準確率,我記得是百分之70多。要想用單張圖片檢測,貌似ssd_detect.cpp可用,博主還要研究下

2)電腦前置攝像頭

python examples/ssd/ssd_pascal_webcam.py

下圖爲檢測效果,身在實驗室,只能對準天花板了:

 3)視頻檢測

python examples/ssd/ssd_pascal_video.py

當然,這樣直接跑肯定不行,要先用vim打開該文件,定位到51行,修改視頻路徑爲已有本地視頻,然後運行纔不報錯。

博主在youtube下載了一段車載視頻,以下是檢測效果圖,還不錯:

原作者說SSD運行時能有幾十幀,可是人家用的是Titan X,我運行時只有10幀只能是GTX850M顯卡太渣了。。。

參考文獻:https://github.com/weiliu89/caffe/tree/ssd

下一步方向:研究SSD的python源代碼,然後訓練和檢測自己的數據

發佈了34 篇原創文章 · 獲贊 360 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章