SSD安装及训练自己的数据集
最近一直在搞object detection玩,之前用的是faster-rcnn,準(zhǔn)確率方面73.2%,效果還不錯(cuò),但是識(shí)別速度有點(diǎn)欠缺,我用的GPU是GTX980ti, 識(shí)別速度大概是15fps.最近發(fā)現(xiàn)SSD(single shot multibox detector) 這篇論文效果和速度都不錯(cuò),我自己實(shí)驗(yàn)了一下,速度確實(shí)比f(wàn)aster-rcnn快不少。下面分兩部分來(lái)介紹。第一部分介紹SSD的安裝,第二部分介紹如何基于SSD訓(xùn)練自己的數(shù)據(jù)集。
第一部分 SSD安裝
系統(tǒng):ubuntu 14.04
語(yǔ)言:python
ssd項(xiàng)目主頁(yè):https://github.com/weiliu89/caffe/tree/ssd
首先,我們把項(xiàng)目代碼clone下來(lái), 然后編譯:
- 1
- 2
- 3
接下來(lái),我們開(kāi)始編譯caffe,編譯caffe非常容易,這里我們?yōu)V過(guò),如若感興趣,可參考我之前的博客:http://blog.csdn.net/zhang_shuai12/article/details/52289825,此篇講的是caffe + cpu + ubuntu14.04的安裝, GPU版安裝需修改Makefile.config文件, 修改完成后:
make make py- 1
- 2
到這里我們就完成了SSD的安裝,接下來(lái)我們講一下如何訓(xùn)練自己的數(shù)據(jù)集。
第二部分 訓(xùn)練自己的數(shù)據(jù)集
首先我們不妨先跑一下項(xiàng)目的demo, 需要下載數(shù)據(jù)集,提前訓(xùn)練好的數(shù)據(jù)集等。
下載預(yù)訓(xùn)練的模型,鏈接:https://gist.github.com/weiliu89/2ed6e13bfd5b57cf81d6,下載完成后保存在:
- 1
下載VOC2007和VOC2012數(shù)據(jù)集, 放在/data目錄下:
cd 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.tartar -xvf VOCtrainval_11-May-2012.tar tar -xvf VOCtrainval_06-Nov-2007.tar tar -xvf VOCtest_06-Nov-2007.tar- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
創(chuàng)建lmdb格式的數(shù)據(jù):
cd caffe ./data/VOC0712/create_list.sh # It will create lmdb files for trainval and test with encoded original image: # - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb # - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb ./data/VOC0712/create_data.sh- 1
- 2
- 3
- 4
- 5
- 6
訓(xùn)練和測(cè)試:
python examples/ssd/ssd_pascal.py- 1
- 2
論文中,作者已經(jīng)預(yù)訓(xùn)練好模型,下載鏈接:http://www.cs.unc.edu/%7Ewliu/projects/SSD/models_VGGNet_VOC0712_SSD_300x300.tar.gz,我們不必自己再去訓(xùn)練, 下載完成后放入指定的文件夾下。
測(cè)試時(shí),我們使用/example/ssd/目錄里的ssd_detect.ipynb,運(yùn)行這個(gè)文件,需要安裝ipython及ipython-notebook, 或者直接把里面的代碼拷貝出來(lái),寫(xiě)到一個(gè)新的python文件里,比如命名ssd_detector.py.
OK, 下面修改一系列文件來(lái)訓(xùn)練自己的數(shù)據(jù)集
兩種方案, 第一:保持原來(lái)的文件目錄結(jié)構(gòu)及文件名不變, 只替換里面的數(shù)據(jù)。第二:重新新建一個(gè)與之前類(lèi)似的目錄結(jié)構(gòu),改成自己命名的文件夾,第二種方法,有一定的風(fēng)險(xiǎn)性,需要修改程序里涉及數(shù)據(jù)路徑的代碼。在之前講解的faster-rcnnan那篇博客中, 我們采用第一種方案。本次我們采用第二種方案。
在/data目錄下創(chuàng)建一個(gè)自己的文件夾:
- 1
- 2
把/data/VOC0712目錄下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 這三個(gè)文件拷貝到/mydataset下:
cp data/create* ./mydataset cp data/label* ./mydataset- 1
- 2
labelmap_voc.prototxt, 此文件定義label。
在/data/VOCdevkit目錄下創(chuàng)建mydataset, 并放入自己的數(shù)據(jù)集:
cd data/VOCdevkit mkdir mydataset cd mydataset mkdir Annotations mkdir ImageSets mkdir JPEGImages cd ImageSets mkdir Layout mkdir Main mkdir Segmentation- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
其中Annotations中存放一些列XML文件,包含object的bbox,name等;
ImageSets中三個(gè)子目錄下均存放train.txt, val.txt, trainval.txt, test.txt這幾個(gè)文件,文件內(nèi)容為圖片的文件名(不帶后綴);
JPEGImages存放所有的圖片;
在/examples下創(chuàng)建mydataset文件夾:
mkdir mydataset- 1
文件夾內(nèi)存放生成的lmdb文件。
上述文件夾創(chuàng)建好后, 開(kāi)始生成lmdb文件, 在創(chuàng)建之前需要修改相關(guān)路徑:
./data/mydataset/create_list.sh ./data/mydataset/create_data.sh- 1
- 2
此時(shí),在examples/mydataset/文件夾下可以看到兩個(gè)子文件夾, mydataset_trainval_lmdb, mydataset_test_lmdb;里面均包含data.dmb和lock.dmb;
到此為止,我們的數(shù)據(jù)集就做好了。接下來(lái)就開(kāi)始訓(xùn)練了。訓(xùn)練程序?yàn)?examples/ssd/ssd_pascal.py,運(yùn)行之前,我們需要修改相關(guān)路徑代碼:
cd /examples/ssd vim sd_pascal.py, 修改如下: 57行: train_data路徑; 59行:test_data路徑; 197-203行:save_dir、snapshot_dir、job_dir、output_result_dir路徑; 216-220行: name_size_file、label_map_file路徑; 223行:num_classes 修改為1 + 類(lèi)別數(shù) 315行:num_test_image:測(cè)試集圖片數(shù)目- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
另外, 如果你只有一個(gè)GPU, 需要修改285行:
gpus=”0,1,2,3” ===> 改為”0”
否則,訓(xùn)練的時(shí)候會(huì)出錯(cuò)。
修改完后運(yùn)行
- 1
訓(xùn)練完, 修改ssd_detector.py中模型路徑, 任意找一張圖片識(shí)別,看看效果怎么樣。
如果在這過(guò)程中有什么問(wèn)題, 可隨時(shí)私信我。
參考:
【1】《SSD: Single Shot MultiBox Detector》 By Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg.
【2】https://github.com/weiliu89/caffe/tree/ssd
總結(jié)
以上是生活随笔為你收集整理的SSD安装及训练自己的数据集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 翻译SSD论文(Single Shot
- 下一篇: SSD 安装、训练