PASCAL VOC目标检测数据集格式转化为COCO目标检测数据集格式

voc数据集转化为coco数据集 1 voc2012数据集了解 其中Annotations存放的是五个文件夹,但针对目标检测而言,只有前面三个文件夹存放的内容是有意义的,文件目录如下 voc |--------Annotations | |___xxx.xml | |___xxx.xml ... |--------ImageSets | |___Main | |_____test.txt | |_____train.tx 阅读详情

VOC2012目标检测数据集格式转化为COCO目标检测数据集格式

你只需要传入一个VOC数据集根路径可以直接运行,简直不要太方便好吧

需要材料:
  • VOC2012原始数据集
  • 一个pycharm项目文件夹(任意)
达到效果:
  • 自动生成当前项目下的 data/coco 文件夹

  • VOC2012数据集标注格式转为标准的COCO2017数据集格式

  • 图片按照训练集和验证集划分好

voc2012目标检测数据集格式

主要关注框起来的三个文件夹:

在这里插入图片描述

COCO2017数据集标注格式

annotation里面就是标注,而train2017和val2017是放的图片

在这里插入图片描述

转换代码如下:

  • 文件复制到项目里面任何一个地方都能运行

运行代码:
python demo.py --voc_root={YOUR VOC} # 这里的 {YOUR VOC}就是你自己的voc路径

import os
import json
import xml.etree.ElementTree as ET
import argparse
import shutil


