基于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

相关文章

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实