基于coco数据集的人体关键点分布示意图与数据集解析

2024-01-29 13:30

本文主要是介绍基于coco数据集的人体关键点分布示意图与数据集解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文绘制了coco中人体姿态关键点的分布示意图,并解释了每个关键点的含义。

目录

1、数据集介绍

2、示意图

3、数据集解析


1、数据集介绍

        有pose标注的部分数据样式如下:

        每张图中有若干个segment标注,每个标注包含的信息如下:


{"segmentation":[[0.43,299.58,2.25,299.58,9.05,287.78,32.66,299.13,39.01,296.4,48.09,290.96,43.55,286.87,62.16,291.86,61.25,286.87,37.65,279.15,18.13,272.8,0,262.81]],
"num_keypoints":1,
"area":1037.7819,
"iscrowd":0,
"keypoints":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,277,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
"image_id":397133,
"bbox":[0,262.81,62.16,36.77],
"category_id":1,
"id":1218137}

        我们所需要的就是其中的'keypoints'部分,每三个数字为一组,代表一个关键点,三个值分别为x坐标、y坐标、标志位,其中,标志位有三个值:

  • 0:未标注
  • 1:标注,但被遮挡
  • 2:标注,未遮挡

2、示意图

        下图中,共17个关节点(鼻子x1、眼睛x2、耳朵x2、肩部x2、肘部x2、手腕x2、髋部x2、膝关节x2、脚腕x2):

3、数据集解析

        我们从coco2017中解析数据集并保存为YOLO格式,这种格式可以直接用YOLOv5或者YOLOv8进行训练:


"""
get person instance segmentation annotations from coco data set.
"""import argparse
import osimport numpy as np
import tqdm
import shutil
from pycocotools.coco import COCOdef main(args):annotation_file = os.path.join(args.input_dir, 'annotations', 'person_keypoints_{}.json'.format(args.split))# init pathsubdir = args.split[:-4] + '_coco2'img_save_dir = os.path.join(args.output_dir, subdir, 'images')txt_save_dir = os.path.join(args.output_dir, subdir, 'labels')os.makedirs(img_save_dir, exist_ok=True)os.makedirs(txt_save_dir, exist_ok=True)coco = COCO(annotation_file)catIds = coco.getCatIds()imgIds = coco.getImgIds()print("catIds len:{}, imgIds len:{}".format(len(catIds), len(imgIds)))for imgId in tqdm.tqdm(imgIds, ncols=100):img = coco.loadImgs(imgId)[0]annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)anns = coco.loadAnns(annIds)if len(annIds) > 0:img_origin_path = os.path.join(args.input_dir, args.split, img['file_name'])img_height, img_width = img['height'], img['width']lines = []for ann in anns:# if ann['iscrowd'] != 0 or ann['category_id'] != 1:#     continuebbox = np.asarray(ann['bbox'], dtype=float)  # x1y1whbbox[::2] = bbox[::2] / img_widthbbox[1::2] = bbox[1::2] / img_height# x1y1wh2xywhbbox[0] += bbox[2] / 2bbox[1] += bbox[3] / 2bbox_str = [str(b) for b in bbox]keypoints = np.asarray(ann['keypoints'], dtype=float)keypoints[::3] = keypoints[::3] / img_widthkeypoints[1::3] = keypoints[1::3] / img_heightkeypoints_str = [str(k) for k in keypoints]line = '{} {} {}'.format(0, ' '.join(bbox_str), ' '.join(keypoints_str))lines.append(line)if len(lines) > 0:txt_output_path = os.path.join(txt_save_dir, os.path.splitext(img['file_name'])[0] + '.txt')with open(txt_output_path, 'a') as f:for line in lines:f.write(line + '\n')img_output_path = os.path.join(img_save_dir, img['file_name'])shutil.copy(img_origin_path, img_output_path)def get_args():parser = argparse.ArgumentParser()parser.add_argument("--input_dir", default="/data/public_datasets/coco2017", type=str,help="input dataset directory")parser.add_argument("--split", default="val2017", type=str,help="train2017 or val2017")parser.add_argument("--output_dir", default="/data/datasets/person_pose", type=str,help="output dataset directory")return parser.parse_args()if __name__ == '__main__':args = get_args()main(args)

参考:

COCO - Common Objects in Context

这篇关于基于coco数据集的人体关键点分布示意图与数据集解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657058

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步