news 2026/4/18 2:11:45

目标检测:COCO 和 YOLO 格式,以及它们之间的转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
目标检测:COCO 和 YOLO 格式,以及它们之间的转换

原文:towardsdatascience.com/object-detection-coco-and-yolo-formats-and-conversion-between-them-0e0638f4ffc1

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4c1b3780afd5bb76a9afc9d14f5bdd89.png

图片由 Matt Briney 在 Unsplash 提供


如果您没有 Premium Medium 账户也想阅读这篇文章,可以通过这个友情链接进行:www.learnml.wiki/object-detection-coco-and-yolo-formats-and-conversion-between-them/

简介

用于训练目标检测模型的图像注释可以有不同的格式,即使它们包含相同的信息。在存在的不同格式中,两种非常常用的格式是 COCO JSON 格式和 YOLOv5 PyTorch TXT 格式。前者因其名声归功于微软在 2015 年发布的 MS COCO 数据集[1],它是用于目标检测、分割和标题任务中最广泛使用的数据集之一。另一方面,YOLOv5 PyTorch TXT 格式的流行是由于 ultralytics[2]开发的 YOLOv8 架构(目标检测的最先进模型)使用它作为输入。

本文将首先介绍这两种格式的流行基础,正如上述所述,这两种格式是 MS COCO 数据集和 ultralytics 的 YOLOv8 架构。

文章将随后介绍 COCO JSON 和 YOLOv5 PyTorch TXT 格式的结构和组件。接下来,它将展示 MS COCO 数据集和 ultralytics 的 YOLOv8 API 所期望的数据集结构,最后将解释如何轻松地将数据集从 COCO JSON 格式转换为 YOLOv5 PyTorch TXT 格式。这一步骤在数据预处理过程中将非常有用,可以节省时间和工作,从而优化 YOLOv8 架构的训练过程。


YOLOv8 架构和 COCO 数据集

在目标检测领域,ultralytics 的 YOLOv8 架构(来自 YOLO[3]家族)是目前最广泛使用的最先进架构,它包括对先前版本(如低推理时间(实时检测)和在小物体检测中实现的良好精度)的改进。

另一方面,MS COCO 数据集是计算机视觉任务(如目标检测或分割)中最广泛使用的数据集之一。微软在 2015 年发布了这个数据集,包含超过 328K 张包含属于 80/91 个不同类别(80 个对象类别,91 个物品类别)的对象的图像,以及检测、分割和标题的注解。由于其大量高质量的图像和独特的类别,以及节省的工作量(即拥有标记数据),它通常用作评估新目标检测架构的基准。


COCO 数据集和 COCO JSON 格式

数据集的结构

dataset_directory ├── annotations │ ├── instances_train.json │ ├── instances_val.json │ └── instances_test.json │ └── images ├── train │ ├── image_00001.jpg │ ├── image_00002.jpg │ ├──...│ └── image_00100.jpg ├── val │ ├── image_00101.jpg │ ├── image_00102.jpg │ ├──...│ └── image_00200.jpg └── test ├── image_00201.jpg ├── image_00202.jpg ├──...└── image_00300.jpg

COCO JSON 注解文件的结构

在 COCO JSON 格式中,每个/images目录内的目录(图像集)都有一个 JSON 注解文件。

这些 COCO JSON 注解文件包含有关数据集许可、注解中存在的不同类别/分类以及组成数据集的每张图像和所有注解元数据的不同标题/部分。以下示例显示了 COCO JSON 注解文件的结构:

{"info":{"description":"COCO 2017 Dataset","url":"http://cocodataset.org","version":"1.0","year":2017,"contributor":"COCO Consortium","date_created":"2017/09/01"},"licenses":[{"url":"http://creativecommons.org/licenses/by/2.0/","id":4,"name":"Attribution License"}],"categories":[{"supercategory":"animal","id":0,"name":"cat"},{"supercategory":"animal","id":1,"name":"dog"}],"images":[{"id":123456,"license":4,"coco_url":"http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg","flickr_url":"http://farm3.staticflickr.com/x/xxxxxxxxxxxx.jpg","width":img_width,"height":img_height,"file_name":"xxxxxxxxx.jpg","date_captured":"date"},{"id":123457,"license":4,"coco_url":"http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg","flickr_url":"http://farm1.staticflickr.com/x/xxxxxxxxxxxx.jpg","width":img_width,"height":img_height,"file_name":"xxxxxxxxx.jpg","date_captured":"date"}],"annotations":[{"id":654321,"category_id":1,"iscrowd":0,"segmentation":[[float,float,..........float,float]],"image_id":123456,"area":float,"bbox":[float,float,float,float]},{"id":654322,"category_id":0,"iscrowd":0,"segmentation":[[float,float,..........float,float]],"image_id":123457,"area":float,"bbox":[float,float,float,float]},{"id":654323,"category_id":1,"iscrowd":0,"segmentation":[[float,float,..........float,float]],"image_id":123457,"area":float,"bbox":[float,float,float,float]},{"id":654324,"category_id":1,"iscrowd":0,"segmentation":[[float,float,..........float,float]],"image_id":123457,"area":float,"bbox":[float,float,float,float]}],}

