SSD演算法的MXNet實現
前段時間看到一個SSD(SSD:single shot multibox detector )演算法的MXNet實現,程式碼風格不錯,特來分享。
SSD演算法的介紹可以參看部落格:SSD(single shot multibox detector)演算法及Caffe程式碼詳解
接下來結合親自實驗列一下如何跑這個模型,系統:Ubuntu 16.04
1、本地安裝好MXNet
2、跑demo
2.1 先拉取mxnet-ssd專案
git clone --recursive https://github.com/zhreshold/mxnet-ssd.git
拉取下來的專案預設名稱為mxnet-ssd
2.2 下載訓練好的ssd模型
下載地址
下載成功後,把.params
檔案和.json
檔案放在專案的model資料夾下,如下圖:
2.3 執行demo
cd /path/to/mxnet-ssd
python demo.py --gpu 0
3、訓練模型
3.1、下載資料集
這裡以pascal VOC資料集為例,先在命令列進入到你要存放資料集的資料夾,然後命令列輸入:
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
解壓
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
這裡將用VOCtrainval2007和VOCtrainval2012作為訓練集(VOC2007的trainval一共有5011張影象,VOC2012的trainval一共有11540張影象,因此訓練的影象一共有16551張),將VOCtest2007作為測試集(VOC2007的test一共有4952張影象,也就是測試的影象一共有4952張)。因此最後資料的存放路徑大概是這樣:
~/VOCdevkit/VOC2007
~/VOCdevkit/VOC2012
然後用一個連結將你存放資料的地方連結到ssd專案的data
資料夾下,命令列輸入:
ln -s /path/to/VOCdevkit /path/to/this_example/data/VOCdevkit
比如我將VOC資料集放在/home/data/VOCdevkit/
下,ssd專案在/home/project/mxnet-ssd/
下,那麼就要輸入:
ln -s /home/data/VOCdevkit /home/project/mxnet-ssd/data/VOCdevkit
這樣在mxnet-ssd/data/
資料夾下就會有這個:
最後我們要生成.lst
和.rec
檔案:
先在命令列進入mxnet-ssd
的tools
資料夾下,然後執行:
sh prepare_pascal.sh
生成的.lst
和.rec
檔案在mxnet-ssd/data/
資料夾下:
3.2、下載預訓練的vgg16_reduced模型
下載地址
解壓後將.params
和.json
檔案放在mxnet-ssd/model/
資料夾下。
3.3、訓練模型
在mxnet-ssd
目錄下執行:
python train.py
如果你需要修改一些引數,可以在後面加上,比如:
python train.py --gpus 0,1 --batch-size 32 --lr 0.001
具體引數可以看train.py這個指令碼。
貼一張正在訓練的模型的輸出: