目标检测,将voc格式转化为coco格式详细过程

在目标检测方法研究中,数据集的格式至关重要,为了减小模型的训练时长,需要现在小数据集进行模型研究,从而需要将VOC数据集转化为coco格式。下面一步一步来看:

1. 下载VOC数据集

Pascal VOC,即Pattern Analysis, Statical Modeling and Computational Learning Visual Object Classes。详细可参考:http://host.robots.ox.ac.uk/pascal/VOC/

以及论文:http://host.robots.ox.ac.uk/pascal/VOC/pubs/everingham10.pdf

数据集下载,在linux系统用以下命令直接下载即可:

# VOC 2007
# 训练验证集
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
# 测试集
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
# 开发工具包代码和文档
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar


# VOC 2012
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

解压方式可参考我之前的文章,进行批量一键解压:https://blog.csdn.net/qq_33854260/article/details/121861169?spm=1001.2014.3001.5502

2. 生成coco格式的标签文件:

这里参考github的代码:https://github.com/KKKSQJ/DeepLearning/blob/master/others/label_convert/voc2coco.py

注意这里需设置voc的根目录,如:

voc_data_dir = './VOC_2007/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007'
json_save_path = './VOC_2007_COCO/voc2007_train.json'
split = 'train' # train  val  test
parseXmlFilse(data_dir=voc_data_dir, json_save_path=json_save_path, split=split)

运行一次,可在目标文件夹得到对应的标签json文件;修改参数,再次运行,从而分别得到train,val, test的json文件。

3. 配置文件目录:

先来看coco文件目录:

annotations:存放标签文件,即生成的json文件,需要创建相同的文件,并拷贝过来:

 创建数据图片文件夹,并把voc对应的数据拷贝过来。然而,VOC的训练和测试图片都放在一起。提前创建好目标文件夹,之后用我撰写的以下脚本来划分,脚本代码如下:

import os
import shutil

voc_train_val_img = "./voc_coco/voc2007/JPEGImages"
train_txt = "./voc_coco/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007/ImageSets/Main/train.txt"
val_txt = "./voc_coco/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007/ImageSets/Main/val.txt"

voc_coco_train_target_dir = "./voc_coco/voc2007/train2007"
voc_coco_val_target_dir = "./voc_coco/voc2007/val2007"

with open(train_txt, "r") as f:
    train = f.read()
    tp = train.split("\n")
    for j in range(len(tp)):
        file_path = os.path.join(voc_train_val_img, tp[j]+".jpg")
        tar_path = os.path.join(voc_coco_train_target_dir, tp[j]+".jpg")
        if os.path.exists(file_path):
            shutil.move(file_path, tar_path)
        else:
            print("Non-exist file", file_path)

print("Train data splited!...")

with open(val_txt, "r") as f:
    train = f.read()
    tp = train.split("\n")
    for j in range(len(tp)):
        file_path = os.path.join(voc_train_val_img, tp[j]+".jpg")
        tar_path = os.path.join(voc_coco_val_target_dir, tp[j]+".jpg")
        if os.path.exists(file_path):
            shutil.move(file_path, tar_path)
        else:
            print("Non-exist file", file_path)

print("Val data splited!...")

