Shortcuts

准备数据集

在这份文档将指导如何为 MMPose 准备数据集,包括使用内置数据集、创建自定义数据集、结合数据集进行训练、浏览和下载数据集。

使用内置数据集

步骤一: 准备数据

MMPose 支持多种任务和相应的数据集。你可以在 数据集仓库 中找到它们。为了正确准备你的数据,请按照你选择的数据集的指南进行操作。

步骤二: 在配置文件中进行数据集设置

在开始训练或评估模型之前,你必须配置数据集设置。以 td-hm_hrnet-w32_8xb64-210e_coco-256x192.py 为例,它可以用于在 COCO 数据集上训练或评估 HRNet 姿态估计器。下面我们浏览一下数据集配置:

  • 基础数据集参数

    # base dataset settings
    dataset_type = 'CocoDataset'
    data_mode = 'topdown'
    data_root = 'data/coco/'
    
    • dataset_type 指定数据集的类名。用户可以参考 数据集 API 来找到他们想要的数据集的类名。

    • data_mode 决定了数据集的输出格式,有两个选项可用:'topdown''bottomup'。如果 data_mode='topdown',数据元素表示一个实例及其姿态;否则,一个数据元素代表一张图像,包含多个实例和姿态。

    • data_root 指定数据集的根目录。

  • 数据处理流程

    # pipelines
    train_pipeline = [
        dict(type='LoadImage'),
        dict(type='GetBBoxCenterScale'),
        dict(type='RandomFlip', direction='horizontal'),
        dict(type='RandomHalfBody'),
        dict(type='RandomBBoxTransform'),
        dict(type='TopdownAffine', input_size=codec['input_size']),
        dict(type='GenerateTarget', encoder=codec),
        dict(type='PackPoseInputs')
    ]
    val_pipeline = [
        dict(type='LoadImage'),
        dict(type='GetBBoxCenterScale'),
        dict(type='TopdownAffine', input_size=codec['input_size']),
        dict(type='PackPoseInputs')
    ]
    

    train_pipelineval_pipeline 分别定义了训练和评估阶段处理数据元素的步骤。除了加载图像和打包输入之外,train_pipeline 主要包含数据增强技术和目标生成器,而 val_pipeline 则专注于将数据元素转换为统一的格式。

  • 数据加载器

    # data loaders
    train_dataloader = dict(
        batch_size=64,
        num_workers=2,
        persistent_workers=True,
        sampler=dict(type='DefaultSampler', shuffle=True),
        dataset=dict(
            type=dataset_type,
            data_root=data_root,
            data_mode=data_mode,
            ann_file='annotations/person_keypoints_train2017.json',
            data_prefix=dict(img='train2017/'),
            pipeline=train_pipeline,
        ))
    val_dataloader = dict(
        batch_size=32,
        num_workers=2,
        persistent_workers=True,
        drop_last=False,
        sampler=dict(type='DefaultSampler', shuffle=False, round_up=False),
        dataset=dict(
            type=dataset_type,
            data_root=data_root,
            data_mode=data_mode,
            ann_file='annotations/person_keypoints_val2017.json',
            bbox_file='data/coco/person_detection_results/'
            'COCO_val2017_detections_AP_H_56_person.json',
            data_prefix=dict(img='val2017/'),
            test_mode=True,
            pipeline=val_pipeline,
        ))
    test_dataloader = val_dataloader
    

    这个部分是配置数据集的关键。除了前面讨论过的基础数据集参数和数据处理流程之外,这里还定义了其他重要的参数。batch_size 决定了每个 GPU 的 batch size;ann_file 指定了数据集的注释文件;data_prefix 指定了图像文件夹。bbox_file 仅在 top-down 数据集的 val/test 数据加载器中使用,用于提供检测到的边界框信息。

我们推荐从使用相同数据集的配置文件中复制数据集配置,而不是从头开始编写,以最小化潜在的错误。通过这样做,用户可以根据需要进行必要的修改,从而确保更可靠和高效的设置过程。

使用自定义数据集

