faster-rcnn.pytorch-1.0指南(三)——制作PASCAL VOC2007数据集

目录

数据集解析

在利用诸如Faster R-CNN等深度学习网络进行目标检测的时候一定需要训练自己的数据集。在制作为VOC2007格式的数据集之前,来看看这个数据集到底是什么样的:
  参照tf-faster-rcnn指南(二)——平台搭建
  VOC2007数据集包含有5个文件夹,其中:
  1、Annotations文件夹
  该文件下存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片。
  2、JPEGImages文件夹
  该文件夹下存放的是数据集图片,包括训练和测试图片。
  3、ImageSets文件夹
  该文件夹下存放了三个文件,分别是Layout、Main、Segmentation。
  4、SegmentationClass文件和SegmentationObject文件。
  这两个文件都是与图像分割相关,跟本文无关,暂且不管。

VOC数据集制作

一、创建文件夹
  制作自己的VOC2007格式数据集其实不需要上述那么多内容,我们只要做三个部分即可:Annotations文件夹、JPEGImages文件夹、ImageSets文件夹下的Main和Layout文件。
  
二、JPEGImages
  图片数据的格式需要统一。将自己的数据集中所有的图片存放的这一文件夹下。

三、Annotations
  将自己数据集所有图片一一对应xml格式的标签文件放于这一文件夹下。
1、对数据集图片打标签
  具体操作查看博客:https://blog.csdn.net/qq_34108714/article/details/89316097
2、标签内容

<annotation>  
    <folder>VOC2007</folder>                             
    <filename>100001.jpg</filename>                               //文件名 
    <path>/tf_faster_rcnn/data/VOCdevkit2007/VOC2007/JPEGImages/100001.jpg</path> 
    <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>

3、修改xml文件参数(自己打的标签有些内容与标准数据集不同,特别是文件路径)

import os
import os.path
import xml.dom.minidom


# path="../xml/"
path_xml = '/home/Annotations/'
path_img='/home/JPEGImage/'
files = os.listdir(path_xml)  # 得到文件夹下所有文件名称
modify_folder = "Annotations"
modify_database = "labproject"

for xmlFile in files:  # 遍历文件夹
    if not os.path.isdir(xmlFile):  # 判断是否是文件夹,不是文件夹才打开
        print(xmlFile)
        xmlFile

    filepath = os.path.join(path_xml, xmlFile)
    # 最核心的部分,路径拼接,输入的是具体路径
    dom = xml.dom.minidom.parse(os.path.join(path_xml, xmlFile))
    root = dom.documentElement

    # 修改path
    oldpath = root.getElementsByTagName('path_xm')
    # print(oldpath[0].firstChild.data)

    newpath = path_img + xmlFile[0:6] + ".jpg"
    oldpath[0].firstChild.data = newpath

    # 修改folder
    oldfolder = root.getElementsByTagName('folder')
    oldfolder[0].firstChild.data = modify_folder

    #修改database
    olddatabase = root.getElementsByTagName('database')
    olddatabase[0].firstChild.data = modify_database

    #修改 filename
    oldfilename = root.getElementsByTagName('filename')
    oldfilename[0].firstChild.data = xmlFile[0:6] + ".jpg"

    with open(os.path.join(path, xmlFile), 'w') as fh:
        dom.writexml(fh)
    pass

三、ImageSets
  接下来为制作ImageSets文件夹下Main和Layout文件夹中的4个文件(test.txt、train.txt、trainval.txt、val.txt)
  首先说明一下这四个文件到底是干什么用的:
    test.txt:测试集
    train.txt:训练集
    val.txt:验证集
    trainval.txt:训练和验证集
  在原始VOC2007数据集中,trainval大约占整个数据集的50%,test大约为整个数据集的50%;train大约是trainval的50%,val大约为trainval的50%。所以我们可参考以下代码来生成这4个txt文件:

import os
import random
 
trainval_percent = 0.5
train_percent = 0.5
xmlfilepath = '/home/VOC2007/Annotations'
txtsavepath = '/home/VOC2007/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(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/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()
ftest .close()

代码中的路径一定要写正确。
  运行完之后会在Main文件夹下生成对应的4个文件(test.txt、train.txt、trainval.txt、val.txt),随后将这4个文件复制到Layout文件夹中即可。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PyTorch中的Faster R-CNN训练自己的数据集,你需要以下步骤: 1. 准备数据集:首先准备自己的数据集,包括图像和相应的标注信息。标注信息可以使用类似于PASCAL VOC或COCO的标注格式,其中包含每个图像中物体的边界框和类别。 2. 数据预处理:对于数据预处理,你可能需要对图像进行缩放、裁剪、归一化等操作,以确保它们与模型的输入要求相匹配。同时,还需要将标注信息转换成模型所需的格式。 3. 构建数据集类:创建一个自定义数据集类,继承PyTorch的Dataset类,并实现__getitem__和__len__方法。__getitem__方法应当返回图像和标注信息的元组,同时根据需要进行必要的转换。 4. 定义模型:使用PyTorch中的torchvision.models中的Faster R-CNN模型作为基础,将其实例化为一个对象。你可以选择是否使用预训练的模型权重,以加快训练过程。 5. 设置训练参数:通过定义优化器、学习率调度器以及损失函数等来设置训练的参数。常用的优化器是SGD和Adam,并且可以使用不同的学习率调度器来动态调整学习率。 6. 训练模型:使用准备好的数据集、模型和训练参数来进行训练。在每个epoch中,循环遍历数据集并使用模型进行前向传播和反向传播,最后更新模型的权重。 7. 评估和测试模型:训练完成后,可以使用测试集或验证集对模型进行评估。评估指标可以包括准确率、召回率、平均精确度等。你可以根据需要进行必要的调整和优化。 8. 模型保存和使用:将训练好的模型保存为.pth文件,以便以后使用。你可以加载模型并在新的图像上进行预测,以获得目标检测的结果。 以上是使用PyTorch中的Faster R-CNN训练自己的数据集的大致步骤。根据具体的需求,你可能还需要进行其他的调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值