1. 程式人生 > >SSD演算法的MXNet實現

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-ssdtools資料夾下,然後執行:

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這個指令碼。
貼一張正在訓練的模型的輸出:

這裡寫圖片描述