【引言】 最近在用可变卷积的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 , in <module>
test.main()
File "experiments/faster_rcnn/../../faster_rcnn/test.py", line , 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 , 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 , in pred_eval
info_str = imdb.evaluate_detections(all_boxes)
File "experiments/faster_rcnn/../../faster_rcnn/../lib/dataset/pascal_voc.py", line , in evaluate_detections
self.write_pascal_results(detections)
File "experiments/faster_rcnn/../../faster_rcnn/../lib/dataset/pascal_voc.py", line , 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

可变卷积Deforable ConvNet 迁移训练自己的数据集 MXNet框架 GPU版的更多相关文章

  1. Ubuntu16 编译源码安装MXNet 可变卷积Deformable-ConvNets GPU版

    [引言]最近接手了公司的关于虫子识别的项目,使用MXNet框架开发,但是实际用的是Deformable-ConvNets. Deformable-ConvNets为微软研究研究院提出的可变卷积网络,可 ...

  2. 【Tensorflow系列】使用Inception_resnet_v2训练自己的数据集并用Tensorboard监控

    [写在前面] 用Tensorflow(TF)已实现好的卷积神经网络(CNN)模型来训练自己的数据集,验证目前较成熟模型在不同数据集上的准确度,如Inception_V3, VGG16,Inceptio ...

  3. TensorFlow学习笔记——LeNet-5(训练自己的数据集)

    在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ...

  4. YOLO训练自己的数据集的一些心得

    YOLO训练自己的数据集 YOLO-darknet训练自己的数据 [Darknet][yolo v2]训练自己数据集的一些心得----VOC格式 YOLO模型训练可视化训练过程中的中间参数 项目开源代 ...

  5. 在C#下使用TensorFlow.NET训练自己的数据集

    在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分 ...

  6. 使用py-faster-rcnn训练自己的数据集

    https://www.jianshu.com/p/a672f702e596 本文记录了在ubuntu16.04下使用py-faster-rcnn来训练自己的数据集的大致过程. 在此之前,已经成功配置 ...

  7. 目标检测算法SSD之训练自己的数据集

    目标检测算法SSD之训练自己的数据集 prerequesties 预备知识/前提条件 下载和配置了最新SSD代码 git clone https://github.com/weiliu89/caffe ...

  8. caffe训练自己的数据集

    默认caffe已经编译好了,并且编译好了pycaffe 1 数据准备 首先准备训练和测试数据集,这里准备两类数据,分别放在文件夹0和文件夹1中(之所以使用0和1命名数据类别,是因为方便标注数据类别,直 ...

  9. 使用yolo3模型训练自己的数据集

    使用yolo3模型训练自己的数据集 本项目地址:https://github.com/Cw-zero/Retrain-yolo3 一.运行环境 1. Ubuntu16.04. 2. TensorFlo ...

随机推荐

  1. Scala之偏函数Partial Function

    https://blog.csdn.net/bluishglc/article/details/50995939 从使用case语句构造匿名函数谈起在Scala里,我们可以使用case语句来创建一个匿 ...

  2. 使用kompose 快速转换dokcer-compose 文件为k8s deploy 文件

    kompose 是一个不错的快速转换docker-compose 文件为k8s 部署yaml文件的工具,使用次工具我们 可以将简单的docker-compose文件,转换为复杂的yaml文件,对于使用 ...

  3. 04C++const增强、枚举的增强

    #include <iostream> int main(void) { //const定义常量--->const意味着只读 const int a; int const b; // ...

  4. 20165308 2017-2018-2 《Java程序设计》第四周学习总结

    20165308 2017-2018-2 <Java程序设计>第四周学习总结 知识点 第五章 1.子类声明中通常用关键字extend来定义一个子类. 2.子类和父类在同一包中的继承性,继承 ...

  5. MYSQL 中的 int(11) 到底代表什么意思?

    各 INT 类型无符号最大值用单位表示: INT 类型 无符号最大值用单位表示 TINYINT 255 SMALLINT 65535 MEDIUMINT 1677 万 INT 42 亿 BIGINT ...

  6. Webpack4 的 Tree Shaking:babel-loader设置modules: false,还是设置"sideEffects": false,待确定

    Webpack4 的 Tree Shaking:babel-loader设置modules: false,还是设置"sideEffects": false,待确定 babel-lo ...

  7. TypeScript 之 模块

    https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/Modules.html 外部模块简写 外部模块简写:declare ...

  8. Jenkins进阶-应用的远程部署(12)

    越来越多的公司部署需要实现自动化模式,大家的首选的工具就是Jenkins,下来介绍下通过Publish Over SSH Plugin插件实现远程部署: 一.安装插件Publish Over SSH ...

  9. Jenkins进阶-部署Web项目到远程tomcat(7)

    之前讲到的是如何构建一个项目,并且将代码进行编译.打包,那么打包完成最后的结果就需要发布到应用服务器,将项目部署成功.在之前的项目中我们采用的shell脚本来部署,下面讲解通过Jenkins部署web ...

  10. Nginx + Tomcat搭建集群

    一.Tomcat集群带来的好处 1.提高服务的性能,并发能力,以及高可用性 2.提供项目架构的横向扩展能力 二.Tomcat集群实现原理 通过Nginx负载均衡进行请求转发 三.Nginx + Tom ...