coco关键点标注json_分析COCO数据集进行姿态估计

本文详细分析了COCO数据集在姿态估计任务中的应用,探讨了数据集中的人数分布、关键点数量、规模、以及分层抽样等问题。通过将COCO数据转换为Pandas数据帧,便于数据处理和分析,并展示了如何通过Python库pycocotools解析JSON注释。分析指出,COCO数据集在规模和关键点分布方面存在挑战,对于模型训练具有重要指导意义。
摘要由CSDN通过智能技术生成
作者|Michal Faber
编译|VK
来源|Towards Data Science
原文链接: https:// towardsdatascience.com/ how-to-analyze-the-coco-dataset-for-pose-estimation-7296e2ffb12e

f6924309fee377f952d933fce3b63758.png

我们需要一个数据集来训练姿势估计模型,我们的选择有像COCO、MPII和CrowdPose这样的公共数据集,姿态估计属于比较复杂一类的问题。为神经网络模型建立一个合适的数据集是很困难的,图像中每个人的每个关节都必须定位和标记,这是一项琐碎而费时的任务。

目前最流行的姿态估计数据集是COCO数据集。它有大约80类图像和大约250000个人物实例。

如果检查此数据集中的一些随机图像,你可能会碰到一些与要解决的问题无关的实例,学术界希望达到最高的精度,但在实际生产环境中并不总是如此。

在实际环境中,我们更希望在特定的场景下制作良好的模型,例如行人、篮球运动员、健身房等。

现在我们从COCO数据集中查看此图像:

d8c2fd55ef67ddb9559ff5e01191dd91.png

你看到红点了吗?这是关键点:鼻子。

你可能不希望网络看到仅包含头部一部分的示例,尤其是在帧的底部。

本文将向你展示COCO数据集的一个示例分析。

COCO数据集

COCO数据集是用于许多计算机视觉任务的大规模通用数据集,包含150万个对象实例,80个对象类别,25万人。我们可以在源站点上找到更多详细信息,在那里还可以下载所有必需的文件:https://cocodataset.org/。

数据集由图像文件和注释文件组成。注释文件是一个JSON,包含关于一个人(或其他一些类别)的所有元数据。在这里我们将找到边界框的位置和大小,区域,关键点,源图像的文件名等。

我们不必手动解析JSON。有一个方便的Python库pycocotools(https://github.com/cocodataset/cocoapi/tree/master/PythonAPI)。

我们需要train2017.zip(https://cocodataset.org/#download),val2017.zip(https://cocodataset.org/#download),annotations_trainval2017.zip(https://cocodataset.org/#download)。

具体来说,我们只需要人的注释。zip中有两个有趣的文件:annotations_trainval2017.zip:person_keypoints_train2017.json和person_keypoints_val2017.json。

我建议将文件放在这个文件夹层次结构中:

dataset_coco
   |---annotations
         |---person_keypoints_train2017.json
         |---person_keypoints_val2017.json
   |---train2017
         |---*.jpg
   |---val2017
         |---*.jpg

下面是显示如何加载注释的代码:

from pycocotools.coco import COCO
...

train_annot_path = 'dataset_coco/annotations  /person_keypoints_train2017.json'
val_annot_path = 'dataset_coco/annotations/person_keypoints_val2017.json'
train_coco = COCO(train_annot_path) # 加载训练集的注释
val_coco = COCO(val_annot_path) # 加载验证集的注释
...
# 函数遍历一个人的所有数据库并逐行返回相关数据
def get_meta(coco):
    ids = list(coco.imgs.keys())
    for i, img_id in enumerate(ids):
        img_meta = coco.imgs[img_id]
        ann_ids = coco.getAnnIds(imgIds=img_id)
        # 图像的基本参数
        img_file_name = img_meta['file_name']
        w = img_meta['width']
        h = img_meta['height']
        # 检索当前图像中所有人的元数据
        anns = coco.loadAnns(ann_ids)

        yield [img_id, img_file_name, w, h, anns]

...

# 迭代图像
for img_id, img_fname, w, h, meta in get_meta(train_coco):
    ...
    # 遍历图像的所有注释
    for m in meta:
        # m是字典
        keypoints = m['keypoints']
        ...
...

首先,我们必须加载COCO对象,它是json数据的包装器(第6-7行);

在第11行,我们加载所有图像标识符。

在接下来的几行中,我们为每个图像加载元数据。这是一个包含图像宽度、高度、名称、许可证等一般信息的词典。

在第14行,我们加载给定图像的注释元数据。这是一个字典列表,每个字典代表一个人。

第27-32行显示了如何加载整个训练集(train_coco)。类似地,我们可以加载验证集(val_coco)。

将COCO转换为Pandas数据帧

让我们将COCO元数据转换为pandas数据帧。我们使用如matplotlib、sklearn 和pandas。

数据的过滤、可视化和操作变得更加容易。此外,我们还可以将数据导出为csv或parquet等。

def convert_to_df(coco):
    images_data = []
    persons_data = []

    # 遍历所有图像
    for img_id, img_fname, w, h, meta in get_meta(coco):
        images_data.append({
            'image_id': int(img_id),
            'path': img_fname,
            'width': int(w),
            'height': int(h)
        })

        # 遍历所有元数据
        for m in meta:
            persons_data.append({
                'image_id':
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值