Mxnet R-FCN 训练自己的数据集

前言

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

总结

如果你有任何问题,欢迎留言询问。如果你觉得对你有帮助,欢迎点赞。
谢谢阅读。

你可能感兴趣的:(Mxnet R-FCN 训练自己的数据集)