Python从COCO数据集中抽取某类别的数据

1、问题描述

今天需要训练一个人工智能检测模型,用于检测图片或视频中的人。自行收集训练数据费时费力,因而选择从公开数据集COCO中进行抽取。

2、数据准备

2.1 下载 COCO2017 数据集

train:http://images.cocodataset.org/zips/train2017.zip
valid:http://images.cocodataset.org/zips/val2017.zip

2.2 下载对应的YOLO格式标签文件

因为训练的是 YOLO 系列模型,所以需要下载其对应的格式标签文件。

https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels.zip

3、Pyhton代码

数据准备好之后则是进行数据抽取了。首先需要新建一个要抽取类别的 yaml 文件。

# 定义需要抽取的类别(classes.yaml)
path: /home/dataset/coco 
train: train2017.txt 
val: val2017.txt
names:0: person1: bicycle2: car3: motorcycle4: airplane5: bus

之后是抽取代码:

# create_sub_coco_dataset.pyimport json
import yaml
import sys
import os
import shutil
import tqdmdef MakeDirs(dir):if not os.path.exists(dir):os.makedirs(dir, True)def create_sub_coco_dataset(data_yaml="classes.yaml",src_root_dir="../datasets/coco",dst_root_dir="classes/coco",folder="val2017"):MakeDirs(dst_root_dir + "/annotations/")MakeDirs(dst_root_dir + "/images/" + folder)MakeDirs(dst_root_dir + "/labels/" + folder)print(yaml.safe_load(open(data_yaml).read())['names'])keep_names = [x + 1 for x in yaml.safe_load(open(data_yaml).read())['names'].keys()]all_annotations = json.loads(open(src_root_dir + "/annotations/instances_{}.json".format(folder)).read())keep_categories = [x for x in all_annotations["categories"] if x["id"] in keep_names]keep_annotations = [x for x in all_annotations['annotations'] if x['category_id'] in keep_names]all_annotations['annotations'] = keep_annotationsall_annotations["categories"] = keep_categoriesif not os.path.exists(dst_root_dir + "/annotations/instances_{}.json".format(folder)):with open(dst_root_dir + "/annotations/instances_{}.json".format(folder), "w") as f:json.dump(all_annotations, f)filelist = set()for i in tqdm.tqdm(keep_annotations):img_src_path = "/images/{}/{:012d}.jpg".format(folder, i["image_id"])label_src_path = "/labels/{}/{:012d}.txt".format(folder, i["image_id"])if not os.path.exists(dst_root_dir + img_src_path):shutil.copy(src_root_dir + img_src_path, dst_root_dir + img_src_path)if not os.path.exists(dst_root_dir + label_src_path):keep_records = [x for x in open(src_root_dir + label_src_path, "r").readlines() if(int(x.strip().split(" ")[0]) + 1) in keep_names]with open(dst_root_dir + label_src_path, "w") as f:for r in keep_records:f.write(r)filelist.add("./images/{}/{:012d}.jpg\n".format(folder, i["image_id"]))with open(dst_root_dir + "/{}.txt".format(folder), "w") as f:for r in filelist:f.write(r)new_data_yaml = yaml.safe_load(open(data_yaml).read())new_data_yaml["path"] = dst_root_dirwith open(dst_root_dir + "/coco.yaml", 'w') as f:f.write(yaml.dump(new_data_yaml, allow_unicode=True))create_sub_coco_dataset(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])# 使用命令示例
# python create_sub_coco_dataset.py car.yaml ../../Datasets/coco_extract/coco2017/coco car train2017
# python create_sub_coco_dataset.py person.yaml ../../Datasets/coco_extract/coco2017/coco person val2017

使用命令示例分别包含了抽取类别到train和val文件夹下的运行代码,需要根据自己的路径进行适当修改。

以下就是今天抽取完成的结果文件目录,可以用于训练YOLO模型了。

好了,今天的分享到此结束,期待下期继续。


往期推荐:

手把手教你玩转人工智能算法,Yolov5实践教程(1)(附源码)

手把手教你玩转人工智能算法,Yolov5实践教程(2)(附源码)

手把手教你生成有趣有料的素描图(附代码)

关注公众号送115G Python和人工智能学习资料。
在这里插入图片描述

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

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

相关文章

2023年蓝桥杯省赛——幸运数字

目录 题目链接:0幸运数字 - 蓝桥云课 (lanqiao.cn) 解法 思路 高级思路 总结 题目链接:0幸运数字 - 蓝桥云课 (lanqiao.cn) 解法 首先是我写了差不多一个小时的解法,裂开了,为什么我如此废物 思路 寻找第2023个在二进制、八…

http协议的历史与基本概念

文章目录 历史和发展起源:HTTP/0.9(1991年):HTTP/1.0(1996年,RFC 1945):HTTP/1.1(1997年,RFC 2068;1999年更新为RFC 2616)&#xff1a…

「连载」边缘计算(三十三)03-15:边缘部分源码(源码分析篇)

(接上篇) 初始化porxy,具体如下所示。 KubeEdge/edgemesh/pkg/proxy/proxy.go // Init: init the proxy. create virtual device and assign ips, etc.. func Init() { go func() { unused make([]string, 0) addrByService &addrTab…

【MIT 6.S081】2020, 实验记录(9),Lab: file system

目录 Task 1:Large filesTask 2:Symbolic links2.1 增加一个系统调用 symlink2.2 新增文件类型2.3 新增 NOFOLLOW 标志位2.4 实现 sys_symlink 系统调用2.5 修改 sys_open 函数2.6 测试 Task 1:Large files 现在的 xv6 系统中,一…

算法——贪心算法

