DL开源框架Caffe | 目标检测Faster-rcnn训练自己数据问题整理

数据集制作

  Pascal_voc数据集可以做目标检测,目标分割,识别等任务,本文主要针对目标检测的任务,因此只需要其中几个文件夹,也就是我们制作自己的数据集时只需按照这个仿造就可以。下面是VOC2007的数据集文件目录结构,我们只需要文件夹Annotations, ImageSets, JPEGImages, 其中JPEGImages中存放自己数据集的原始图像;Annotations中存放的是图像对应的XML文档;ImageSets中的Main中主要存放train.txt等文件。

第一步:图片命名,类VOC格式   虽然说图片名对训练没什么影响,但建议还是按VOC2007那样,如“000005.jpg”这种形式。至于图片格式,代码里是写的jpg。 [Matlab代码链接]

第二步:标注软件

  使用软件制作成XML格式文件,注意看VOC2007中的XML文件的形式以及内容,本文推荐3个软件标注。 1.[window7标注软件] 2.[LabelImg]

3.[Object_LabelImg]

  上述第一个链接生成的不是XML文档,还需按照链接中生成;第二个链接是官方原版的LabelImg,但其多个版本都有一些小问题,最新的版本中生成的XML文档第一个是filename没有图像后缀格式,第二个是内容的缩进格式同VOC不一致;第三个链接生成的XML文件中没有解决图像后缀格式的问题,但是格式正确,解决问题的代码链接如下:  

import xml.dom.minidom as xdm
import glob

path = './Annotations/'

items = glob.glob(path+'*.xml')

train_txt = 'train.txt'

for item in items:
    dom = xdm.parse(item)
    root = dom.documentElement

    # change folder name
    folder_dom = root.getElementsByTagName('folder')
    print folder_dom[0].firstChild.data
    folder_dom[0].firstChild.data = 'VOC2007'

    # change image name
    image_dom = root.getElementsByTagName('filename')
    print image_dom[0].firstChild.data
    with open(train_txt, 'a+') as f:
        f.write(image_dom[0].firstChild.data)
        f.write('\n')
    image_dom[0].firstChild.data = image_dom[0].firstChild.data + '.jpg'
    with open(item, 'w') as f:
        dom.writexml(f, encoding='utf-8')

第三步:新建文件夹,命名为Annotations,将xml文件放到其中;   注意标签中尽量都使用小写字母,若最终想显示中文名字: [点击这里可以参考]

第四步:新建文件夹,为JPEGimages,将训练图片放到其中;

第五步:新建文件夹,ImageSets\Main里的四个txt文件;

  上述两个步骤,参考博客[链接]

训练遇到问题

第一个问题:

pb2.text_format.Merge(f.read(), self.solver_param) AttributeError: ‘module’ object has no attribute ‘text_format’

原因: 这个问题是由于google的protobuf的问题,关于这个的版本要小心操作!

解决办法:先采用第一种方法,需要再lib/fast_rcnn/train.py中添加:

import google.protobuf.text_format

若上述方法无效,可能配置环境的过程中,protobuf的版本无意中发生改动:pip install protobuf==2.6.0

第二个问题:

TypeError: slice indices must be integers or None or have an index method

原因:这是由于numpy的版本太高,numpy 1.12.0对这个做了些调整,把numpy降级到1.11.0就行了。

解决:查看numpy版本并对其进行降级,代码如下

python --version  
#查看python版本
python -c "import numpy; print numpy.__version__"
#查看numpy版本 
python -c "import numpy; print numpy.__file__"
#查看Numpy安装路径
sudo pip install -U numpy==1.11.0
#进行Numpy降级

另外一种比较特殊的情况,服务器中有两个python,2.7和3.4,而系统默认pip是装在python3.4上的。

输入:pip –version

显示:pip 9.0.1 from /usr/local/lib/python3.4/dist-packages (python 3.4)

执行以下代码,装到强制装到python2.7中:

sudo python2.7 /usr/local/bin/pip install -U numpy==1.11.0

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

分支预测

分支预测( Branch predictor):当处理一个分支指令时,有可能会产生跳转,从而打断流水线指令的处理,因为处理器无法确定该指令的下一条指令,直到分支...

11310
来自专栏linux驱动个人学习

Linux CFS调度器之负荷权重load_weight--Linux进程的管理与调度(二十五)

负荷权重用struct load_weight数据结构来表示, 保存着进程权重值weight。其定义在/include/linux/sched.h, v=4.6...

14010
来自专栏小鹏的专栏

windows下C++如何调用matlab程序

实验平台:    matlab R2016b   VS2013 思路: 1. 设置matlab的编译器,使用外部的VC或者gcc等编译器。 2. 编译m文件成d...

24290
来自专栏韩东吉的Unity杂货铺

零基础入门 36:代码控制预设

上一篇分享给大家带来了如何通过菜单栏呼出一个自定义的窗口,不知道大家消化的如何了呢?

12240
来自专栏Jerry的SAP技术分享

用代码判断当前系统是否支持某个版本的feature

JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9乃至JDK10的支持,比如Tomcat。

14620
来自专栏深度学习那些事儿

提升python项目完成效率的调试方法技巧(上)

效率提升是极为重要的事情,我们的时间本来就不充裕,不应该过多将时间浪费在调试过程中。对于大型项目光有dubug是不够的,如果需要提高产品调试进度,必须需要采取一...

42370
来自专栏用户画像

Python 使用正则表达式进行MongoDB条件查询

db.VideoProfile.find( {_id: { $regex: /^1_[0-9]{5,}$/} } ).count()

10320
来自专栏Echo is learning

arcpy 常用操作

17620
来自专栏腾讯移动品质中心TMQ的专栏

【腾讯TMQ】基于模型的自动化测试工具:GraphWalker

概述GraphWalker就是一个基于测试模型的用例生成工具。它主要应用于FSM, EFSM模型。可以用来它直接读取FSM, EFSM图形模型、json模型、生...

1.2K00
来自专栏决胜机器学习

有趣的算法(四)——一致性Hash算法模拟redis集群

有趣的算法(四)——一致性Hash算法模拟redis集群 (原创内容,转载请注明来源,谢谢) 一、概述 redis的集群,对key存储在哪个服务器的问题上,采...

38970

扫码关注云+社区

领取腾讯云代金券