COCO格式转YOLO_迷途小书童的Note的博客-程序员信息网

技术标签: python  计算机视觉  csv  json  大数据  

环境

  • window 10 64bit

  • coco yolo

前言

前文 MS COCO数据集 介绍过了 COCO 数据集,COCO 是将所有图片对应的标注信息写在了一个 json 文件里,如下

6fe2064784f1167ed531fb53f11aa1e9.png

coco to yolo

因此要将 coco 格式的数据集转换成 yolo 格式,本质上就是去解析这个 json 文件,将对应图片的标注信息提取出来,写入 txt 文件中

实操

这里还是使用我们熟悉的 roboflow 平台上的口罩数据集,下载地址是 https://public.roboflow.com/object-detection/mask-wearing/4

下载的格式选择 COCO

54c3c74131e1331e2d75785479ed7c72.png

coco to yolo

解压后,进入 train 文件夹,可以看到 json 文件和图片文件

bd446d45f2a55f5a855fc1ef014798ce.png

coco to yolo

在同级目录创建 python 脚本 coco2yolo.py,输入如下代码,少量注释嵌入到代码中了

import os
import json
from tqdm import tqdm
import argparse


def convert(size, box):
    '''
    size: 图片的宽和高(w,h)
    box格式: x,y,w,h
    返回值:x_center/image_width y_center/image_height width/image_width height/image_height
    '''

    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = box[0] + box[2] / 2.0
    y = box[1] + box[3] / 2.0
    w = box[2]
    h = box[3]

    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--json_file', default='test.json',
                        type=str, help="coco file path")
    parser.add_argument('--save_dir', default='labels', type=str,
                        help="where to save .txt labels")
    arg = parser.parse_args()

    data = json.load(open(arg.json_file, 'r'))

    # 如果存放txt文件夹不存在,则创建
    if not os.path.exists(arg.save_dir):
        os.makedirs(arg.save_dir)

    id_map = {}

    # 解析目标类别,也就是 categories 字段,并将类别写入文件 classes.txt 中
    with open(os.path.join(arg.save_dir, 'classes.txt'), 'w') as f:
        for i, category in enumerate(data['categories']):
            f.write(f"{category['name']}\n")
            id_map[category['id']] = i

    for img in tqdm(data['images']):

        # 解析 images 字段,分别取出图片文件名、图片的宽和高、图片id
        filename = img["file_name"]
        img_width = img["width"]
        img_height = img["height"]
        img_id = img["id"]
        head, tail = os.path.splitext(filename)

        # txt文件名,与对应图片名只有后缀名不一样
        txt_name = head + ".txt"
        f_txt = open(os.path.join(arg.save_dir, txt_name), 'w')

        for ann in data['annotations']:
            if ann['image_id'] == img_id:
                box = convert((img_width, img_height), ann["bbox"])

                # 写入txt,共5个字段
                f_txt.write("%s %s %s %s %s\n" % (
                    id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))

        f_txt.close()

执行上述代码

python coco2yolo.py --json_file _annotations.coco.json --save_dir labels

完成后,还是在同级目录,就能看到 labels 文件夹及里面的 txt 标注文件了

8262fff5e9ad514e9baa2870605901f4.png

coco to yolo

关联阅读

  • VOC与YOLO数据格式的相互转换

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/djstavaV/article/details/121413841

智能推荐

OpenStack 企业私有云的若干需求(5):主流硬件支持、云快速交付 和 SLA 保证_北岸冷若冰霜的博客-程序员信息网_openstack 硬件需求