“annotations”列表中的每个元素(每个注解)中,_categoryid对应于对象的类别 ID,_imageid对应于包含对象的图像的 ID,而bbox对应于一个包含 4 个值的数组:xywidthheight,分别对应。

xy是边界框左上角的 x 和 y 坐标,widthheight是边界框的宽度和高度。

注解字典的其他键包括id(特定注解的唯一 ID)、iscrowd(布尔值,表示是否对大量对象进行标记)、area(分割区域)和segmentation(图像中对象实例的分割掩码)。

注意,使用此格式时,注解和图像信息位于不同的目录中,将注解与其对应的图像关联的唯一方式是注解字典中的 _imageid值。


YOLOv8 数据集和 YOLOv5 PyTorch TXT 格式

数据集的结构

dataset_directory ├── test │ ├── images │ │ ├── image_00001.png │ │ ├── image_00002.png │ │ ├──...│ └── labels │ ├── image_00001.txt │ ├── image_00002.txt │ ├──...├── train │ ├── images │ │ ├── image_00003.png │ │ ├── image_00004.png │ │ ├──...│ └── labels │ ├── image_00003.txt │ ├── image_00004.txt │ ├──...├── valid │ ├── images │ │ ├── image_00005.png │ │ ├── image_00006.png │ │ ├──...│ └── labels │ ├── image_00005.txt │ ├── image_00006.txt │ ├──...├── data.yaml ├── test.txt ├── train.txt └── valid.txt

YOLOv5 PyTorch TXT 注解文件的结构

YOLOv5 PyTorch TXT 格式,这是 Darknet 注解格式的修改版本**[4],将一个图像的所有注解存储在一个文件中,文件名与图像相同,但扩展名为.txt**。这意味着对于每个名为xxxx.png的图像,必须存在一个具有相同名称但扩展名为*.txt*的注解/标签文件:xxxx.txt

每个这些标签文件包含每个注解对象的文本行。例如,如果一张图像中有 3 个注解对象,标签文件将看起来像这样:

00.55917968750.66180751173708920.5335781250.631596244131455# First object00.22994531250.31767605633802820.2501093740.383849765258216# Second object10.60857031250.22136150234741780.2378593740.167323943661971# Third object

第一个整数代表对象的类别 ID。第二个和第三个数字是CxCy,它们是边界框中心的 x 和 y 坐标。最后,最后两个数字是wh,分别是边界框的宽度和高度。Cx、Cy、w 和 h 值按图像大小归一化。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d55049088cb20c4970445566fcc7c216.png

此格式使得访问给定图像的注释变得更容易,因为它们将位于单个文件中。另一方面,对于 COCO JSON 格式,将需要遍历所有注释,选择那些 _imageid与图像 ID 相同的注释。


如何执行转换

转换将使用COCO_YOLO_dataset_generator存储库。此存储库包含一个脚本,使用户能够轻松地将数据集从 COCO JSON 格式转换为 YOLOv5 PyTorch TXT 格式。

1. 克隆存储库

此步骤将从 GitHub 下载存储库,并将其复制到具有存储库名称的目录中:_/COCO_YOLO_datasetgenerator

git clone https://github.com/JavierMtz5/COCO_YOLO_dataset_generator.git

2. 安装依赖项

此步骤将安装运行脚本所需的全部 Python 库。截至今天,脚本的唯一依赖项是tqdm库,用于在转换期间显示进度条。

cd COCO_YOLO_dataset_generator pip install-r requirements.txt

3. 转换数据集

此最后一步将执行脚本,使用转换数据集从 COCO JSON 格式到 YOLOv5 PyTorch TXT 所需的参数。

