SSD: Single Shot MultiBox Detector
從 Github 上面下載源工程代碼:caffe-SSD
配置Caffe-SSD
-
進入caffe-ssd 主目錄:cp /home/xxx/.../caffe-ssd/
cp Makefile.config.example Makefile.config
-
編譯項目:(進入 caffe-ssd 主目錄)
make -j8 make py make test -j8 make runtest -j8
CUDA 版本比較高的需要注釋掉config里面最后一行內(nèi)容:
-
數(shù)據(jù)文件準備
-
預訓練模型(VGG):VGG_ILSVRC_16_layers_fc_reduced.caffemodel
(下載地址:密碼: t9ub)下載完畢后將VGG模型放到caffe主目錄下
models\VGGNet
下面(如果沒有的話,models 下面沒有的話mkdir VGGNet
) -
VOC2007 和 VOC2012 數(shù)據(jù)集
進入caffe主目錄下的
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
如果安裝失敗,請轉(zhuǎn)到:(VOC 2007 & 2012 Dataset 密碼:j3in )
緊接著解壓:
tar -xvf VOCtrainval_11-May-2012.tar tar -xvf VOCtrainval_06-Nov-2007.tar tar -xvf VOCtest_06-Nov-2007.tar
-
將數(shù)據(jù)轉(zhuǎn)換為caffe處理的數(shù)據(jù)類型(LMDB):
cd caffe主目錄,執(zhí)行:
./data/VOC0712/create_list.sh ./data/VOC0712/create_data.sh
注意在執(zhí)行
create_data.sh
如果提示no module caffe 的話,用如下指令:
export PYTHONPATH=$PYTHONPATH:/home/xxx/.../caffe主目錄/python
(自行修改中間路徑)- 訓練示例
在caffe主目錄下面運行:
python examples/ssd/ssd_pascal.py
- 評估 & 檢測
python examples/ssd/score_ssd_pascal.py python examples/ssd/ssd_detect.py
這里注意指定使用的快照模型的路徑 & 在caffe主目錄下面運行程序
ssd_detect.py -
訓練
- 訓練準備
創(chuàng)建自己的數(shù)據(jù)目錄myData
:
cd /data
mkdir myData
將/data/VOC0712
下面的create_list.sh
,create_data.sh
,labelmap_voc.protoxt
這三個文件拷貝到'data/myData':
cp data/create* ./myData
cp data/label* ./myData
在/data/VOCdevkit
目錄按照VOC數(shù)據(jù)框架下面創(chuàng)建myData
,用來存放自己的數(shù)據(jù)集
cd data/VOCdevikit
mkdir myData
cd myData
mkdir Annotations
mkdir ImageSets
mkdir JPEGImages
cd ImageSets
mkdir Layout
mkdir Main
mkdir Segmentation
一般地,我們只需要關注 :
Annotations:XML描述文件
ImageSets: Main目錄下面放 train.txt, val.txt, trainval.txt, test.txt
JPEGImages:存放所有圖片
- 制作VOC數(shù)據(jù)集
按照VOC Dataset要求整理好數(shù)據(jù)集后,將之轉(zhuǎn)換為caffe的輸入數(shù)據(jù)。首先,根據(jù)自己數(shù)據(jù)集特點,修改labelmap_voc.protxt
,注意保留item
中background類,其余的類別可以按照自己的需要照葫蘆畫瓢,給一個簡單的示例:
item.PNG
然后,依次運行create_list.sh
,create_data.sh
.注意修改sh中的路徑到你自定義的數(shù)據(jù)集路徑。
需要注意的參數(shù)有:
create_data.sh:data_root_dir
,data_name
,mapfile
create_list.sh:root_dir
,
# create_list.sh 中應該注釋掉
# if [[ $dataset == "test" && $name == "VOC2012" ]]
# then
# continue
# fi
- 訓練
在python主目錄下運行命令:
python examples/ssd/ssd_pascal.py
#需要指定的路徑與參數(shù)
...
train_data = xxx/xxx_test_lmdb
test_data = xxx/xxx_trainval_lmdb
...
model_name =
save_dir =
snapshot_dir =
job_dir =
output_result_dir =
...
name_size_file =
pretrain_model =
label_map_file =
...
num_classes =
...
num_test_image =
Note: solver parameters中GPU的指定,個數(shù)不要超過可用個數(shù),可以用nvidia-smi
來查看可用GPU情況;另外,也可以調(diào)整solver_param
參數(shù),比如:iter_size, max_iter, etc.
檢測
score_pascal.py
Note: 注意修改參數(shù)與ssd_pascal.py
中的路徑相同ssd_detect.py**
Note: 檢測單張圖片,指定‘--gpu_id’, '--model_def', '--model_weights', '--image_file'.-
批量完成test images的可視化
- 利用caffe主目錄下
build/examples/ssd/ssd_detect.bin
對test結(jié)果進行文本輸出,輸出的格式為 ( path,label,confidence,xmin,ymin,xmax,ymax )
caffe root 下執(zhí)行:
build/examples/ssd/ssd_detect.bin models/VGGNet/mydataset/SSD_300x300/deploy.prototxt models/VGGNet/mydataset/SSD_300x300/mydataset_SSD_300x300_iter_100236.caffemodel data/VOCdevkit/mydataset/test_img_path.txt --confidence_threshold 0.5 --out_file output.txt`
- 利用plot_detections.py進行檢測結(jié)果的可視化
output.txt 是 ssd_detect.bin 生成的檢測結(jié)果的txt文檔
python examples/ssd/plot_detections.py output.txt /home/wxb/caffe-ssd --labelmap-file data/mydataset/labelmap_voc.prototxt --save-dir results/bbox_results/SSD_300x300/Main/img/
- 利用caffe主目錄下