本文转自网络文章,内容均为非盈利,一切版权原作者所有。文章内容仅代表原作者独立观点,不代表本账号立场,转载此文章在于个人学习收藏,传递更多知识。 如有侵权,马上删除。原文作者:世民谈云计算(微信公众号ID:SammyTalksAboutCloud)专栏地址:随笔分类 - Nova本系列会介绍OpenStack 企业私有云的几个需求:Nova 虚机支持 GPU自动扩展(Auto-scaling)支持多租户和租户隔离 (multi-tenancy and tenancy isolati.

.NET 4.0 调用 C dll 触发 AccessViolationException 异常的处理方案_于大大大洋的博客-程序员信息网

一、问题最近做项目的时候,在调用 c 写的 dll 的时候,遇到一个程序异常,发现捕捉不到,异常为:System.AccessViolationException二、解决方案详细内容和原理可以看下面引用的内容,我这里使用的方法是在方法名上面添加属性:[HandleProcessCorruptedStateExceptions]public static void main(){...

Java中的ArrayList集合定义、遍历、方法_zamaque的博客-程序员信息网_定义arr集合

/*    一、定义 ArrayList集合的使用 是引用数据类型 实用的步骤: 1.导入包 java.util包中 2.创建引用类型的变量 数据类型<集合储存的数据类型> 变量名 = new 数据类系<集合储存的数据类型>(); 集合储存的数据类型:要将数据存储到集合的容器中(因为数组和集合都是容器), 所以在创建集合引用变量的时候,必须要指定好储存的类型...

使用Ubuntu 18.04 安装Tensorflow_小白太白的博客-程序员信息网

一、实现环境二、创建虚拟机三、安装 ubuntu 系统四、安装增强工具五、安装 Anaconda3下载安装六、安装 TensorFlow创建 TensorFlow 环境激活 TensorFlow 环境开始安装 TensorFlow测试参考本实验在 VMware 虚拟机上的 ubuntu-18.04 系统中使用 Anaconda 方式安装仅CPU模式的 T...

IDEA中maven的Plugins报红解决方法_普通网友的博客-程序员信息网_idea plugins报错

IDEA中maven的Plugins报红解决方法Idea中maven的Plugins报红解决方法我的maven项目中plugins下的所有文件都报红,查看报错,这是Maven中plugins没有存入本地的仓库,点击Settings查看Build,Execution…》》Build Tools》》Maven》》查看仓库位置没有什么问题点击Ok,idea右下角会提示让重新导入,点击change import进行重新导入,即可。又或者在maven的项目上点击Reload Project:??...

董其奇:银行的IT建设与业务创新_胡争辉的博客-程序员信息网

 “2008中国银行家论坛”于2008年12月13日至14日在北京举办,本次论坛的主题是“扩张内需下的中国银行业:改革创新与风险控制”。董其奇 神州数码融信软件有限公司董事长  危机过后的中小银行更要发展。如何创新业务、建设银行IT系统,神州数码融信软件有限公司董事长董其奇提出了自己的看法。他指出,把先进的技术转变成银行竞争力的过程中要关注几个关键问题需要解决  大家上午好。非常感

随便推点

华为服务器RH2288做raid方法_北极的企鹅88的博客-程序员信息网_华为rh2288v3配置raid

1 开机根据屏幕提示按ctrl+R进入raid设置界面 2 光标移动到sas3108(bus 0x01…)上按F2(类似鼠标右件功能),创建如下图3 选择raid等级,这里采用raid5,然后使用tab键切换到右侧按enter选择所有硬盘(硬盘被选中后在前方的复选框中会出现一个x表示选中这块硬盘了),这里方法不固定,选几块就用几块就是了。我这里都选上了。之后到basic settings中设置,这里我首先切换单位从TB切换到GB,然后设定一个1024GB的空间,并没有全用所有的空间,剩下的空间还可以做

#QGIS源码官方编译指南_MrJGao的博客-程序员信息网_qgis编译

QGIS源码官方编译指南将QGIS官方的编译指南windows部分翻译一下,供大家参考。这个版本是QGIS源代码工程中2017年4月30日最后修改的版本,对应QGIS 2.99,也就是即将发布为QGIS 3.0的版本。

【死磕 Java 基础】--- 我一口气自己就动手实现一个 LRU_chenssy的博客-程序员信息网

大家好,我是大明哥个人网站:https://www.topjava.cn/LRU,即 Least Recently Use ,直译为 “最近最少使用”。它是根据数据的历史访问记录来进行数据淘汰的,淘汰掉最先访问的数据,其核心思想是 如果数据最近被访问过,那么将来被访问的几率也会更加高。要实现 LRU,需要做到两点:查询出最近最晚使用的项给最近使用的项做一个标记实现的方案有多种,这里小编主要介绍两种:LinkedHashMap双向链表 + HashMapLinkedHashMa.

Xenomai隔离cpu_人门青铜的博客-程序员信息网_xenomai多核

Xenomai孤立cpuLinux内核-CPU_MASK_ALL初始化实时调度cpu读取用户设置的参数并设置位置设置cobalt cpu亲和性结束语Xenomai源码解析第一章-xenomai_init(一)前文提到多核状态下,会设置xenomai的cpu亲和性。【原创】有利于提高xenomai 实时性的一些配置建议一文中提到了提高xenomai实时性的一些建议。其中有一条cpu隔离。笔者在raspberry4下的应用会设置xenomai.supported_cpus=0x3,即将cpu的第一个

QT中添加Q_OBJECT时编译提示obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const错误解决方法_kxywn的博客-程序员信息网_q_object 无法解析的外部符号

点击该.h右键文件属性,修改值如下:命令行:"$(QTDIR)\bin\moc.exe"  "$(InputPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp" "-fUiDataControllerStdafx.h" "-f..\..\..\..\..\src\UiDataController\Publi

egret_秦璐璐的博客-程序员信息网_egret

Egret是一套完整的HTML5游戏开发解决方案。Egret中包含多个工具以及项目。Egret Engine是一个基于TypeScript语言开发的HTML5游戏引擎,该项目在BSD许可证下发布。Egret 采用 TypeScript 进行编程,它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。TypeScript 扩展了 JavaScri...

推荐文章

热门文章

相关标签