def transform_voc2coco(args):
    voc_root = args.voc_root

    # 获取工程的根绝对路径
    project_root = os.path.realpath(os.curdir)
    while True:
        if ".idea" in os.listdir(project_root):
            break
        else:
            project_root = os.path.join(project_root, "..")

    # 构建COCO完整目录
    coco_root = os.path.join(project_root, "data/coco")
    coco_train = os.path.join(coco_root, "train2017")
    coco_val = os.path.join(coco_root, "val2017")
    coco_anno = os.path.join(coco_root, "annotations")
    coco_train_anno = os.path.join(coco_anno, "instances_train2017.json")
    coco_val_anno = os.path.join(coco_anno, "instances_val2017.json")
    if not os.path.exists(coco_root):
        os.makedirs(coco_root)
        os.mkdir(coco_train)
        os.mkdir(coco_val)
        os.mkdir(coco_anno)

    coco_train_num = len(os.listdir(coco_train))
    coco_val_num = len(os.listdir(coco_val))
    print(f"train_2017 number: {coco_train_num}")
    print(f"val_2017 number: {coco_val_num}")

    # voc数据集目录
    voc_anno_dir = os.path.join(voc_root, "Annotations")
    voc_images_dir = os.path.join(voc_root, "JPEGImages")
    voc_train_txt = os.path.join(voc_root, "ImageSets/Main/train.txt")
    voc_val_txt = os.path.join(voc_root, "ImageSets/Main/val.txt")

    overwrite_images = True
    # 复制voc图片到coco
    if overwrite_images:
        # 复制训练集图片
        with open(voc_train_txt, "r") as f:
            lines = f.readlines()
            for line in lines:
                image_name = line.strip() + ".jpg"
                image_path = os.path.join(voc_images_dir, image_name)
                shutil.copy(image_path, os.path.join(coco_train, image_name))

        # 复制验证集图片
        with open(voc_val_txt, "r") as f:
            lines = f.readlines()
            for line in lines:
                image_name = line.strip() + ".jpg"
                image_path = os.path.join(voc_images_dir, image_name)
                shutil.copy(image_path, os.path.join(coco_val, image_name))

    def _extract_anno(fp, mode: str = "train"):
        txt_file = voc_train_txt if mode == "train" else voc_val_txt

        # 预定义VOC检测的20个类别以及超类
        supercategorys = ["vehicles", "household", "animals", "person"]
        vehicles = ["car", "bus", "bicycle", "motorbike", "aeroplane", "boat", "train"]
        household = ["chair", "sofa", "diningtable", "tvmonitor", "bottle", "pottedplant"]
        animals = ["cat", "dog", "cow", "horse", "sheep", "bird"]
        person = ["person"]
        classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
                   "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]

        # 预构建coco格式的json文件
        json_file = {"info": [], "license": [], "images": [], "annotations": [],
                     "categories": [{"id": i, "name": class_,
                                     "supercategory": ""} for i, class_ in enumerate(classes)]}
        for i, class_ in enumerate(classes):
            if class_ in vehicles:
                json_file["categories"][i]["supercategory"] = supercategorys[0]
            elif class_ in household:
                json_file["categories"][i]["supercategory"] = supercategorys[1]
            elif class_ in animals:
                json_file["categories"][i]["supercategory"] = supercategorys[2]
            elif class_ in person:
                json_file["categories"][i]["supercategory"] = supercategorys[3]
            else:
                raise "unsupported class"

        # 写入json文件
		with open(txt_file, "r") as f_:
            lines = f_.readlines()
            for line in lines:
                image_xml = line.strip() + ".xml"
                image_xml_path = os.path.join(voc_anno_dir, image_xml)
                xml_obj = ET.parse(image_xml_path)
                root = xml_obj.getroot()
                img_dir = {"file_name": "", "width": 0, "height": 0, "objects": []}
                i = 0
                for eles in root:
                    if eles.tag == "filename":
                        img_dir["file_name"] = eles.text
                    elif eles.tag == "size":
                        for ele in eles:
                            img_dir["width"] = int(ele.text) if ele.tag == "width" else int(img_dir["width"])
                            img_dir["height"] = int(ele.text) if ele.tag == "height" else int(img_dir["height"])
                    elif eles.tag == "object":
                        obj_dir = {"name": "", "bndbox": [], "image_id": int(img_dir["file_name"].split(".")[0]),
                                   "id": i}
                        i = i + 1
                        for ele in eles:
                            obj_dir["name"] = ele.text if ele.tag == "name" else obj_dir["name"]
                            if ele.tag == "bndbox":
                                for pos in ele:
                                    if pos.tag == "xmin":
                                        xmin = int(pos.text)
                                    elif pos.tag == "xmax":
                                        xmax = int(pos.text)
                                    elif pos.tag == "ymin":
                                        ymin = int(pos.text)
                                    elif pos.tag == "ymax":
                                        ymax = int(pos.text)
                                    else:
                                        raise "unsupported pose"
                                obj_dir["bndbox"] = [xmin, ymin, xmax-xmin, ymax-ymin]
                        img_dir["objects"].append(obj_dir)
                        json_file["annotations"].append({"id": obj_dir["id"],
                                                         "image_id": obj_dir["image_id"],
                                                         "category_id": classes.index(obj_dir["name"]),
                                                         "segmentation": [],
                                                         "area": float(obj_dir["bndbox"][2]*obj_dir["bndbox"][3]),
                                                         "bbox": obj_dir["bndbox"],
                                                         "iscrowd": 0})
                    else:
                        continue
                json_file["images"].append({"file_name": img_dir["file_name"],
                                            "height": img_dir["height"],
                                            "width": img_dir["width"],
                                            "id": int(img_dir["file_name"].split(".")[0])})
            json.dump(json_file, fp)
            
    # 生成coco的annotation标注文件
    override_anno = True
    # 有一个文件不存在或者需要覆盖掉之前的标注
    if not os.path.exists(coco_train_anno) or not os.path.exists(coco_val_anno) or override_anno:
        with open(coco_train_anno, "w") as f:
            _extract_anno(f, "train")

        with open(coco_val_anno, "w") as f:
            _extract_anno(f, "val")

    print("-" * 30 + "finish" + "-" * 30)


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--voc_root', type=str, default="/project/datasets/VOC2012")
    args = parser.parse_args()
    transform_voc2coco(args)

02、YOLO数据集(datasets)的划分与三种格式转换(yolo、voc、coco) yolo的三种格式yolo、coco、voc的介绍和转换,附代码 阅读详情

相关推荐

目标检测任务数据集介绍-PASCAL VOC数据集

本文简要介绍了目标检测PASCAL VOC数据集。 PASCAL VOC数据集简介二级目录三级目录 简介 二级目录 三级目录

u013085021的博客 4320

voc数据集格式转coco数据集格式

之前做的目标检测项目都是用的voc数据集格式,为了和其他算法做比较,也需要在coco数据集上进行测试。本文参考了https://blog.youkuaiyun.com/c2250645962/article/details/105408547/将voc数据集格式转换为coco数据集格式。

weixin_43878078的博客 1万+

第二十章 解读PASCAL VOC2012与MS COCO数据集(工具)

PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛,PASCAL全称:Pattern Analysis, Statical Modeling and Computational Learning,是一个由欧盟资助的网络组织。图像分类(Object Classification)目标检测(Object Detection)目标分割(Object Segmentation)行为识别(Action Classification)等。

专注于人工智能学习,总结 1202

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

将VOC数据集转化为coco数据集

Seven 1051

