Faster-rcnn 制作PASCAL VOC 自己的数据集

     
    理论上数据集的格式名称等没有强制的要求,但是为了尽量少的修改代码,我们用PASCAL VOC 格式制作数据集,这样制作完之后替换原来数据集的相应文件就可以了。
    VOC数据集下载之后解压后是下面的几个文件夹:
              

其中在图像物体识别上着重需要了解的是Annotations、ImageSets和JPEGImages,这三个文件夹

  1、JPEGImages文件夹:该文件夹下存放着所有的训练集图片,格式都是.jpg
需要注意的是命名格式,虽然对命名没有特别要求,但是最好按照官方的命名方法,如000001.jpg,000123.jpg。
图片的像素尺寸大小不一,但是横向图的尺寸大约在500*375左右,纵向图的尺寸大约在375*500左右,基本不会偏差   超 过    100。(在之后的训练中,第一步就是将这些图片都resize到300*300或是500*500,所有原始图片不能离这个标准过远。)。这些图像就是用来进行训练和测试验证的图像数据。

2、Annotations 文件夹:该文件夹下存放的是每一个图片的标注信息,文件都是.xml格式,文件名和图片名是一致的对于该xml的格式,可以参考一下示例:      

<annotation>
	<folder>VOC2012</folder>                           
	<filename>2007_000392.jpg</filename>                               //文件名
	<source>                                                           //图像来源(不重要)
		<database>The VOC2007 Database</database>
		<annotation>PASCAL VOC2007</annotation>
		<image>flickr</image>
	</source>
	<size>					                           //图像尺寸(长宽以及通道数)						
		<width>500</width>
		<height>332</height>
		<depth>3</depth>
	</size>
	<segmented>1</segmented>		                           //是否用于分割(在图像物体识别中01无所谓)
	<object>                                                           //检测到的物体
		<name>horse</name>                                         //物体类别
		<pose>Right</pose>                                         //拍摄角度
		<truncated>0</truncated>                                   //是否被截断(0表示完整)
		<difficult>0</difficult>                                   //目标是否难以识别(0表示容易识别)
		<bndbox>                                                   //bounding-box(包含左下角和右上角xy坐标)
			<xmin>100</xmin>
			<ymin>96</ymin>
			<xmax>355</xmax>
			<ymax>324</ymax>
		</bndbox>
	</object>
	<object>                                                           //检测到多个物体
		<name>person</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>198</xmin>
			<ymin>58</ymin>
			<xmax>286</xmax>
			<ymax>197</ymax>
		</bndbox>
	</object>
</annotation>

        注意:必须格式一致,在xml文件中最好没有类似<?xml version="1.0"?> 这样的头,我一开始制作的数据集包含这个头,训练一致报错,后来删除这个头之后训练正常。
这是一个基本的格式,其中的object标签保存的就是人脸的位置信息,对于一个图片里面有多个对象的话,在该xml中就有多个object。然后Annotations文件夹里面就是这样的一堆xml文件,其他没什么。


训练时报错:File "/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 108, in append_flipped_images assert (boxes[:, 2] >= boxes[:, 0]).all() AssertionError

需要注意:

     检查自己数据发现,左上角坐标(x,y)可能为0,或标定区域溢出图片,而faster rcnn会对Xmin,Ymin,Xmax,Ymax进行减一操作,如果xmin或者ymin为0,减一后变为65535

3、ImageSets 文件夹:该文件夹下有四个文件夹
其中Action下存放的是人的动作(例如running、jumping等等,这也是VOC challenge的一部分)
Layout下存放的是具有人体部位的数据(人的head、hand、feet等等,这也是VOC challenge的一部分)
Main下存放的是图像物体识别的数据,总共分为20类。
Segmentation下存放的是可用于分割的数据。
对物体识别来说用到的文件夹是Main文件夹,其他的文件夹不太重要(对于我目前的需求来说),这个文件夹中主要有四个.txt文件,分别是train.txt、test.txt、trainval.txt、val.txt

test.txt中保存的是测试所用的所有样本的名字,不过没有后缀(下同),一般测试的样本数量占总数据集的50%
train.txt中保存的是训练所用的样本名,样本数量通常占trainval的50%左右
val.txt中保存的是验证所用的样本名,数量占trainval的50%左右

trainval.txt中保存的是训练验证样本,是上面两个的总和,一般数量占总数据集的50%

jpg和xml文件制作完成后,生成这几个文件:


import os
import random
folderpath =  "F:\\imagedata\\"
trainval_percent = 0.66
train_percent = 0.5
xmlfilepath = 'F:\\imagedata\\Annotations'
txtsavepath = 'F:\\imagedata\\ImageSets\\Main'
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)
ftrainval = open(folderpath + 'ImageSets/Main/trainval.txt', 'w')
ftest = open(folderpath + 'ImageSets/Main\\test.txt', 'w')
ftrain = open(folderpath + 'ImageSets/Main\\train.txt', 'w')
fval = open(folderpath + '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()http://www.cnblogs.com/whlook/p/7220105.html
ftest .close()
分享一个图片标记工具:亲测好用
https://github.com/tzutalin/labelImg

猜你喜欢

转载自blog.csdn.net/ytusdc/article/details/80404999