转换完成后的结果:

 希望能对大家有帮助~~~~

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 将 VOC 格式换为 COCO 格式的步骤如下: 1. 首先需要安装 COCO API,可以参考官方文档进行安装。 2. 创建 COCO 数据集的目录结构,其中包括 `annotations` 和 `images` 两个文件夹。`annotations` 文件夹下存放的是 COCO 数据集的标注文件,`images` 文件夹下存放的是 COCO 数据集的图片文件。 3. 将 VOC 格式的标注文件换为 COCO 格式的标注文件,可以使用以下 Python 代码: ```python import xml.etree.ElementTree as ET import json def voc2coco(xml_path, save_path): tree = ET.parse(xml_path) root = tree.getroot() images = [] annotations = [] categories = [{'id': 1, 'name': 'class_name'}] # 将 class_name 替换为实际的类别名称 for i, child in enumerate(root): if child.tag == 'filename': filename = child.text image = {'id': i, 'file_name': filename} images.append(image) elif child.tag == 'object': bbox = [] class_id = 1 # 将 1 替换为实际的类别 ID for subchild in child: if subchild.tag == 'name': class_name = subchild.text elif subchild.tag == 'bndbox': for subsubchild in subchild: bbox.append(float(subsubchild.text)) annotation = { 'id': i, 'image_id': i, 'category_id': class_id, 'bbox': bbox, 'area': bbox[2] * bbox[3], 'iscrowd': 0 } annotations.append(annotation) data = { 'images': images, 'annotations': annotations, 'categories': categories } with open(save_path, 'w') as f: json.dump(data, f) ``` 其中,`xml_path` 是 VOC 格式的标注文件路径,`save_path` 是 COCO 格式的标注文件保存路径。 4. 将 VOC 格式的图片文件复制到 COCO 数据集的 `images` 文件夹下。 5. 运行以下 Python 代码,生成 COCO 数据集的 `instances_train.json`: ```python from pycococreatortools import create_coco_dataset image_dir = 'path/to/images' annotation_dir = 'path/to/annotations' output_dir = 'path/to/output' create_coco_dataset(image_dir, annotation_dir, output_dir) ``` 其中,`image_dir` 是 COCO 数据集的 `images` 文件夹路径,`annotation_dir` 是 COCO 数据集的 `annotations` 文件夹路径,`output_dir` 是 COCO 数据集的输出路径。 6. 最后,将生成的 COCO 数据集的 `instances_train.json` 与 COCO API 中的其他文件一起使用,可以进行训练和评估。 ### 回答2: 将VOC格式换为COCO格式可以通过以下步骤实现: 1. 首先,需要将VOC格式的标注文件.xml换为相应的COCO格式标注文件.json。可以使用Python的xml.etree.ElementTree模块来解析.xml文件,并提取出包含目标类别、边界框坐标等信息。 2. 在过程中,需要为每个目标类别分配一个唯一的整数ID,并将其映射为COCO格式中的类别名。可以在过程中创建一个类别映射字典,将VOC格式的类别名映射为COCO格式。 3. 在提取目标边界框信息时,需要将VOC格式中的坐标值换为相对于图像宽度和高度的比例值,并计算每个边界框的面积。 4. 在生成COCO格式标注文件时,需要依照COCO格式的要求,构建相应的数据结构,包括images、annotations和categories等字段。其中,images字段包含图像的文件名、宽度、高度等信息,annotations字段包含目标边界框的ID、坐标、类别ID等信息,categories字段包含类别ID和类别名。 5. 最后,将生成的COCO格式标注文件.json保存下来,以便后续使用。 值得注意的是,在处理VOC格式换为COCO格式过程中,需要注意数据的一致性和准确性,以确保目标类别、边界框等信息的正确性,并根据具体需求进行相应的适配和调整。 ### 回答3: 将voc格式换为coco格式是一种常见的数据格式过程,可以用于目标检测任务的数据准备。下面是一个简要的步骤来实现这个过程。 首先,我们需要了解voc格式coco格式的基本概念。 VOC格式是一种用于图像识别和目标检测数据集格式,其中包含图像文件和对应的标签文件。标签文件中通常包含目标的位置、类别、边界框等信息。 COCO格式是一种用于图像识别、目标检测和语义分割的数据集格式,它将图像和标签信息合并在一个JSON文件中。JSON文件中包含了图像的ID、文件名、图片大小,以及目标的类别、边界框等信息。 下面是将voc格式换为coco格式的步骤: 1. 首先,我们需要读取voc格式的标签文件,提取其中的目标类别、边界框等信息,并记录对应的图像文件路径。 2. 然后,创建一个空的coco格式的JSON文件,并定义coco格式的基本结构,包括图像信息和目标信息。 3. 遍历每张图像,将图像信息添加到JSON文件中的“images”字段中,并生成该图像的唯一ID。 4. 对于每个目标,提取其类别、边界框等信息,并将其添加到JSON文件的“annotations”字段中。同样地,为每个目标生成唯一ID,并将其与图像ID关联。 5. 最后,将生成的JSON文件保存下来,即可完成voc格式coco格式换。 综上所述,将voc格式换为coco格式需要将voc格式的标签信息读取并整理,然后按照coco格式的结构重新组织数据,并生成一个新的JSON文件。这样就完成了voc格式coco格式换。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值