https://my.oschina.net/u/1046919/blog/777470
最近一直在看深度學(xué)習(xí)的東西,用到了ssd登刺,上網(wǎng)一搜籽腕,找到一篇不錯的博客,http://www.cnblogs.com/objectDetect/p/5780006.html纸俭,官網(wǎng)皇耗, 這篇是連安裝cuda到caffe環(huán)境的一系列http://blog.csdn.net/wopawn/article/details/52302164郎楼。經(jīng)過磕磕絆絆呜袁,也決定寫一篇相關(guān)的博客蛉迹。
ssd的demo是介紹了在voc數(shù)據(jù)集上訓(xùn)練和驗證,所以想要簡單的使用ssd訓(xùn)練自己的數(shù)據(jù)北救,就是做成類似voc 的數(shù)據(jù)再調(diào)用ssd 中的ssd_pascal.py進(jìn)行訓(xùn)練珍策。 這里需要說明的是ssd項目中自帶的ssd_pascal.py文件會在VGG的模型上再訓(xùn)練,以我的理解就是在VGG的模型上做fine-tuning屯耸。
現(xiàn)在從頭開始教程:
1 安裝ssd
1.1 首先需要安裝有g(shù)it
sudo apt-getinstallgit
1.2 git ssd 項目
gitclonehttps://github.com/weiliu89/caffe.gitcdcaffegit checkout ssd(出現(xiàn)“分支”則說明copy-check成功)
記得一定要用git的方法,不要直接下載caffe-master.zip這種壓縮包线召,里面沒有g(shù)it的配置缓淹,沒用的塔逃。
1.3 開始編譯ssd
先安裝一些依賴
sudo apt-getinstalllibprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compilersudo apt-getinstall--no-install-recommends libboost-all-dev
ubuntu14.04需要依賴
sudo apt-getinstalllibgflags-dev libgoogle-glog-dev liblmdb-dev
ubuntu16.04需要cuda 8
BLAS:可以通過
sudo apt-getinstall libatlas-base-dev
可以安裝OpenBLAS 或者 MKL湾盗,MKL可以使CPU更好的工作。
要python的話可能要安裝
sudo apt-getinstallpython-pip python-numpy? python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython
開始編譯躏吊,編譯有兩種辦法:
** 1.3.1 直接make**
cd"<你的caffe項目>"cpMakefile.config.exampleMakefile.config
如果你想直接用CPU而不用GPU颜阐,進(jìn)入Makefile.config 將 #CPU_ONLY:=1這句去掉注釋吓肋,像下面這個
# CPU-only switch (uncomment to build without GPU support).CPU_ONLY := 1
如果要改BLAS:
# BLAS choice:#atlasforATLAS (default)#mklforMKL#openforOpenBlasBLAS := atlas
然后執(zhí)行
makeall-j8sudomake installmakeruntest (這個不一定要)makepycaffe
** 1.3.2 用cmake方法安裝**
cd"<你的caffe項目>"mkdir buildcdbuildccmake ..make -j8sudo make installmake runtestmake pycaffe
如果要改BLAS和單用CPU是鬼,在ccmake .. 中選擇紫新。
裝好在之后注意配置python caffe 環(huán)境
vim/etc/profile
在最后一行添加
exportPYTHONPATH=/home/........../caffe/python:$PYTHONPATH
然后更新下環(huán)境
source/etc/profile
1.4 驗證pycaffe環(huán)境
pythonimportcaffe
如果沒有問題那就是成功了
如果有錯誤那么就打開主目錄下的.bashrc寫入那句話,再試試看芒率。
2 訓(xùn)練自己模型
訓(xùn)練VOC數(shù)據(jù)的方法上面那篇博客有講,這里不再多說充择。講講訓(xùn)練自己數(shù)據(jù)椎麦。
現(xiàn)在來看一下voc的標(biāo)簽00001.xml
現(xiàn)在主要更改的是size中的width材彪,height琴儿,object中的name和xmin造成,xmax谜疤,ymin现诀,ymax這幾個東西。
所以每幅圖片都要在樣子更改坐桩,上面的博客推薦了一個bbox-tool绵跷,但是對于我來說不太好用成福,然后就寫了一個基于opencv的程序,稍后放出净当。
在ssd中voc的同級目錄新建一個文件夾像啼,講所有圖片和標(biāo)簽都放進(jìn)去潭苞,做好鏈接?
trainval.txt 存放訓(xùn)練用的圖片路徑此疹,格式類似
data1/image1.jpg data1/image.xml
test.txt 存放測試用的圖片路徑蝗碎,格式和trainval.txt相同
test_name_size.txt 存放測試用的圖片,格式類似測試 “ 圖片名 高 長“
imagetest1300300
labelmap_indoor.prototxt 標(biāo)簽的名字赶么,注意label 0 這類一定會存在脊串,就是圖片bounding box以外的數(shù)據(jù)標(biāo)簽
數(shù)據(jù)做好之后運(yùn)行create_data.sh進(jìn)行整理數(shù)據(jù),create_data.sh里面可能有些路徑錯誤放闺,可以自行改到自己的數(shù)據(jù)目錄。
運(yùn)行create_data.sh之后會在當(dāng)前目錄和ssd的examples下新建一個數(shù)據(jù)目錄篡悟,名字是當(dāng)前目錄的名字搬葬。
3 訓(xùn)練
打開ssd_pascal.py需要修改的有一下幾點(diǎn):
train_data和test_data , 指向examples中你的數(shù)據(jù)艳悔,例如
train_data="examples/indoor/indoor_trainval_lmdb"# The database file for testing data. Created by data/VOC0712/create_data.shtest_data="examples/indoor/indoor_test_lmdb"
num_test_image該變量修改成自己數(shù)據(jù)集中測試數(shù)據(jù)圖片的數(shù)量
num_classes 該變量修改成自己數(shù)據(jù)集中 標(biāo)簽類別數(shù)量數(shù) + 1
gpus = "0,1,2,3" 電腦有幾個gpu就寫多少個猜年,如果有一個就寫gpus="0",兩個就寫gpus="0,1",以此類推。
最后到caffe的根目錄運(yùn)行, ps:你的ssd_pascal.py的目錄是example/yourSSD/ssd_pascal.py
pythonexample/yourSSD/ssd_pascal.py
4 測試
有好幾種測試的方法床三,
4.1 python
在caffe的根目錄運(yùn)行ssd_pascal_webcam.py這個文件撇簿,這是使用攝像頭實(shí)時測試的軟件推汽,讀取的caffemodel是在caffe/models/VGGNet/VOC0712/SSD_300x300_webcam下最新的model歧沪,所以記得在這個文件夾中放入模型诊胞。 還要更改下ssd_pascal_webcam.py中l(wèi)abel_map_file到你的labelmap_voc.prototxt
pythonexamples/ssd/ssd_pascal_webcam.py
4.2 c++
編譯完SSD后,C++版本的的可執(zhí)行文件存放目錄: .build_release/examples/ssd/ssd_detect.bin
測試命令 ./.build_release/examples/ssd/ssd_detect.bin models/VGGNet/indoor/deploy.prototxt models/VGGNet/indoor/VGG_VOC0712_SSD_300x300_iter_60000.caffemodel pictures.txt
ssd自帶ssd_detect.cpp迈着,可以拿來使用裕菠。
** 4.2.1 用qt** .pro件定義中需要引入你的caffe配置闭专,例如
LIBS += /home/xxx/caffe/build/lib/libcaffe.so INCLUDEPATH += /home/xxx/caffe/includeINCLUDEPATH += /home/xxx/caffe/build/include
可能還會有一些編譯問題:
error while loading shared libraries: libglog.so.0: cannot open shared object file: No such file or directory 解決
LIBS +=/usr/lib/x86_64-linux-gnu/libglog.so
libcaffe.so.1.0.0-rc3: cannot open shared object file: No such file or directory 解決:在/etc/ld.so.conf.d/下新建caffe.conf文件,在caffe.conf中加入到libcaffe.so.1.0.0-rc3的位置画髓,基本上是在build的lib里。
** 4.2.2 使用cmake**
如果是使用cmake夺谁,注意安裝ssd的時候一定要make install
然后CMakeLists.txt
find_package(OpenCV REQUIRED)find_package(Caffe REQUIRED)#option (CPU_ONLY"Use CPU or use GPU"ON)#option (USE_OPENCV"Use CPU or use GPU"ON)include_directories( ${Caffe_INCLUDE_DIRS} )add_definitions(${Caffe_DEFINITIONS})# ex. -DCPU_ONLYadd_executable(ssd_detect ssd_detect.cpp )
使用cpu或者gpu可以在選項里面定義匾鸥。