前言
这篇文章最开始由我写在简书,欢迎到简书关注我
Link
SSD 对于小物体的检测远不及 R-FCN。因为工作的需要就训练了一个 R-FCN 的模型。使用到的 Deformable-ConvNets 在这里
制作 Pascal VOC 格式数据集
使用 LabelImg 标记数据集,将生成图片对应的 .xml 文件。下载地址:LabelImg for win and linux (macOS用户需要从源码编译,Github : labelImg)
# 首先下载 Deformable-ConvNets 源码
git clone https://github.com/msracver/Deformable-ConvNets.git
# 创建数据集目录
cd Deformable-ConvNets/
sh init.sh
cd data/
mkdir VOCdevkit && cd VOCdevkit
mkdir VOC2007 && cd VOC2007
mkdir Annotations
mkdir JPEGImages
mkdir ImageSets && cd ImageSets
mkdir Main
目录创建好之后将 .jpg
文件放入 JPEGImages
目录下
将.xml
文件放入Annotations
下
执行脚本划分 trainval 和 test 集
我使用到脚本如下:
import os
import random
xmlfilepath=r'/your/path/to/VOCdevkit/VOC2007/Annotations'
saveBasePath=r"/your/path/to/VOCdevkit"
trainval_percent=0.9 # 划分整个训练集百分之几作为 trainval
train_percent=0.9 # trainval 中 train 所占比例
total_xml = os.listdir(xmlfilepath)
num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)
print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/trainval.txt'), 'w')
ftest = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/train.txt'), 'w')
fval = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/val.txt'), 'w')
for i in list:
name=total_xml[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
执行完毕后,可以看到 ~/data/VOCdevkit/VOC2007/ImageSets/Main
下多了几个 .txt
文件
修改配置文件
修改 ~/experiments/rfcn/cfgs/
下的 resnet_v1_101_voc0712_rfcn_end2end_ohem.yaml
# 4 行,输出路径不想更改的话可以不用动
# 5 行,想用几个 GPU 就写几个,比如我写了 '0,1'
gpus: '0,1'
# 51 行,修改分类类别数。改为你个人分类数 + 1,比如我数据集有4个分类,我写了 4 + 1 = 5
NUM_CLASSES: 5
# 54 行
image_set: 2007_trainval
修改 ~/lib/dataset/
下的 pascal_voc.py
# 44 行,改为自己的类别名,注意 '__background__' 不要改
self.classes = ['__background__', # always index 0
'label1', 'label2', ..., 'labeln']
下载预训练模型并开始训练
下载 resnet_101
的预训练模型放与 ~/model/pretrained_model/
下
下载地址在 github 中可以找到,觉得下载速度慢或者无法爬梯子的,我也上传到 CSDN 了
训练
python experiments/rfcn/rfcn_end2end_train_test.py --cfg experiments/rfcn/cfgs/resnet_v1_101_voc0712_rfcn_end2end_ohem.yaml
总结
如果你有任何问题,欢迎留言询问。如果你觉得对你有帮助,欢迎点赞。
谢谢阅读。