VOC数据集划分与coco格式转换工具

VOC数据集划分与coco格式转换工具

VOC数据集转COCO数据集python工具

这段代码是一个将VOC格式的数据集转换为COCO格式的Python工具。代码功能包括文件夹创建、数据集划分、文件复制和格式转换等操作,以便用户更方便地进行深度学习模型的训练和验证。这段代码有效地自动化了VOC数据集到COCO数据集的转换流程,提高了数据预处理的效率。

目标检测三大数据格式VOC,YOLO,COCO的详细介绍

目标检测三大数据详细介绍,VOC,COCO,YOLO,包括数据转换

xiaobaizaza_Ry的博客 10000

nRF52840 低功耗蓝牙开发指南:从硬件架构到物联网应用实战

本文深入解析nRF52840低功耗蓝牙芯片的硬件架构与开发实践,涵盖从开发环境搭建到BLE协议栈开发的详细指南。通过实战案例分享低功耗优化技巧,帮助开发者高效实现物联网应用,特别适合智能家居和工业场景。

d3e4f的博客 417

目标检测中数据集格式之间的相互转换--coco、voc、yolo

正确理解和掌握COCO、VOC和YOLO三种数据集格式之间的相互转换机制,不仅能够帮助研究者和开发人员提高工作效率,而且有助于深入理解各种目标检测算法对数据的不同处理方式和需求。本文将详细介绍这三种常见的数据集格式,探讨它们之间的转换方法,并提供实用的代码示例和操作指南,旨在帮助读者轻松应对目标检测中的数据集格式转换问题。

许济江 7091

ArcGIS山体坡度、坡向分析

本篇文章主要记录自己在对山体坡向及坡度分析中的一些操作。

Belence_zhao的博客 7412

从配置文件加载顺序揭秘:为什么你的logback.xml读不到application.yml?

本文深入解析了Spring Boot中logback.xml无法读取application.yml配置的原因,揭示了Spring Boot配置加载机制与日志系统初始化的时序问题。通过对比logback.xml与logback-spring.xml的差异,提供了使用springProperty标签和系统属性传递等解决方案,帮助开发者有效解决日志配置问题。

weixin_29214335的博客 364

计算机视觉常用数据集总结:包括MS COCO、ImageNet、VOC、人脸识别、行人检测等

本篇博文主要对目前公开的计算机视觉常用数据集进行总结。 1.PASCAL VOC(权威鼻祖) PASCAL VOC是一个图像集,由Mark Everingham (University ofLeeds)、Luc van Gool (ETHZ, Zurich)等人创立,有1.7W+张图片,分为20类。PASCALVOC竞赛也是计算机视觉竞赛的鼻祖,从2005年到2012年一共举办了8届,包含了物...

Tiger数学之家的博客 8434

微信文件自动归档!手把手教你用OpenClaw搭个自己的“数字员工”,告别重复劳动

