自定义coco数据集

news2024/11/20 14:42:01

1、环境

anaconda环境安装配置

2、工具

安装labelme工具

3、安装软件

3.1、打开anaconda控制台

在这里插入图片描述

3.2、创建虚拟环境

conda create -n labelme python=3.7

3.3、激活环境

conda activate labelme

3.4、下载labelme

pip install labelme

3.5、输入labelme打开软件

以后打开跳过3.2和3.4打开即可

labelme

在这里插入图片描述

4、制作labelme数据集

4.1、打开文件夹

存有多张图片的文件夹
图片为统一格式(比如都为.png或者.jpg)

在这里插入图片描述

4.2、创建矩形框

在这里插入图片描述

4.3、label名称

为框选住的类别起一个名字

在这里插入图片描述
再次框选的时候会保存已经存在的label

在这里插入图片描述

4.4、保存

在这里插入图片描述

保存名字和图片在同一个路径,同样的名字

在这里插入图片描述

4.5、结果

点击下一个继续标注label
在这里插入图片描述

把需要的图片全部做标签保存
在这里插入图片描述

5、转换coco数据

5.1、创建目录

  • dataset中放第4步制作好的数据集
    ├─data-labelme
    │  ├─coco
    │  │  ├─annotations
    │  │  ├─train2017
    │  │  └─val2017
    │  ├─dataset
    ├─json2coco.py
    
    

