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里面最后一行内容:
-
数据文件准备
-
预训练模型(VGG):VGG_ILSVRC_16_layers_fc_reduced.caffemodel
(下载地址:密码: t9ub)下载完毕后将VGG模型放到caffe主目录下
models\VGGNet
下面(如果没有的话,models 下面没有的话mkdir VGGNet
) -
VOC2007 和 VOC2012 数据集
进入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
如果安装失败,请转到:(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
-
将数据转换为caffe处理的数据类型(LMDB):
cd caffe主目录,执行:
./data/VOC0712/create_list.sh ./data/VOC0712/create_data.sh
注意在执行
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主目录下面运行程序
-
训练
- 训练准备
创建自己的数据目录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数据框架下面创建myData
,用来存放自己的数据集
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数据集
按照VOC Dataset要求整理好数据集后,将之转换为caffe的输入数据。首先,根据自己数据集特点,修改labelmap_voc.protxt
,注意保留item
中background类,其余的类别可以按照自己的需要照葫芦画瓢,给一个简单的示例:
然后,依次运行create_list.sh
,create_data.sh
.注意修改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
#需要指定的路径与参数
...
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的指定,个数不要超过可用个数,可以用nvidia-smi
来查看可用GPU情况;另外,也可以调整solver_param
参数,比如:iter_size, max_iter, etc.
检测
score_pascal.py
Note: 注意修改参数与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结果进行文本输出,输出的格式为 ( path,label,confidence,xmin,ymin,xmax,ymax )
caffe root 下执行:
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进行检测结果的可视化
output.txt 是 ssd_detect.bin 生成的检测结果的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主目录下