自定义coco数据集

article/2025/9/10 0:45:30

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_splitnp.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 = 0self.ann_id = 0def 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文件构建COCOdef 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 += 1self.img_id += 1instance = {}instance['info'] = 'spytensor created'instance['license'] = ['license']instance['images'] = self.imagesinstance['annotations'] = self.annotationsinstance['categories'] = self.categoriesreturn instance# 构建类别def _init_categories(self):for k, v in classname_to_id.items():category = {}category['id'] = vcategory['name'] = kself.categories.append(category)# 构建COCO的image字段def _image(self, obj, path):image = {}from labelme import utilsimg_x = utils.img_b64_to_arr(obj['imageData'])h, w = img_x.shape[:-1]image['height'] = himage['width'] = wimage['id'] = self.img_idimage['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_idannotation['image_id'] = self.img_idannotation['category_id'] = int(classname_to_id[label])annotation['segmentation'] = [np.asarray(points).flatten().tolist()]annotation['bbox'] = self._get_box(points)annotation['iscrowd'] = 0annotation['area'] = 1.0return 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.infmax_x = max_y = 0for 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/6706if __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 )continueprint(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)continueprint(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://chatgpt.dhexx.cn/article/cRskeI0B.shtml

相关文章

COCO数据集概述

COCO数据集概述 COCO的全称是Common Objects in Context,是微软团队提供的一个可以用来进行图像识别的数据集。MS COCO数据集中的图像分为训练、验证和测试集。其行业地位就不再多少了,本文主要梳理一下该数据集包含的内容。下图是官网给出的可下载的数…

CoCo数据集下载

文章目录 1.介绍2.下载2.1 官网2.2 百度网盘2.3 下载到linux服务器 1.介绍 MS COCO的全称是Microsoft Common Objects in Context,起源于微软2014年的Microsoft COCO数据集 COCO is a large-scale object detection, segmentation, and captioning dataset. COCO h…

COCO数据集梳理

COCO数据集简介 coco数据集下载需要翻墙 COCO - Common Objects in Context 关键索引 以instances_val2017.json为例,有的博客说还有一个关键索引type,但是我没找到 info/licenses 这俩货没啥可说的,数据信息和版权吧,个人用…

COCO 数据集

COCO简介: COCO数据集是微软团队获取的一个可以用来图像recognitionsegmentationcaptioning 数据集. 官方说明网址:http://mscoco.org/。 该数据集主要有的特点如下: (1)Object segmentation; (2&#xff…

Pascal VOC 和 Microsoft COCO(MS COCO)(COCO2017COCO2014) 数据集

Pascal VOC(Pascal Visual Object Classes)数据集 VOC数据集是目标检测/分割经常用的一个数据集,从05年到12年都会举办比赛 VOC数据集的格式 用于分割 Paslcal VOC 2012 用于分隔的数据集是由20个类1个背景类 训练集1464张 val集 1449张 Micr…

COCO数据集解析

1 简介 官方网站:http://cocodataset.org/ 全称:Microsoft Common Objects in Context (MS COCO) 支持任务:Detection、Keypoints、Stuff、Panoptic、Captions 说明:COCO数据集目前有三个版本,…

COCO数据集介绍

COCO数据集详细介绍 前言一、什么是COCO数据集?COCO数据集可以应用到的Task:一个简单的数据集实例展示:附录80个类别 二、COCO数据集的格式介绍基础的数据格式介绍不同Task下的annotationObject Detection annotationother task: …

COCO数据集的介绍和使用

这篇文章是我研究生阶段入学期间学习所记,主要供自己使用,结合了论文原作和源码,中间借鉴的一些b站的视频以及他人博客的解释,会在文章末尾贴出链接。 目录 COCO数据集的介绍 COCO数据集标注格式 pycocotools的安装和coco api…

数据结构与算法之基础概述

目录 数据结构和算法的重要性数据结构概述逻辑结构存储结构 算法概述如何理解“大O记法”时间复杂度空间复杂度 数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算 数据结构和算法的关系: 程序 数…

1.0 JAVA数据结构与算法

学习总结 利用计算机来解决显示世界中的各种实际问题时,首先要将实际问题中的操作对象抽象为能够用计算机表示的数据,为这些数据建立一个数学模型(数据的逻辑结构),再面对数据以某种组织形式进行存储(数据…

数据结构和算法的区别

1.数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。 1.数据的逻辑结构 数据的逻辑结构分类图如下: 2.数据的存储结构 存储结构是指数据结构在计算机中的表示&#xf…

肝完了,一天掌握数据结构和算法面试题,吊打面试官,一起学习吧

最近有小伙伴面试,对数据结构和算法比较头疼,我整理了一波资料,帮助大家快速掌握数据结构和算法的面试,感觉有用的小伙伴,点赞支持哦! 不叨叨,直接上干货。 目录 Q1:数据结构和算…

大一新生先学C语言编程还是先学C语言的数据结构和算法?

大家好,我是辣条。 这是一位粉丝朋友给我的私信,今天就他这个问题好好聊聊。 先学C语言在学数据结构和算法 先说答案建议先学C语言,掌握基本的语法基础后,再学数据结构与算法,C语言编程与数据结构和算法这两个完全是…

【数据结构和算法】如何学习数据结构与算法 ?过来人的建议(一)【方法篇】

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

数据结构与算法简介

0. 内容说明 最近在自己编写一些小的算法的时候,深感自己的算法过于臃肿。碰巧Datawhale在新的一期组队学习中组织了数据结构与算法的课程学习。于是就参加了,再次感谢Datawhale~~ 首先跟大家分享一下两个自己感觉比较好的学习资料,一个是 …

数据结构和算法知识点整理

Q1:数据结构和算法的知识点整理: 数据结构和算法的需要掌握的知识点,我的好朋友启舰整理的: Q2:链表,队列和栈的区别 链表是一种物理存储单元上非连续的一种数据结构,看名字我们就知道他是一种…

如何学习数据结构和算法

首先掌握常用的、基础的。然后在此基础上往进行扩展学习。 常用的、基础的数据结构和算法有20个。 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树 算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法…

Java的数据结构和算法

今天我们来简单介绍一下Java的数据结构和算法。 一、数据结构 1、数据结构的分类 2、数据结构的基本功能 二、算法 1、算法是什么 2、算法的特点 一、1、数据结构是计算机组织、存储数据的方式。简单来说就是,数据按指定的规则进行存储,从而得到一个有固定存储格式的数据集…

数据结构与算法——绪论

前言:数据结构与算法是计算机科学与工程的基础,它们的相互关系和作用是程序的本质。凭借一句话获得图灵奖的Pascal之父Nicklaus Wirth把它们表示为 算法数据结构程序 目录: 1、算法与数据结构的重要性①相关定义②为什么要学习算法③数据结构…

【建议收藏】数据结构和算法面试题

数据结构 数据结构分为两大类,线性结构和非线性结构。 线性结构:数组、队列、链表、栈非线性结构:多维数组、树结构、图结构 1.数组 数组是最常用的数据结构,用于存储相同类型的数据,数组的长度也是固定的。 数组…