第一个参数是相对于 _COCO_YOLO_datasetgenerator目录的原始数据集的路径。convert_to_yolo参数设置为 True,因为目标是转换数据集的格式和结构从 COCO 到 YOLO。最后,output_dir参数应设置为新转换数据集的名称。

python3 coco_to_yolo_extractor.py<path_to_the_original_dataset>--convert_to_yolo true--output_dir<path_to_new_dataset>

4. 使用新数据集训练 YOLOv8 模型

脚本执行后,将创建一个新目录,其名称由用户为output_dir参数提供的名称指定。此目录将包含新的数据集,其中包含 YOLOv5 PyTorch TXT 格式的注释,以及 YOLOv8 架构预期的结构。

通过运行以下命令,将可以使用新数据集训练 YOLOv8 模型:

ultralytics库不包括在存储库的 requirements.txt 文件中,因此在运行训练之前可能需要安装它。

fromultralyticsimportYOLO model=YOLO('yolov8n.yaml')# Load the YOLOv8 nano architecturetraining_result=model.train(data='<dataset_directory>/data.yaml',epochs=100)

结论

COCO JSON 以及更重要的是 YOLOv5 PyTorch TXT,是目标检测领域常用的格式,因此了解它们如何表示注释非常有趣且有用。此外,所使用的存储库 COCO_YOLO_dataset_generator 帮助并简化了用户将数据集从 COCO JSON 格式转换为 YOLOv5 PyTorch TXT 格式的操作,这可以用于训练任何介于 YOLOv5 和 YOLOv8 之间的 YOLO 模型。由于 YOLOv8 是最先进的架构,该存储库是使用原始 COCO JSON 格式的数据进行模型训练的有用预处理工具。如果你觉得这个存储库有用,请开始使用它!


存储库

GitHub – JavierMtz5/COCO_YOLO_dataset_generator: 获取图像和注释的脚本(用于…


数据集许可

MS COCO 图像数据集采用Creative Commons Attribution 4.0许可协议。


参考文献

[1]COCO 数据集cocodataset.org/#home[2]Ultralytics YOLOv8 文档docs.ultralytics.com[3]YOLO 家族模型的全面指南blog.roboflow.com/guide-to-yolo-models/[4] YOLO Darknet TXT****roboflow.com/formats/yolo-darknet-txt

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:24:53

Qwen3-ASR语音识别效果展示:52种语言实测对比

Qwen3-ASR语音识别效果展示&#xff1a;52种语言实测对比 最近&#xff0c;阿里千问团队开源了Qwen3-ASR系列语音识别模型&#xff0c;其中一个数字特别引人注目&#xff1a;52。这个数字意味着它一口气支持了52种语言和方言的识别&#xff0c;这几乎覆盖了全球绝大多数主流语…

作者头像 李华
网站建设 2026/3/27 5:13:02

视频处理工具优化指南:解锁3大隐藏功能提升创作效率

视频处理工具优化指南&#xff1a;解锁3大隐藏功能提升创作效率 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xf…

作者头像 李华
网站建设 2026/3/28 4:30:06

PP-DocLayoutV3应用场景:扫描件/曲面票据/倾斜合同的智能布局解析

PP-DocLayoutV3应用场景&#xff1a;扫描件/曲面票据/倾斜合同的智能布局解析 你是不是也遇到过这样的烦恼&#xff1f;财务同事递过来一叠皱巴巴的报销发票&#xff0c;让你帮忙录入系统&#xff0c;你看着那些歪歪扭扭的文字和复杂的表格&#xff0c;头都大了。或者&#xf…

作者头像 李华
网站建设 2026/4/14 3:27:55

Qwen-Image-Lightning实战:如何生成8K高清概念艺术图

Qwen-Image-Lightning实战&#xff1a;如何生成8K高清概念艺术图 想创作一幅赛博朋克风格的未来都市&#xff0c;或是描绘一条翱翔于云端的中国龙&#xff0c;却苦于没有绘画功底&#xff1f;今天&#xff0c;我要带你体验一个能让你“所想即所得”的神奇工具——Qwen-Image-L…

作者头像 李华
网站建设 2026/4/16 14:14:38

STM32F407 GPIO外部中断全链路实践指南

7. 外部中断使用示例&#xff1a;基于STM32F407的GPIO中断工程实践外部中断是嵌入式系统中响应异步事件的核心机制&#xff0c;其本质是将外部电平或边沿变化转化为CPU可识别的中断请求信号。在STM32F4系列中&#xff0c;外部中断并非独立外设&#xff0c;而是由GPIO端口与NVIC…

作者头像 李华