很多人说“AI是未来”,但未来不是靠喊口号的。OpenClaw的真正价值,是让你把重复劳动交出去,把时间留给真正需要创造力的事。这事真能干,而且不难。下载OpenClaw(GitHub仓库按我写的步骤跑一遍遇到坑,评论区留言——我亲自帮你看作者后记:上周五,我让AI自动归档了文件后,终于在5点准时下班。回家路上,我给它发了条消息:“干得漂亮”。它没回,但我知道——它在默默等我的下一条指令。

2601_94871597的博客 414

【解决方案】PASCAL VOC 、YOLO txt、COCO目标检测三大格式简述与PASCAL VOC COCO格式互转

在目标检测领域,**PASCAL VOC**、**YOLO**(You Only Look Once)和 **COCO**(Common Objects in Context)是公认的三大主流标注格式。它们各自代表了技术发展历程中的不同阶段,承载着不同的设计哲学和应用场景。对于任何从事目标检测的工程师或研究人员而言,深入理解这三种格式的底层逻辑、核心差异,并掌握它们之间的精确转换方法,是构建高效、灵活数据集管理流程的关键。 本文将对这三种格式进行深度解析,对比它们在坐标表示、文件结构上的技术差异,并提供一

白洞,白色的明天在等着我们 1万+

【DRAM存储器七】SDRAM介绍-芯片引脚与功能框图详解

详解初代SDRAM芯片引脚定义与芯片功能框图中的各个模块

highman110的博客 2205

#systemverilog# 之 event region 和 timeslot 仿真调度(三)Verdi 辅助查看

通过今天的学习,我们知道:event region 是event sequence 的全集。我们打开了 event region feature 也就开启了event sequence 的功能。

那么菜的博客 1365

1、目标检测:PASCAL VOC 数据集简介

一、简介 PASCAL VOC 挑战赛主要有 Object Classification 、Object Detection、Object Segmentation、Human Layout、Action Classification 这几类子任务 PASCAL 主页 与 排行榜 PASCAL VOC 2007 挑战赛主页 、PASCAL VOC 2012 挑战赛主页 、PASC...

Man 8万+

24、水下传感器网络中混合LEACH协议与遗传算法获取路由节点

本文提出了一种结合遗传算法与LEACH协议的混合路由方案,用于提升水下无线传感器网络(UWSN)的能量利用效率和数据传输稳定性。通过遗传算法优化簇头选择与路径规划,有效避免节点过早死亡,减少能量消耗,在200个节点场景下显著提升网络寿命。相比传统LEACH协议,该方案具有更高的能量利用率、更强的环境适应性,并支持传输历史记录与并行传输序列。实验结果显示,该方案在总能量为2000焦耳时剩余能量达75.6%,远优于LEACH的34.8%能耗表现。适用于海洋监测、石油平台监控及水下灾害预警等复杂环境应用。

i8j9k0l1的博客 112

VOC和COCO数据集讲解

一、VOC格式相对其他计算机视觉任务,目标检测算法的数据格式更为复杂。为了对数据进行统一的处理,目标检测数据一般都会做成VOC或者COCO的格式。VOC和COCO都是既支持检测也支持分割的数据格式,本文主要分析PASCAL VOC和COCO数据集中物体识别相关的内容,并学习如何制作自己的数据集。一、VOC格式。

追光少年的博客 9100

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

视觉学习篇——认识VOC和COCO等数据集格式

本文介绍了深度学习中常见的五种数据集格式及其特点。PASCAL VOC格式采用XML文件存储,结构清晰,适用于目标检测和分类任务;YOLO格式使用TXT文件,简洁高效,专为YOLO系列模型设计;COCO格式通过JSON文件支持多任务学习,功能全面但结构复杂;TFRecord是TensorFlow推荐的二进制格式,适合大规模训练;LMDB/LevelDB作为键值存储数据库,读取速度快但不可直接编辑。每种格式都有其适用场景和优缺点,选择合适的数据格式对提升训练效率和工程化部署至关重要。

In_moon_shadow的博客 2347

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

目标检测 | 常用数据集标注格式以及转换代码

文章目录1. COCO1.1 COCO数据集格式1.2 COCO转换脚本2. VOC2.1 VOC数据集格式2.2 VOC转换脚本3. YOLO3.1 YOLO数据集格式3.2 YOLO转换脚本 我的博客https://blog.justlovesmile.top/ 目标检测是计算机视觉任务中的一个重要研究方向,其用于解决对数码图像中特定种类的可视目标实例的检测问题。目标检测作为计算机视觉的根本性问题之一,是其他诸多计算机视觉任务,例如图像描述生成,实例分割和目标跟踪的基础以及前提。而在解决此类问题时,

Justlovesmile的博客 8680

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

目标检测 – 解析VOC和COCO格式并制作自己的数据集

VOC和COCO格式制作一、VOC格式1. 目录结构2. XML标注格式3. 制作自己的VOC数据集4. 参考代码二、COCO格式1. 目录结构2. json标注格式3. 参考代码 相对其他计算机视觉任务,目标检测算法的数据格式更为复杂。为了对数据进行统一的处理,目标检测数据一般都会做成 VOC 或者 COCO 的格式。 VOC 和COCO 都是既支持检测也支持分割的数据格式,本文主要分析 PASCAL VOC 和 COCO 数据集中物体识别相关的内容,并学习如何制作自己的数据集。 一、VOC格式 1. 目

Stephen 3153

【深度学习】COCO数据集格式和PASCAL VOC数据格式

介绍PASCAL VOC和COCO基本格式

Orthrus19的博客 1364

VOC和COCO数据集

一.Pascal VOC(Pascal Visual Object Classes) Pascal VOC网址:http://host.robots.ox.ac.uk/pascal/VOC/ 查看各位大牛算法的排名的Leaderboards:http://host.robots.ox.ac.uk:8080/leaderboard/main_bootstrap.php 训练/验证数据集下载(...

bestrivern的博客 2万+
上一篇: 使用Linux命令行和开发板GDB在线联调
下一篇: ROS新手极速入门教程
半树|梨花
博客等级 码龄7年 4粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值