如何使用Python分析姿态估计数据集COCO?

磐创AI

    
    当我们训练姿势估计模型,比较常用的数据集包括像COCO、MPII和CrowdPose这样的公共数据集,但如果我们将其与不同计算机视觉任务(如对象检测或分类)的公共可用数据集的数量进行比较,就会发现可用的数据集并不多。姿态估计问题属于一类比较复杂的问题,为神经网络模型建立一个合适的数据集是很困难的,图像中每个人的每个关节都必须定位和标记,这是一项琐碎而费时的任务。最流行的姿态估计数据集是COCO数据集,它有大约80类图像和大约250000个人物实例。如果你检查此数据集中的一些随机图像,你可能会遇到一些与要解决的问题无关的实例。学术界希望达到最高的精度,但在实际生产环境中并不总是如此。在现实世界中,我们可能更感兴趣的是在非常特定的环境中工作良好的模型,例如行人、篮球运动员、健身房等。让我们从COCO数据集中查看此图像:
    
    你看到红点了吗?这是关键点:鼻子。有时,你可能不希望网络看到仅包含头部一部分的示例,尤其是在帧的底部。在这篇文章中,我会向你展示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 = []
    
    
    1  2  3  下一页>