news 2026/2/25 17:45:16

目标检测: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/2/22 15:02:38

SmallThinker-3B-Preview应用:提升推理速度70%的秘诀

SmallThinker-3B-Preview应用&#xff1a;提升推理速度70%的秘诀 1. 这个模型到底能帮你解决什么问题&#xff1f; 你有没有遇到过这样的场景&#xff1a;想在本地快速验证一个复杂推理思路&#xff0c;但大模型响应太慢&#xff0c;等十几秒才出结果&#xff1b;或者想在边缘…

作者头像 李华
网站建设 2026/2/17 18:15:59

DeOldify企业定制化案例:博物馆藏品数字化项目中的私有化部署实践

DeOldify企业定制化案例&#xff1a;博物馆藏品数字化项目中的私有化部署实践 1. 项目背景与挑战 去年夏天&#xff0c;我参与了一个特别有意思的项目——帮一家省级博物馆做藏品数字化。他们馆藏了大量珍贵的历史照片&#xff0c;从晚清到民国&#xff0c;从抗战到建国初期&…

作者头像 李华
网站建设 2026/2/24 16:46:02

Llama-3.2-3B模型剪枝实战:减少50%参数保持性能

Llama-3.2-3B模型剪枝实战&#xff1a;减少50%参数保持性能 1. 为什么需要对Llama-3.2-3B做剪枝 你可能已经注意到&#xff0c;Llama-3.2-3B这个模型虽然只有32亿参数&#xff0c;但实际部署时仍然需要不少显存和计算资源。在本地开发、边缘设备或小型服务器上运行时&#xf…

作者头像 李华
网站建设 2026/2/15 18:23:41

STM32F407最小系统硬件设计与CubeMX工程实践

1. STM32F407最小系统与开发板硬件架构解析 在嵌入式系统工程实践中&#xff0c;硬件平台是所有软件功能落地的物理基础。对于STM32F407这一经典高性能MCU而言&#xff0c;其最小系统设计并非简单的芯片加电源&#xff0c;而是围绕Cortex-M4内核构建的一套完整信号完整性、时钟…

作者头像 李华
网站建设 2026/2/25 17:18:40

Qwen3-ASR-0.6B数据库优化:语音识别结果高效存储

Qwen3-ASR-0.6B数据库优化&#xff1a;语音识别结果高效存储 1. 客服质检场景下的数据洪流困局 上周跟一家做智能客服系统的团队聊了聊&#xff0c;他们刚上线Qwen3-ASR-0.6B模型&#xff0c;识别效果确实让人眼前一亮——方言识别准确率比之前高了近20%&#xff0c;处理5小时…

作者头像 李华