zoukankan      html  css  js  c++  java
  • 可变卷积Deforable ConvNet 迁移训练自己的数据集 MXNet框架 GPU版

    【引言】 最近在用可变卷积的rfcn 模型迁移训练自己的数据集, MSRA官方使用的MXNet框架

    环境搭建及配置:http://www.cnblogs.com/andre-ma/p/8867031.html

    一 参数修改:

    1.1  ~/Deformable-ConvNets/experiments/rfcn/cfgs/resnet_v1_101_voc0712_rfcn_dcn_end2end_ohem.yaml  文件中修改两个参数 (yaml文件包含对应训练脚本的一切配置信息和超参数

    一个使用GPU个数  : 

    gpus: '0,1'   表示用两块GPU训练

    另一个是样本类别数

    NUM_CLASSES: 5    样本类别数需 + 1   因为有背景

    还有要修改使用的数据集

    image_set: 2007_trainval    单单使用VOC2007  若是 image_set: 2007_trainval+2012_trainval  则用VOC2007 和 VOC2012两个数据集

    1.2 修改  ~/Deformable-ConvNets/lib/dataset/pascal_voc.py 文件中的样本标签类别

    self.classes = ['__background__', 'tiger_beetle', 'scarab', 'stinkbug','moth']  和上面对应,加上背景一共为5类

    二 数据集准备及制作

    2.1 获取数据,这个自己准备,可以用爬虫在互联网上爬取,或用其他方式收集,推荐几个图片爬虫 : 百度图片爬虫   必应图片爬虫

    2.2 标注图片信息,在做目标检测时需要coco数据集或VOC数据集,可用labelImg等图像标注工具标注图片:labelImg链接:https://github.com/tzutalin/labelImg

    【这里简单介绍下VOC数据格式】  参考:https://blog.csdn.net/julialove102123/article/details/78330752

    VOC数据集的组织架构如下:

    • VOC2007的目录结构为:

        ├── Annotations  xml文件
        ├── ImageSets   txt文件
        └── JPEGImages 图片

    • ImageSets的目录结构为:

        ├── Layout
        ├── Main
        └── Segmentation

    LabelImg可在多个平台下配置,但要注意各软件依赖的版本号:通常是python=3.5  pyqt=4  依赖lxml

    Ubuntu16.04  配置labelImg教程:https://blog.csdn.net/lightningqw/article/details/78944941   (ubuntu系统下确实是不能用中文,结果发现在windows下以上的方法可以带中文)

    2.3 排查并删除所有错误jpg格式

    通过后缀名来判断jpg格式文件虽然简单,但是有时候会出错,尤其是从互联网上获取的图片,其质量更是难以保证。

    python的PIL工具提供对jpg格式文件的判断方法:https://blog.csdn.net/qiyuanxiong/article/details/77943578

    (ps: 删除不合格jpg时,记得要对应删除xml文件信息哦~)

    2.3 生成4个txt

    train.txt  val.txt  trainval.txt  test.txt     四txt:生成及介绍:https://blog.csdn.net/Bankeey/article/details/76595884

    train:val:test  =  1: 1: 2    trainval是train和val的并集,即  train:val:trainval = 1:1:2  【训练、验证、测试流程详解】

    如何制作自己的VOC2007数据集:https://www.jianshu.com/p/b498a8a5a4f4

     

    三 迁移训练

    熟悉可变卷积Deformable-ConvNets 的老铁们,可知在experiments文件夹下是不同模型的project

    如本实验使用rfcn模型迁移训练,cd  Deformable-ConvNets目录,执行下面代码,开始训练!

    python experiments/rfcn/rfcn_end2end_train_test.py --cfg experiments/rfcn/cfgs/resnet_v1_101_voc0712_rfcn_dcn_end2end_ohem.yaml

    四 异常及解决

    当且数据和配置文件就绪时,模型可正常训练;但在测试时,却报了如下异常:

    Traceback (most recent call last):
      File "experiments/faster_rcnn/rcnn_end2end_train_test.py", line 21, in <module>
        test.main()
      File "experiments/faster_rcnn/../../faster_rcnn/test.py", line 52, in main
        args.vis, args.ignore_cache, args.shuffle, config.TEST.HAS_RPN, config.dataset.proposal, args.thresh, logger=logger, output_path=final_output_path)
      File "experiments/faster_rcnn/../../faster_rcnn/function/test_rcnn.py", line 72, in test_rcnn
        pred_eval(predictor, test_data, imdb, cfg, vis=vis, ignore_cache=ignore_cache, thresh=thresh, logger=logger)
      File "experiments/faster_rcnn/../../faster_rcnn/core/tester.py", line 169, in pred_eval
        info_str = imdb.evaluate_detections(all_boxes)
      File "experiments/faster_rcnn/../../faster_rcnn/../lib/dataset/pascal_voc.py", line 258, in evaluate_detections
        self.write_pascal_results(detections)
      File "experiments/faster_rcnn/../../faster_rcnn/../lib/dataset/pascal_voc.py", line 403, in write_pascal_results
        dets = all_boxes[cls_ind][im_ind]
    IndexError: list index out of range

    解决:

    (1) 删除 ./data/cache  所有内容,

    cd /root/Deformable-ConvNets/data
    rm -rf cache/

    (2) 删除对应output中的的临时结果文件 【假设:faster_rcnn模型出现了该问题,在output文件夹下faster_rcnn模型对应的文件夹是rcnn】

    cd /root/Deformable-ConvNets/output
    rm -rf rcnn/

    (3) 数据集的配置要错开

    vim /root/Deformable-ConvNets/experiments/rfcn/cfgs/resnet_v1_101_voc0712_rcnn_dcn_end2end_ohem.yaml

    编辑如下代码,主要是  image_set 和 test_image_set

    dataset:
      dataset: PascalVOC
      dataset_path: "./data/VOCdevkit"
      image_set: 2007_trainval
      root_path: "./data"
      test_image_set: 2012_test
      proposal: rpn

    使用voc2007做训练集,voc2012做测试集,其实voc2012是voc2007的拷贝,经测试本解决方案可行

    【总结】

    1.用自己的数据集迁移训练可变rfcn模型,主要核心问题是数据集,数据集要有数量质量

    2.使用可变rfcn迁移训练,关键要熟悉流程,以及需要修改的文件和参数

    3.遇到问题时不要慌,有时候一着急反而容易把问题复杂化,或是本来快要找到解决问题的正确方法,却因另一个小问题掩盖了真正要解决的问题

    anyway:  安息为王~  :)

    本文参考:https://blog.csdn.net/yiweibian/article/details/67634584

  • 相关阅读:
    remove &#39;^M&#39; in shell script
    MyBatis学习总结——实现关联表查询(转)
    SSM框架下结合 log4j、slf4j打印日志
    intellij IDEA里各图标对应的文件类型
    springboot整合shiro
    在Eclipse中如何关联源代码
    windows7 创建http 服务器
    Intellij IDEA 安装和配置jrebel进行项目的热部署
    IntelliJ IDEA 热部署插件 JRebel 安装激活及使用
    idea 安装热部署插件
  • 原文地址:https://www.cnblogs.com/andre-ma/p/9012717.html
Copyright © 2011-2022 走看看