《算法图解》——贪心算法 # 首先创建一个表,包含所覆盖的州 states_needed set([mt,wa,or,id,nv,ut,az]) # 传入一个数组,转换成一个集合#可供选择的广播台清单 stations {} stations[kone] set([id,nv,ut]) #用集合表示想要覆盖的州,且不…

线程的通俗解释

------------------------------------------------------------ author: hjjdebug date: 2024年 03月 17日 星期日 17:04:47 CST descpriton: 线程的通俗解释 ------------------------------------------------------------ 目录: 1. 什么是线程? 2. 线程函数长…

EMQX 4.0和EMQX 5.0集群架构实现1亿MQTT连接哪些改进

EMQX 5.0水平扩展能力得到了指数级提升,能够更可靠地承载更大规模的物联网设备连接量。 在EMQX5.0正式发布前的性能测试中,我们通过一个23节点的EMQX集群,全球首个达成了1亿MQTT连接每秒100万消息吞吐,这也使得EMQX 5.0成为目前为…

Jenkins流水线将制品发布到Nexus存储库

1、安装jenkins(建议别用docker安装,坑太多) docker run -d -p 8089:8080 -p 10241:50000 -v /var/jenkins_workspace:/var/jenkins_home -v /etc/localtime:/etc/localtime --name my_jenkins --userroot jenkins/jenkins:2.449 坑1 打开x…

Python使用 k 均值对遥感图像进行语义分割

本篇文章介绍K-means语义分割来估计 2000 年至 2023 年咸海水面的变化 让我们先看一下本教程中将使用的数据。这是同一地区的两张 RGB 图像,间隔 23 年,但很明显地表特性和大气条件(云、气溶胶等)不同。这就是为什么我决定训练两个独立的 k-Means 模型,每个图像一个。 首…

仰卧起坐计数,YOLOV8POSE

仰卧起坐计数,YOLOV8POSE 通过计算膝盖、腰部、肩部的夹角,计算仰卧起坐的次数

JavaScript爬虫进阶攻略:从网页采集到数据可视化

在当今数字化世界中,数据是至关重要的资产,而网页则是一个巨大的数据源。JavaScript作为一种强大的前端编程语言,不仅能够为网页增添交互性,还可以用于网页爬取和数据处理。本文将带你深入探索JavaScript爬虫技术的进阶应用&#…

[江苏工匠杯]easyphp

先看源码 <?php highlight_file(__FILE__); $key1 0; $key2 0; ​ $a $_GET[a]; $b $_GET[b]; ​ if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){if(isset($b) && 8b184b substr(md5($b),-6,6)){$key1 1;}else{die("…

centos8作为虚拟机镜像时yum报错

使用yum安装时出现如下错误&#xff1a; Errors during downloading metadata for repository AppStream:- Status code: 404 for http://mirrors.cloud.aliyuncs.com/centos/8/AppStream/x86_64/os/repodata/repomd.xml (IP: 100.100.2.148) Error: Failed to download metad…

助力企业跨越地域限制,实现业务全球化与数字化升级

驱动跨行业数字化转型与全球化互联实践》 中国联通作为中国领先的电信运营商&#xff0c;在物联网领域不断创新&#xff0c;尤其在跨境物联网产品解决方案上取得了显著成果&#xff0c;已经成功服务于各行各业&#xff0c;实现了全球化业务的有效链接与智能化管理。以下将详述…

Day19 包装类 Integer底层

Day19 包装类 Integer底层 一、包装类 1、概念&#xff1a; 包装类&#xff08;Wrapper Class&#xff09;是一种用于将基本数据类型转换为对象的类。Java中的基本数据类型&#xff08;如int、char、boolean等&#xff09;是非对象的&#xff0c;为了能够在需要对象的上下文中…

mvn 相关命令汇总

1、需求 项目上一致是使用的mvn 进行打包, 对于项目上的一些mvn 命令&#xff0c;有时候会忘记&#xff0c;所以将mvn 汇总起来 2、命令汇总 ① mvn clean 将项目目录下的编译的文件清除掉,即target 文件夹的编译文件 ② mvn complie 编译项目的代码&#xff0c;生成class 文…

Spring boot2.7整合jetcache方法缓存

前面的文章 我们讲了 spring boot 整合 jetcache 做基本字符串数据缓存 但是 我这里有个这样的逻辑 我的 domain 包下 有一个 book 属性类 里面就 id 和 name 属性 设置了 对应的 set get函数 和一个整体的构造函数 package com.example.javadom.domain;public class book {pr…

TrueNAS怎么设置中文,最新2024版本安装详细说明

首先我们做好安装前的准备工作 1&#xff0c;ISO镜像安装包 2&#xff0c;虚拟机&#xff08;建议使用ESXI虚拟机环境&#xff09; 如果是物理机安装&#xff0c;建议先给底层安装虚拟机系统esxi&#xff0c;再在上面安装方便以后的管理&#xff0c;如果你想物理机直接安装&a…

3.15消费者权益保护教育宣传活动怎样联系媒体投稿宣传?

在315金融消费者权益保护教育宣传活动中,想要有效地联系媒体报道并进行便捷宣传,可以通过以下步骤来利用智慧软文发布系统进行操作: 1. 准备宣传素材: - 制作高质量的新闻稿件,内容应围绕金融消费者权益保护的主题,包含活动的目的、特色、实施计划、预期影响、参与方式等细节;…

怎么看一手伦敦银多少钱?

做伦敦银投资的朋友需要搞清楚“一手伦敦银多少钱”的问题&#xff0c;这也是伦敦银交易的基础问题。为什么需要搞清楚这个基础问题呢&#xff1f;有些基础问题我们不需要搞懂&#xff0c;但是关于一手伦敦银多少钱却需要搞清楚&#xff0c;因为这决定了投资者的资金利用率。 关…