自定义数据集 指南提供了如何构建自定义数据集的详细信息。在本节中,我们将强调一些使用和配置自定义数据集的关键技巧。

  • 确定数据集类名。如果你将数据集重组为 COCO 格式,你可以简单地使用 CocoDataset 作为 dataset_type 的值。否则,你将需要使用你添加的自定义数据集类的名称。

  • 指定元信息配置文件。假设你的数据集标注文件存储路径为 aaa/annotations/xxx.json,图片存储路径为 aaa/train/c.jpg,你应该按照以下方式指定元信息配置文件:

    train_dataloader = dict(
        ...
        dataset=dict(
            type=dataset_type,
            data_root='aaa',
            # 标注文件路径为 {data_root}/{ann_file}
            # 例如: aaa/annotations/xxx.json
            ann_file='annotations/xxx.json',
            # 图片路径为 {data_root}/{img}/
            # 例如: aaa/train/c.jpg
            data_prefix=dict(img='train'),
            # 指定元信息配置文件
            metainfo=dict(from_file='configs/_base_/datasets/custom.py'),
            ...),
    )
    

    注意,metainfo 参数必须在 val/test 数据加载器中指定。

使用混合数据集进行训练

MMPose 提供了一个方便且多功能的解决方案,用于训练混合数据集。请参考混合数据集训练

浏览数据集

tools/analysis_tools/browse_dataset.py 帮助用户可视化地浏览姿态数据集,或将图像保存到指定的目录。

python tools/misc/browse_dataset.py ${CONFIG} [-h] [--output-dir ${OUTPUT_DIR}] [--max-item-per-dataset ${MAX_ITEM_PER_DATASET}] [--not-show] [--phase ${PHASE}] [--mode ${MODE}] [--show-interval ${SHOW_INTERVAL}]
ARGS Description
CONFIG 配置文件的路径
--output-dir OUTPUT_DIR 保存可视化结果的目标文件夹。如果不指定,可视化的结果将不会被保存
--not-show 不适用外部窗口显示可视化的结果
--phase {train, val, test} 数据集选项
--mode {original, transformed} 指定可视化图片类型。 original 为不使用数据增强的原始图片及标注可视化; transformed 为经过增强后的可视化
--show-interval SHOW_INTERVAL 显示图片的时间间隔
--max-item-per-dataset 定义每个数据集可视化的最大样本数。默认为 50

例如,用户想要可视化 COCO 数据集中的图像和标注,可以使用:

python tools/misc/browse_dataset.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-e210_coco-256x192.py --mode original

检测框和关键点将被绘制在原始图像上。下面是一个例子: original_coco

原始图像在被输入模型之前需要被处理。为了可视化预处理后的图像和标注,用户需要将参数 mode 修改为 transformed。例如:

python tools/misc/browse_dataset.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-e210_coco-256x192.py --mode transformed

这是一个处理后的样本:

transformed_coco

热图目标将与之一起可视化,如果它是在 pipeline 中生成的。

用 MIM 下载数据集

通过使用 OpenXLab,您可以直接下载开源数据集。通过平台的搜索功能,您可以快速轻松地找到他们正在寻找的数据集。使用平台上的格式化数据集,您可以高效地跨数据集执行任务。

如果您使用 MIM 下载,请确保版本大于 v0.3.8。您可以使用以下命令进行更新、安装、登录和数据集下载:

# upgrade your MIM
pip install -U openmim

# install OpenXLab CLI tools
pip install -U openxlab
# log in OpenXLab
openxlab login

# download coco2017 and preprocess by MIM
mim download mmpose --dataset coco2017

已支持的数据集

下面是支持的数据集列表,更多数据集将在之后持续更新:

人体数据集

Dataset name Download command
COCO 2017 mim download mmpose --dataset coco2017
MPII mim download mmpose --dataset mpii
AI Challenger mim download mmpose --dataset aic
CrowdPose mim download mmpose --dataset crowdpose

人脸数据集

Dataset name Download command
LaPa mim download mmpose --dataset lapa
300W mim download mmpose --dataset 300w
WFLW mim download mmpose --dataset wflw

手部数据集

Dataset name Download command
OneHand10K mim download mmpose --dataset onehand10k
FreiHand mim download mmpose --dataset freihand
HaGRID mim download mmpose --dataset hagrid

全身数据集

Dataset name Download command
Halpe mim download mmpose --dataset halpe

动物数据集

Dataset name Download command
AP-10K mim download mmpose --dataset ap10k

服装数据集

Coming Soon