5.2、运行文件

  • 然后执行json2coco.py文件
    将代码中标有修改的注释下面代码进行替换

    import os
    import json
    import numpy as np
    import glob
    import shutil
    import cv2
    from sklearn.model_selection import train_test_split
    
    np.random.seed(41)
    
    # 修改1->改成自己的类别
    classname_to_id = {
        "green": 0,  
        "purple": 1,
        "yellow": 2
    }
    
    
    class Lableme2CoCo:
    
        def __init__(self):
            self.images = []
            self.annotations = []
            self.categories = []
            self.img_id = 0
            self.ann_id = 0
    
        def save_coco_json(self, instance, save_path):
            json.dump(instance, open(save_path, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)  # indent=2 更加美观显示
    
        # 由json文件构建COCO
        def to_coco(self, json_path_list):
            self._init_categories()
            for json_path in json_path_list:
                obj = self.read_jsonfile(json_path)
                self.images.append(self._image(obj, json_path))
                shapes = obj['shapes']
                for shape in shapes:
                    annotation = self._annotation(shape)
                    self.annotations.append(annotation)
                    self.ann_id += 1
                self.img_id += 1
            instance = {}
            instance['info'] = 'spytensor created'
            instance['license'] = ['license']
            instance['images'] = self.images
            instance['annotations'] = self.annotations
            instance['categories'] = self.categories
            return instance
    
        # 构建类别
        def _init_categories(self):
            for k, v in classname_to_id.items():
                category = {}
                category['id'] = v
                category['name'] = k
                self.categories.append(category)
    
        # 构建COCO的image字段
        def _image(self, obj, path):
            image = {}
            from labelme import utils
            img_x = utils.img_b64_to_arr(obj['imageData'])
            h, w = img_x.shape[:-1]
            image['height'] = h
            image['width'] = w
            image['id'] = self.img_id
            image['file_name'] = os.path.basename(path).replace(".json", ".jpg")
            return image
    
        # 构建COCO的annotation字段
        def _annotation(self, shape):
            # print('shape', shape)
            label = shape['label']
            points = shape['points']
            annotation = {}
            annotation['id'] = self.ann_id
            annotation['image_id'] = self.img_id
            annotation['category_id'] = int(classname_to_id[label])
            annotation['segmentation'] = [np.asarray(points).flatten().tolist()]
            annotation['bbox'] = self._get_box(points)
            annotation['iscrowd'] = 0
            annotation['area'] = 1.0
            return annotation
    
        # 读取json文件,返回一个json对象
        def read_jsonfile(self, path):
            with open(path, "r", encoding='utf-8') as f:
                return json.load(f)
    
        # COCO的格式: [x1,y1,w,h] 对应COCO的bbox格式
        def _get_box(self, points):
            min_x = min_y = np.inf
            max_x = max_y = 0
            for x, y in points:
                min_x = min(min_x, x)
                min_y = min(min_y, y)
                max_x = max(max_x, x)
                max_y = max(max_y, y)
            return [min_x, min_y, max_x - min_x, max_y - min_y]
    
    # 训练过程中,如果遇到Index put requires the source and destination dtypes match, got Long for the destination and Int for the source
    # 参考:https://github.com/open-mmlab/mmdetection/issues/6706
    
    
    if __name__ == '__main__':
        labelme_path = "./data-labelme/dataset"
        saved_coco_path = "./data-labelme/"
        print('reading...')
        # 创建文件
        if not os.path.exists("%scoco/annotations/" % saved_coco_path):
            os.makedirs("%scoco/annotations/" % saved_coco_path)
        if not os.path.exists("%scoco/train2017/" % saved_coco_path):
            os.makedirs("%scoco/train2017" % saved_coco_path)
        if not os.path.exists("%scoco/val2017/" % saved_coco_path):
            os.makedirs("%scoco/val2017" % saved_coco_path)
        # 获取images目录下所有的joson文件列表
        print(labelme_path + "/*.json")
        json_list_path = glob.glob(labelme_path + "/*.json")
        print('json_list_path: ', len(json_list_path))
        # 修改2训练集和测试集的比例
        # 数据划分,这里没有区分val2017和tran2017目录,所有图片都放在images目录下
        train_path, val_path = train_test_split(json_list_path, test_size=0.1, train_size=0.9)
        print("train_n:", len(train_path), 'val_n:', len(val_path))
        # 把训练集转化为COCO的json格式
        l2c_train = Lableme2CoCo()
        train_instance = l2c_train.to_coco(train_path)
        l2c_train.save_coco_json(train_instance, '%scoco/annotations/instances_train2017.json' % saved_coco_path)
        for file in train_path:
            # 修改3 换成自己图片的后缀名
            img_name = file.replace('json', 'jpg')
            temp_img = cv2.imread(img_name)
            try:
                cv2.imwrite("{}coco/train2017/{}".format(saved_coco_path, img_name.split('\\')[-1]), temp_img)
            except Exception as e:
                print(e)
                print('Wrong Image:', img_name )
                continue
            print(img_name + '-->', img_name)
    
        for file in val_path:
            # 修改4 换成自己图片的后缀名
            img_name = file.replace('json', 'jpg')
            temp_img = cv2.imread(img_name)
            try:
                cv2.imwrite("{}coco/val2017/{}".format(saved_coco_path, img_name.split('\\')[-1]), temp_img)
            except Exception as e:
                print(e)
                print('Wrong Image:', img_name)
                continue
            print(img_name + '-->', img_name)
    
        # 把验证集转化为COCO的json格式
        l2c_val = Lableme2CoCo()
        val_instance = l2c_val.to_coco(val_path)
        l2c_val.save_coco_json(val_instance, '%scoco/annotations/instances_val2017.json' % saved_coco_path)
    
    
    

5.3、运行结果

在这里插入图片描述
制作数据集完毕,可以进行自己项目的训练了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序--P2P消息收发模式(MQTT)

目录 前言 js demo 参数 new Paho.Client 创建对象 onConnectionLost 连接丢失回调 onMessageArrived 监听数据 connect (connectOptions)将此消息客户端连接到其服务器。 mqtt 频繁断开和重连问题 小程序实践 前言 P2P,顾名思义,是一对一的消…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_Layout

到今天这一篇vTESTstudio工具栏介绍就将暂时告一段落了,后续如果大家有需求的话可以私信我,我就继续再往深的介绍,如果没有催更的话,就当这部分是给大家做个普及,作为一个扫盲篇吧,实际项目使用和编程的内容…

Nginx反向代理的一个算法API的接口调用超时:504,GateWay Timeout,怎么破?

背景 服务端由第三方部署了一个基于 darknet (一个较为轻型的完全基于C与CUDA的开源深度学习框架)的识别算法服务,通过 Flask 的 Web 服务对业务服务暴露 API 接口。作为测试,一开始是直接通过 python3 app.py 的命令行启动的服务…

SAP Product Lifecycle Costing 里的 Costing Sheet 成本核算表

有朋友在我的知识星球里向我提问: 请您帮忙讲一下这个AP0100的costing sheet rows这里都表示什么意思吗?比如row10、base Z010、overhead啥、描述、from、to row、credit都说明了什么,能够实现上面👆🏻的目标吗&#x…

【详细学习SpringBoot源码之属性配置文件加载原理(Bootstrap.properties|Bootstrap.yml)-8】

一.知识回顾 【0.SpringBoot专栏的相关文章都在这里哟,后续更多的文章内容可以点击查看】 【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】 【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】 【3.详细学…

Transformer图解

Transformer正在席卷自然语言处理领域。 这些令人难以置信的模型正在打破多项 NLP 记录并推动最先进的技术发展。 它们被用于许多应用程序,如机器语言翻译、会话聊天机器人,甚至为更好的搜索引擎提供动力。 Transformer在当今深度学习领域风靡一时&…

POSTGRESQL 13.1 bug 与 逻辑复制槽参数调优

随着问问题的同学越来越多,公众号内部私信回答问题已经很困难了,所以建立了一个群,关于各种数据库的问题都可以,目前主要是 POSTGRESQL, MYSQL ,MONGODB ,POLARDB ,REDIS,SQL SERVER 等,期待你的加入&#…

pytorch 多卡运行详细教程

先说明一下背景,目前正在魔改以下这篇论文的代码: https://github.com/QipengGuo/GraphWriter-DGLgithub.com 由于每次完成实验需要5个小时(baseline),自己的模型需要更久(2倍),非…

战略和什么相关?

(1)战略和创新企业做到最大,就是业务多元化/一体化、区域全球化。想再折腾折腾,那就手里这几张牌搞重新排列组合,这就是:企业再造。就是中国人说的:天下大势分久必合合久必分。按照波士顿咨询来…

20221224英语学习

今日词汇 lash v.将(物品)系牢,捆绑;(风、雨等)猛烈打击;鞭打;猛烈抨击,严厉斥责 detective n.侦探; 警探; 发掘者; 发现者 division n.分开; 分隔; 分配; 分隔物; 刻…

深度学习SSD算法

目录1 SSD网络结构1.1 backbone1.2 extra部分1.3 loc和cls1.3.1 PriorBox层先验框的生成方法1.3.2 loc的预测结果2 模型训练2.1 正负样本标记2.2 损失函数2.3 困难样本挖掘3 模型预测4 总结1 SSD网络结构 SSD是YOLO V1出来后,YOLO V2出来前的一款One-stage目标检测…

Linux0.11 考古笔记

Linux0.11 考古笔记 最近读完《Linux 内核完全注释》和《品读 Linux0.11 核心代码》,大致理解下 Linux0.11 内核的全貌。在我理解这些属于计算机基础类的知识,所以在未来的工作场景不太可能会直接用到它们,如果用不到的话这些知识可能会随着…

从 2022 年优秀 Linux 发行版中挑选你喜欢的版本

导读如果你想从 2022 年最佳 Linux 发行版列表中挑选一个最喜欢的版本,那么今天你需要考虑以下几个选项。 2022 年是充满惊喜的一年,Linux 发行版的表现也不例外。从充满功能的新版本到各种桌面选项,总有一些值得期待的东西。 如果你想从 20…

自制macOS安装镜像iso虚拟机用

在网上下载的用于在虚拟机中安装的镜像版本相对比较旧。安装完成后还要进行升级比较麻烦。于是我就想自己制作安装镜像了。 精华 #创建空白磁盘镜像 hdiutil create -o /tmp/ventura -size 13800m -volname ventura -layout SPUD -fs HFSJ #挂载上面创建的镜像 hdiutil attac…

【Java 数据结构】-二叉树OJ题

作者:学Java的冬瓜 博客主页:☀冬瓜的博客🌙 专栏:【Java 数据结构】 分享:宇宙的最可理解之处在于它是不可理解的,宇宙的最不可理解之处在于它是可理解的。——《乡村教师》 主要内容:二叉树的…

离职时,是在公司群里大方告别,主动退群?还是一言不发,默默退出?

离职时怎么体面退出工作群?一位网友说,自己公司的同事离职那天,在公司群里发了一大段感谢的话,大大方方挥手告别后主动退了群。有同事夸这个离职的人情商高,这样告别大方得体,是离职的好表率。但楼主觉得&a…

SAP UI5 加载本地并不存在的 PDF 文件的错误处理

这个 _onLoadListener 函数什么时候注册的呢? iframe 完成加载之后,就触发这个 load 事件注册的处理函数: PDFViewer.prototype.onAfterRendering function () {var fnInitIframeElement function () {// cant use attachBrowserEvent be…

vue后台管理系统项目-vue-quill-editor实现富文本编辑器功能 可直接使用

富文本编辑器功能实现详细过程 目录 富文本编辑器功能实现详细过程 1.安装富文本插件 2.实现效果 3.实现详细过程 可直接使用 全局引入 局部引入 配置option 扩展需求 自定义配置文字大小 1.安装富文本插件 npm install vue-quill-editor --save //或者 yarn add vu…

Android电源管理介绍

一、电源管理基础知识1.1电源管理的几种状态Android kernel源码中,定义了三种电源状态,在kernel/power/suspend.c中:对应的宏定义/include/linux/suspend.h1.2 电源管理状态的介绍:PM_SUSPEND_ON设备处于正常工作状态PM_SUSPEND_S…

VsCode搭建C语言运行环境以及终端乱码问题解决

在VsCode中搭建C/C运行环境需要先安装以下插件 1、安装c/c插件 2、安装code runner插件 当然也可以安装一些其他的美化插件根据个人习惯,但是以上这两个是必装的。 安装好插件后来到插件主页点击卸载旁边的小齿轮选择扩展设置 找到扩展设置中的下图选项并打上勾即可…