一. 配置 Caffe环境及下载、编译、测试SSD源码
1.下载源码
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd
2. 编译源码
- 配置Makefile.config 【Instuction】【已配置好文件】
- 编译python接口等
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
- 单张图片测试
- 使用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等路径,运行即可
- 使用jupyter notebook打开
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')
二.使用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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在Caffe下实现SSD - Python技术站