Detectron:用自己的数据集(VOC格式)训练RetinaNet

这篇博客介绍了如何将VOC格式的数据集转换为Detectron可训练的格式,详细阐述了VOC数据集的结构要求,包括annotations、JPEGImages和VOCdevkit2007的创建与配置。此外,还提供了模型训练的步骤,如下载预训练模型、修改配置文件、训练与测试,并针对训练过程中可能遇到的问题给出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 数据集(VOC)

Detectron天然支持COCO格式的数据集,但是可能我们手中的数据集是VOC格式的,这就需要我们手动的对VOC数据集进行相应的转换(xml→json),下面就以我自己的一个数据集为例,逐步说明一下数据集的配置过程。

1. 检查数据集(如果确定自己的数据集没有问题,可以跳过这一步)

首先,我们应当先检查自己的数据集是否完整,这一步也很重要,因为我就是在这一步中浪费了很长的时间。每一次应用新的数据集之前先检查一下数据集的完整性和准确性是一个很好的习惯,这会为我们省去很多解决莫名bug的时间。

由于我的数据集是从多个小数据集整合成的,所以我遇到了几个问题:

①确保每个xml标注文件都有一个相应的图像文件,即标注和图像有一一对应关系。

②xml文件中的文件名必须要有后缀(.jpg等),在训练过程中会依据这个文件名来从图像文件夹中寻找对应的图像文件。

③其他数据集问题。

2. 制作VOC文件夹(以VOC2007为例)

在 ./Detectron/detectron/datasets/data 文件夹下,创建一个文件夹,命名为 VOC2007 ,然后在 VOC2007 文件夹下,创建三个文件夹,分别命名为:annotationsJPEGImagesVOCdevkit2007。下面分别来讲这三个文件夹的配置过程。

annotations:

该文件夹下存放我们训练集和验证集的标注信息,需要是json格式,而不是之前的多个xml文件。首先,将训练集(train)和验证集(val)的标注文件(xml)放入两个不同的文件夹,如下图所示。【此处的验证集相当于一个有标注测试集,不参与训练,用来评判模型的好坏】

然后修改以下代码中的相应为自己的路径,执行两次,来将这两个文件夹中的标注文件转换到两个 json 文件中,(NOTE:在生成voc_2007_train.json的时候,将第127和183行注释掉,这两句代码是为了生成val.txt

最后生成三个文件:

voc_2007_train.jsonvoc_2007_val.jsonval.txt

#coding=utf-8
#fork from https://github.com/CivilNet/Gemfield/blob/master/src/python/pascal_voc_xml2json/pascal_voc_xml2json.py
import xml.etree.ElementTree as ET
import os
import json

coco = dict()
coco['images'] = []
coco['type'] = 'instances'
coco['annotations'] = []
coco['categories'] = []

category_set = dict()
image_set = set()

category_item_id = 0
image_id = 20180000000
annotation_id = 0


def addCatItem(name):
    global category_item_id
    category_item = dict()
    category_item['supercategory'] = 'none'
    category_item_id += 1
    category_item['id'] = category_item_id
    category_item['name'] = name
    coco['categories'].append(category_item)
    category_set[name] = category_item_id
    return category_item_id


def addImgItem(file_name, size):
    global image_id
    if file_name is None:
        raise Exception('Could not find filename tag in xml file.'
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值