faster rcnn 使用自己的数据集
/py-faster-rcnn/data/VOCdevkit2007/VOC2007/下有
- JPEGImages
- Annotations
- ImageSets/Main
JPEGImages —> 存放你用来训练的原始图像
Annotations —> 存放原始图像中的Object的坐标信息,XML格式
ImageSets/Main —> 指定用来train,trainval,val和test的图片的编号
JPEGImages
这个没什么,直接把你的图片放入就可以了,但是有三点注意:
- 编号要以6为数字命名,例如000034.jpg
- 图片要是JPEG/JPG格式的,PNG之类的需要自己转换下
- 图片的长宽比(width/height)要在0.462-6.828之间,就是太过瘦长的图片不要
如果你的图片都是0.jpg这种命名的,如何用python代码改成000000.jpg呢?
import os
file_names = os.listdir('./JPEGImages')
for filename in file_names:
var = filename.split('.')[0]
var = var.zfill(6)
os.rename('./JPEGImages'+filename,'./JPEGImages/%s.jpg'%(var))
Annotations
faster rcnn训练需要图像的bounding box信息作为监督(ground truth),所以你需要将你的所有可能的object使用框标注,并写上坐标,最终是一个XML格式的文件,一个训练图片对应Annotations下的一个同名的XML文件
参考官方VOC的Annotations的格式:
<annotation>
<folder>VOC2007</folder> #数据集文件夹
<filename>000105.jpg</filename> #图片的name
<source> #注释信息,无所谓有无
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid>321862192</flickrid>
</source>
<owner> #注释信息,无所谓有无
<flickrid>Eric T. Johnson</flickrid>
<name>?</name>
</owner>
<size> #图片大小
<width>500</width>
<height>333</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object> #多少个框就有多少个object标签
<name>boat</name> #bounding box中的object的class name
<pose>Frontal</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>22</xmin> #框的坐标
<ymin>1</ymin>
<xmax>320</xmax>
<ymax>314</ymax>
</bndbox>
</object>
<object>
<name>person</name>
<pose>Frontal</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>202</xmin>
<ymin>71</ymin>
<xmax>295</xmax>
<ymax>215</ymax>
</bndbox>
</object>
<object>
<name>person</name>
<pose>Frontal</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>170</xmin>
<ymin>107</ymin>
<xmax>239</xmax>
<ymax>206</ymax>
</bndbox>
</object>
</annotation>
这里有一个非常好用的工具VOC框图工具,可以自动帮你生成需要的XML格式,实际中发现格式基本无误,只有小的地方需要改动下,大家对比下就知道怎么改了,我是在Linux下借助sed修改的,这个不难
但是,如果你已经有一个txt文件,存放目标以及框:filename objectname xmin ymin xmax ymax,那么该怎么用python生成xml文件呢?参考(2)提供代码
训练
参考(3)修改文件。
训练时可能遇到问题:
TypeError numpy.float64 object cannot be interpreted as an index
解决方法:
把numpy的版本由1.12.0降为.1.11.0既能解决
sudo pip install -U numpy=1.11.0
File "/home/meng/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 111, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError
解决办法:
参考(3)
测试
参考(3)修改文件
执行
./tools/demo.py --net zf
出现问题:
File "./tools/demo.py", line 89, in demo
cls_scores = scores[:, cls_ind]
IndexError: index 6 is out of bounds for axis 1 with size 6
查看了一下demo.py的文件,原来是代码中subadult_males多写了
'''python
CLASSES = ('background',
'adult_males','subadult_males','subadult_males','adult_females','juveniles','pups')
'''
参考:(1)使用Faster-Rcnn进行目标检测(实践篇)
(2)提供把自己的图像处理成voc数据格式的代码
(3)指导在训练自己的数据时应该修改哪些文件
(4)指导如何把自己的数据变为VOC格式
posted on 2017-10-24 23:08 MissSimple 阅读(2108) 评论(0) 编辑 收藏 举报