ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MMPose 数据集标注与格式转换实战指南:从原始标注到 COCO 格式的完整流水线

2026/9/17 16:53:07 拓冰建站 浏览量
MMPose 数据集标注与格式转换实战指南:从原始标注到 COCO 格式的完整流水线 MMPose 数据集标注与格式转换实战指南从原始标注到 COCO 格式的完整流水线【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmposeMMPoseOpenMMLab Pose Estimation Toolbox的训练与评测环节对数据格式有明确要求本指南基于docs/en/user_guides/dataset_tools.md系统讲解数据集处理的完整工作流包括使用 Label Studio 等工具完成标注、借助 browse_dataset 可视化校验数据、通过 MIM 从 OpenXLab 一键下载格式化数据集以及将 Animal-Pose、COFW、DeepPoseKit、MacaquePose、Human3.6M、MPII、UBody 等公开数据集的原始标注转换为 MMPose 兼容的 COCO 风格标注文件。读完本文你将掌握每种数据集的目录组织规范、转换脚本的调用方式与底层实现逻辑能够自主完成自定义数据集的准备与格式校验。一、数据集标注工具不限格式为准MMPose 对用户使用的标注工具不做任何限制只要最终标注结果符合 MMPose 的数据格式要求即可。这意味着无论是开源的 Label Studio、商业标注平台还是自研脚本产出的标注只需满足 COCO 风格的字段规范关键点 keypoints、边界框 bbox、类别 categories 等即可被直接消费。对于使用 Label Studio 中的方法进行标注并将结果导出为 Label Studio 标准的.json文件同时将Labeling Interface中的Code保存为.xml文件——这两个文件是后续转换脚本labelstudio2coco.py的输入。MMPose 官方也非常欢迎社区用户贡献更多标注工具的使用教程和转换脚本。Label Studio 标注要点在 Label Studio 中新建项目后需要在Settings中找到Labeling Interface点击Code并粘贴如下配置其中包含三种标注类型分别对应 COCO 格式中的三个字段KeyPointLabels→ 对应 COCO 的keypointsPolygonLabels→ 对应 COCO 的segmentationRectangleLabels→ 对应 COCO 的bboxView KeyPointLabels namekp-1 toNameimg-1 Label valueperson background#D4380D/ /KeyPointLabels PolygonLabels namepolygonlabel toNameimg-1 Label valueperson background#0DA39E/ /PolygonLabels RectangleLabels namelabel toNameimg-1 Label valueperson background#DDA0EE/ /RectangleLabels Image nameimg-1 value$img/ /View标注顺序有严格要求先标注关键点再标注多边形/矩形框。一个实例的标注必须以关键点开始、以非关键点多边形或矩形结束这样脚本才能将不同类型的标注合并为同一个实例。其中KeyPointLabels的顺序和数量必须与 MMPose 配置文件中dataset_info里定义的关键点顺序一致PolygonLabels与RectangleLabels的顺序可以互换且只需标注其中一种。需要注意bbox 和 area 会基于后标注的 PolygonLabels/RectangleLabels 计算。若先标注 PolygonLabels则 bbox 以之后的 RectangleLabels 范围为准、area 等于矩形面积反之则以多边形的最小外接矩形为 bbox、以多边形面积为 area。标注完成后点击Export按钮选择JSON格式导出即可。由于导出的文件仅包含标注不含原图建议使用Export功能中的 COCO 导出工具其压缩包内会附带图片文件夹。标注转 COCOlabelstudio2coco.py仓库提供了 labelstudio2coco.py 将 Label Studio 的.json标注文件转换为 COCO 风格的.json文件命令格式为python tools/dataset_converters/labelstudio2coco.py ${LS_JSON_FILE} ${LS_XML_FILE} ${OUTPUT_COCO_JSON_FILE}例如python tools/dataset_converters/labelstudio2coco.py config.xml project-1-at-2023-05-13-09-22-91b53efa.json output/result.json其中config.xml是上文所述Labeling Interface的 Codeproject-1-at-2023-05-13-09-22-91b53efa.json是从 Label Studio 导出的 JSON 文件output/result.json是输出路径目录不存在时脚本会自动创建。转换完成后将图片文件夹放入输出目录即可得到完整的 COCO 数据集. ├── images │ ├── 38b480f2.jpg │ └── aeb26f04.jpg └── result.json在 MMPose 配置中使用该数据集时只需在 dataloader 的 dataset 字典中按如下方式指向标注文件和图片前缀datasetdict( typedataset_type, data_rootdata_root, data_modedata_mode, ann_fileresult.json, data_prefixdict(imgimages/), pipelinetrain_pipeline, )二、浏览数据集可视化校验加载与增强结果MMPose 提供了数据集浏览工具 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}]各参数含义如下参数说明CONFIG配置文件路径工具依据其中的 dataloader 配置加载数据集--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工具会在原图上绘制边界框和关键点。若将mode改为transformed则可查看送入模型前的预处理结果如果 pipeline 中生成了热图目标如GenerateTarget使用 MSRAHeatmap 等编解码器热图也会一并可视化python tools/misc/browse_dataset.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-e210_coco-256x192.py --mode transformed三、通过 MIM 下载开源数据集借助 OpenXLab 平台用户可以直接获取多领域的免费格式化数据集。通过平台的搜索功能可以快速定位所需数据集从而高效地开展跨数据集任务。使用 MIM 下载需要确保其版本高于 v0.3.8完整流程如下# 升级 MIM pip install -U openmim # 安装 OpenXLab CLI 工具 pip install -U openxlab # 登录 OpenXLab openxlab login # 通过 MIM 下载 coco2017 并自动预处理 mim download mmpose --dataset coco2017目前支持通过 MIM 下载的数据集如下列表持续更新任务类型数据集下载命令BodyCOCO 2017mim download mmpose --dataset coco2017BodyMPIImim download mmpose --dataset mpiiBodyAI Challengermim download mmpose --dataset aicBodyCrowdPosemim download mmpose --dataset crowdposeFaceLaPamim download mmpose --dataset lapaFace300Wmim download mmpose --dataset 300wFaceWFLWmim download mmpose --dataset wflwHandOneHand10Kmim download mmpose --dataset onehand10kHandFreiHandmim download mmpose --dataset freihandHandHaGRIDmim download mmpose --dataset hagridWhole BodyHalpemim download mmpose --dataset halpeAnimalAP-10Kmim download mmpose --dataset ap10k四、格式转换脚本把原始标注统一为 COCO 风格MMPose 在 tools/dataset_converters/ 目录下提供了一系列脚本将不同数据集的原始标注转换为 COCO 风格格式。以下逐一讲解各数据集的目录组织、脚本调用与输出结果。4.1 Animal-PoseICCV2019Animal-Pose 数据集论文Cross-Domain Adaptation for Animal Pose Estimation的图像与标注可从官方站点下载。转换脚本为 parse_animalpose_dataset.py官方也提供了预处理好的标注文件。如需自行生成标注步骤如下下载原始图像与标注并解压到$MMPOSE/data按如下结构组织mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data │── animalpose │ │-- VOC2012 │ │-- Annotations │ │-- ImageSets │ │-- JPEGImages │ │-- SegmentationClass │ │-- SegmentationObject │ │-- animalpose_image_part2 │ │-- cat │ │-- cow │ │-- dog │ │-- horse │ │-- sheep │ │-- PASCAL2011_animal_annotation │ │-- cat │ │ |-- 2007_000528_1.xml │ │ |-- 2007_000549_1.xml │ │ │-- ... │ │-- cow │ │-- dog │ │-- horse │ │-- sheep │ │-- annimalpose_anno2 │ │-- cat │ │ |-- ca1.xml │ │ |-- ca2.xml │ │ │-- ... │ │-- cow │ │-- dog │ │-- horse │ │-- sheep在$MMPOSE下运行python tools/dataset_converters/parse_animalpose_dataset.py生成的标注文件保存在$MMPOSE/data/animalpose/annotations。从源码看脚本内部完成了三项工作见 parse_animalpose_dataset.py先用xml2coco_trainval解析 PascalVOC 的 PASCAL2011 动物标注 XML 生成 trainval 合并文件再用split_train_val借助 xtcocotools 按验证标注数1117随机切分训练/验证集最后用xml2coco_test解析animalpose_anno2生成测试集。Animal-Pose 定义了一套 20 关键点规范左/右眼、左/右耳基、鼻子、喉部、尾基、鬐甲以及四肢的肘/膝/爪等脚本中通过name2id字典将 XML 中的关键点名称映射为固定索引并将原始visible标记统一转换为 COCO 的可见性编码可见关键点置 2。由于官方数据集未提供 train/val/test 划分MMPose 的做法是选取来自 PascalVOC 的图像作为 train valtrainval 共3608 张图像、5117 个标注其中2798 张图像、4000 个标注用于训练810 张图像、1117 个标注用于验证其余来源的1000 张图像、1000 个标注用于测试。4.2 COFWICCV2013COFWRobust Face Landmark Estimation Under Occlusion的人脸关键点数据需从 COFW Dataset (Color Images) 下载COFW_train_color.mat与COFW_test_color.mat并移动到$MMPOSE/data/cofw/mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data │── cofw |── COFW_train_color.mat |── COFW_test_color.mat该脚本依赖h5py读取 MATLAB 的.mat文件先安装依赖再运行pip install h5py python tools/dataset_converters/parse_cofw_dataset.py运行后得到mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data │── cofw |── COFW_train_color.mat |── COFW_test_color.mat |── annotations | |── cofw_train.json | |── cofw_test.json |── images |── 000001.jpg |── 000002.jpg从 parse_cofw_dataset.py 源码可以看到几个关键的坐标转换细节脚本从.mat中分别读取训练集IsTr/phisTr/bboxesTr与测试集IsT/phisT/bboxesT数据将关键点的遮挡标记2/1反转为 COCO 的可见性编码2 - keypoints[:, 2]即 2 表示可见、1 表示遮挡并将 MATLAB 的 1 起始索引转换为 Python 的 0 起始索引同时把负值的 bbox 与关键点坐标截断为 0。转换的同时会把.mat中内嵌的图像逐张写出为images/下的 JPG 文件。4.3 DeepPoseKitVinegar Fly / Desert Locust / Grévys ZebraeLife2019DeepPoseKit 生态下的三个动物姿态数据集果蝇 fly、沙漠蝗虫 locust、格列维斑马 zebra的标注文件可从 DeepPoseKit-Data 仓库下载。转换脚本为 parse_deepposekit_dataset.py官方也提供预处理好的标注文件vinegar_fly_annotations、locust_annotations、zebra_annotations与图像包vinegar_fly_images、locust_images、zebra_images。自行生成的步骤如下下载原始图像与标注并解压到$MMPOSE/data组织为mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data | |── DeepPoseKit-Data | ── datasets | |── fly | | |── annotation_data_release.h5 | | |── skeleton.csv | | |── ... | | | |── locust | | |── annotation_data_release.h5 | | |── skeleton.csv | | |── ... | | | ── zebra | |── annotation_data_release.h5 | |── skeleton.csv | |── ... | │── fly -- images │-- 0.jpg │-- 1.jpg │-- ...注意图像包需要单独下载fly/locust/zebra 三个数据集各有对应的 images 压缩包。运行python tools/dataset_converters/parse_deepposekit_dataset.py生成的标注文件分别保存在$MMPOSE/data/fly/annotations、$MMPOSE/data/locust/annotations和$MMPOSE/data/zebra/annotations。从源码看脚本以h5py读取annotation_data_release.h5中的annotations关键点坐标、annotated可见性标记、images图像数据与skeleton骨架连接四个字段并为三个数据集分别定义了不同的关键点定义fly 为 32 点含头部、胸腹、左右前中后腿各 4 段及双翅locust 为 35 点含触角、复眼及左右三对腿的各节段zebra 为 9 点吻部、头、颈、四肢与尾。标注写入时 bbox 由可见关键点的最小/最大坐标计算。由于官方未提供测试集脚本使用固定的随机种子np.random.seed(0)打乱样本后90% 用于训练、剩余 10% 用于评估。4.4 MacaquePosebioRxiv2020MacaquePose 是面向猕猴的无标记动作捕捉数据集图像与标注可从其官网下载。转换脚本为 parse_macaquepose_dataset.py官方也提供预处理好的 macaque_annotations。自行生成标注的步骤如下下载数据并解压到$MMPOSE/datammpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data │── macaque │-- annotations.csv │-- images │-- 01418849d54b3005.jpg │-- 0142d1d1a6904a70.jpg │-- 01ef2c4c260321b7.jpg │-- 020a1c75c8c85238.jpg │-- 020b1506eef2557d.jpg │-- ...运行python tools/dataset_converters/parse_macaquepose_dataset.py生成的标注文件保存在$MMPOSE/data/macaque/annotations。从 parse_macaquepose_dataset.py 源码看脚本读取annotations.csv其中每行包含图像名、关键点 JSON 字符串与分割多边形 JSON 字符串关键点采用 17 点人体风格布局鼻、双眼、双耳、双肩、双肘、双腕、双髋、双膝、双踝。面积通过鞋带公式Shoelace formula由分割多边形计算get_poly_areabbox 由分割多边形的极值坐标推出。由于官方未提供测试集脚本打乱后取12500 张图像用于训练其余用于评估。4.5 Human3.6MTPAMI2014Human3.6M 是 3D 人体姿态估计的标志性大规模数据集。从官网下载数据后放置到$MMPOSE/data/h36m然后运行预处理脚本 preprocess_h36m.pypython tools/dataset_converters/preprocess_h36m.py --metadata {path to metadata.xml} --original data/h36m该脚本会解压原始.tgz压缩包在**全帧率50 FPS与降频帧率10 FPS**两种采样率下提取相机参数和姿态标注。处理后的数据应具有如下结构mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data ├── h36m ├── annotation_body3d | ├── cameras.pkl | ├── fps50 | | ├── h36m_test.npz | | ├── h36m_train.npz | | ├── joint2d_rel_stats.pkl | | ├── joint2d_stats.pkl | | ├── joint3d_rel_stats.pkl | | ── joint3d_stats.pkl | ── fps10 | ├── h36m_test.npz | ├── h36m_train.npz | ├── joint2d_rel_stats.pkl | ├── joint2d_stats.pkl | ├── joint3d_rel_stats.pkl | ── joint3d_stats.pkl ── images ├── S1 | ├── S1_Directions_1.54138969 | | ├── S1_Directions_1.54138969_00001.jpg | | ├── S1_Directions_1.54138969_00002.jpg | | ├── ... | ├── ... ├── S5 ├── S6 ├── S7 ├── S8 ├── S9 ── S11从 preprocess_h36m.py 源码可以补充以下实现细节--metadata指向官网的metadata.xml脚本通过解析它获得受试者S1–S11、动作序列映射、动作名称与相机内参原始数据--original为原始数据集目录其中各受试者的.tgz文件需放在对应小写子目录如s1下可选参数--extracted与--processed可指定解压目录与输出目录默认与original_dir同级--sample-rate控制降采样倍率默认 5即 50 FPS → 10 FPS可通过修改该参数得到不同帧率的输出脚本从 CDF 文件中读取 32 关节的 2D/3D 姿态仅保留movable_joints指定的 17 个可动关节3D 坐标从毫米转换为米并以1.2的比例因子由 2D 关节坐标外扩生成 bbox 中心与尺度随后逐帧抽取视频帧保存为 JPG 图像训练集还会额外生成关节坐标的均值/标准差统计文件joint2d_stats.pkl、joint3d_stats.pkl及其相对坐标版本joint*_rel_stats.pkl供后续归一化使用。预处理完成后还需要将标注转换为 MMPose 兼容的 COCO 格式运行python tools/dataset_converters/h36m_to_coco.pyh36m_to_coco.py 脚本默认以tests/data/h36m/test_h36m_body3d.npz为输入、tests/data/h36m/h36m_coco.json为输出可通过--ann-file、--camera-param-file、--img-root、--out-file参数指定内部借助mmengine.track_parallel_progress并行处理将相机坐标系下的 3D 关键点通过 SimpleCameracamera_to_world投影回世界坐标系写入keypoints_3d字段并以_get_bbox_xywh依据 center/scale 还原出 xywh 格式的 bbox最终输出包含categories、images、annotations三部分的 COCO JSON。4.6 MPIICVPR2014对于 MPII 数据集训练和推理时预测结果默认保存为.mat格式。仓库提供了 mat2json.py 工具将该.mat转换为更易读的.json格式python tools/dataset_converters/mat2json ${PRED_MAT_FILE} ${GT_JSON_FILE} ${OUTPUT_PRED_JSON_FILE}其中三个位置参数分别为预测结果.mat文件路径、真值 JSON 文件路径如mpii_val.json、输出预测 JSON 文件路径。例如python tools/dataset_converters/mat2json work_dirs/res50_mpii_256x256/pred.mat data/mpii/annotations/mpii_val.json pred.json4.7 UBody2DCVPR2023UBody 是面向单阶段 3D 全身网格恢复的数据集论文One-Stage 3D Whole-Body Mesh Recovery with Component Aware Transformer其视频与标注可从 OSX 项目主页下载。下载并解压到$MMPOSE/data后组织为如下结构mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data │── UBody ├── annotations │ ├── ConductMusic │ ├── Entertainment │ ├── Fitness │ ├── Interview │ ├── LiveVlog │ ├── Magic_show │ ├── Movie │ ├── Olympic │ ├── Online_class │ ├── SignLanguage │ ├── Singing │ ├── Speech │ ├── TVShow │ ├── TalkShow │ └── VideoConference ├── splits │ ├── inter_scene_test_list.npy │ └── intra_scene_test_list.npy ├── videos │ ├── ConductMusic │ ├── Entertainment │ ├── Fitness │ ├── Interview │ ├── LiveVlog │ ├── Magic_show │ ├── Movie │ ├── Olympic │ ├── Online_class │ ├── SignLanguage │ ├── Singing │ ├── Speech │ ├── TVShow │ ├── TalkShow │ └── VideoConference仓库提供了 ubody_kpts_to_coco.py 脚本将视频抽帧为图像并按splits中的 scene 划分inter-scene 与 intra-scene 两种测试协议将标注拆分为 train/val 集python tools/dataset_converters/ubody_kpts_to_coco.py --data-root ${UBODY_DATA_ROOT}例如python tools/dataset_converters/ubody_kpts_to_coco.py --data-root data/UBody此外UBody 还提供全身关键点与 SMPL-X 参数两类标注仓库分别提供了 ubody_kpts_to_coco.py 与 ubody_smplx_to_coco.py 进行处理可与 configs/wholebody_2d_keypoint/ubody2d 等数据集配置配合使用。五、数据集处理的常见工作流总结将上述工具串联起来一套完整的自定义数据集处理流程如下标注使用任意标注工具如 Label Studio产出符合 COCO 规范的关键点标注必要时通过labelstudio2coco.py转换格式校验编写/复用配置文件通过tools/misc/browse_dataset.py以original与transformed两种模式可视化标注与增强结果确认加载正确转换对于公开数据集直接调用 tools/dataset_converters/ 下对应的解析脚本Animal-Pose、COFW、DeepPoseKit、Macaque、H36M、UBody 等将原始标注统一为 COCO 风格 JSON组织按$MMPOSE/data/dataset/规范组织图像与annotations/目录在配置文件中通过ann_file、data_prefix、metainfo指向它们快速开始对于平台已格式化的数据集可直接用mim download mmpose --dataset name一键下载省去人工转换。六、进一步阅读完整的标注到 COCO 转换教程Label Studio Annotations to COCO Script数据集准备全流程内置数据集、自定义数据集、混合数据集训练Prepare Datasets自定义数据集类实现细节Customize Datasets常用数据集格式转换脚本源码tools/dataset_converters/数据集可视化工具源码tools/analysis_tools/browse_dataset.py【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考