美文网首页
Mxnet R-FCN 训练自己的数据集

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

作者: catn1p | 来源:发表于2018-09-17 14:56 被阅读0次

    前言

    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 训练自己的数据集

          本文链接:https://www.haomeiwen.com/subject/fdwknftx.html