一. 配置 Caffe环境及下载、编译、测试SSD源码

1.下载源码

git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

2. 编译源码

make -j8
# Make sure to include $CAFFE_ROOT/python to your PYTHONPATH.
make py
make test -j8
# (Optional)
make runtest -j8

3.测试源码

  • 下载训练好的模型,放到$CAFFE_ROOT/models/
  • 下载VOC2007、VOC2012等数据集,解压缩,放到$HOME/caffe/data/
# Download the data.
cd $HOME/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
# Extract the data.
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
  • 生成LMDB格式数据集
    • 修改./data/VOC0712/create_list.sh中的root_dir、name等
    • 修改./data/VOC0712/create_data.sh中的data_root_dir、dataset_name等
cd $CAFFE_ROOT
# Create the trainval.txt, test.txt, and test_name_size.txt in data/VOC0712/
./data/VOC0712/create_list.sh
# You can modify the parameters in create_data.sh if needed.
# 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
# and make soft links at examples/VOC0712/
./data/VOC0712/create_data.sh
  • 测试SSD源码
    • 注意修改gpu id及 device_id
    • mAP score在0.77左右
cd $CAFFE_ROOT
# You can modify the parameters in score_ssd_pascal.py if needed.
python examples/ssd/score_ssd_pascal.py

如何在Caffe下实现SSD

  • 单张图片测试
    • 使用jupyter notebook打开/home/amax/caffe/examples/ssd_detect.ipynb,另存为ssd_detect.py
    • 注释掉get_ipython().magic(u'matplotlib inline')
    • matplotlib.get_backend()设置为TkAgg
    • 末尾加上plt.show()
    • 更改caffe_root、model_def、image等路径,运行即可
labelmap_file = 'data/VOC0712/labelmap_voc.prototxt'
model_def = 'models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt'
model_weights = 'models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel'
image = caffe.io.load_image('examples/images/cat.jpg')

如何在Caffe下实现SSD

二.使用SSD训练自己的数据集

1.生成训练数据、测试数据

  • 将JPEG等图片格式转换为VOC格式,存放于$caffe_root/data/VOCdevkit/ssd_test
    • 参考链接https://www.cnblogs.com/EstherLjy/p/8215596.html
  • 创建目录$CAFFE_ROOT/data/ssd_test,同时将data/VOC0712下的create_list.sh、create_data.sh、labelmap_voc.prototxt这三个文件copy到该目录下,分别重命名
  • 修改标注文件$CAFFE_ROOT/data/ssd_test/labelmap_voc_ssd_test.prototxt为自己的类别,注意保留label 0,background类别
  • 创建目录$CAFFE_ROOT/examples/ssd_test
  • 修改两个create_xxx_xxx.sh文件,将与VOC0712相关的信息替换成ssd_test,然后运行
cd $CAFFE_ROOT
./data/ssd_test/create_list.sh
./data/ssd_test/create_data.sh

2.训练

  • 下载预训练模型VGG_ILSVRC_16_layers_fc_reduced.caffemodel,放在 ./models/VGGNet/路径下
  • 修改训练文件$CAFFE_ROOT/data/example/ssd/ssd_pascal.py
    • train_data、test_data存放地址(82-84行)
    • mdel_name、save_dir等(236-246行)
    • name_size_file、pretrain_model、label_map_file等(258-263行)
    • 类别数:num_classes = open(label_map_file).read().count(‘label’)
    • 测试图片数量:num_test_image = len(open(name_size_file).readlines())
    • solver_param 中’max_iter’: 120000, 表示最大迭代次数;’test_interval’: 10000, 每次评估模型效果的间隔迭代次数,用于观察是否收敛及过拟合
    • gpus=''0''
cd $CAFFE_ROOT
python example/ssd/ssd_pascal.py

3.测试训练结果

cd $CAFFE_ROOT
python example/ssd/score_ssd_pascal.py

三.其他

遇到的错误及相关解决方案

四.参考链接

【1】https://github.com/weiliu89/caffe/tree/ssd

【2】https://blog.csdn.net/zhy8623080/article/details/73188594

【3】https://www.cnblogs.com/EstherLjy/p/6863890.html

【4】https://blog.csdn.net/lilai619/article/details/53791420

【5】https://blog.csdn.net/jesse_mx/article/details/52965281