MMPose关键点标注半自动化指南:8000张图像两周交付的实操路径
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
手头有8000张待标注的人体图像,排期只有两周——靠纯人工点选,每天标200张已经是极限,交付大概率泡汤。MMPose 的标注工具链给了另一条路:用预训练姿态模型先"打底"生成伪标注,人工只做修正和抽检,把最耗时的点选环节压缩到原来的三分之一左右。这篇文章按一个真实项目的节奏,讲清楚怎么把这条半自动化标注流水线从零跑通。
能力地图:标注流水线由哪几块拼成
MMPose 本身不管你在哪个前端画点,它管的是"模型打底"和"格式落地"这两头。整个工具链拆成四个能力点,各管各的脏活:
- 模型推理打底(
MMPoseInferencer):一次调用自动完成"检测人体框 + 估计17个COCO关键点",默认人体检测器(RTMDet-m)已内置,不用自己拼检测器。它解决的是"第一批伪标注从哪来"的问题,单张图像推理在GPU上通常不到1秒。 - 候选框预生成(
tools/misc/generate_bbox_file.py):单独跑目标检测,把每张图的人体框和置信度落成 JSON,供 Top-Down 流程复用。它解决"姿态模型需要的人体框先验"问题,也可以反过来当人工框选前的参考线。 - 标注格式转换器(
tools/dataset_converters/labelstudio2coco.py):把 Label Studio 导出的 JSON 转成 COCO 格式的images/annotations/categories三元组,bbox 和 area 会自动从标注里回算。它解决"标注平台导出的东西训练框架不认"这个卡脖子环节。 - 数据集校验器(
tools/misc/browse_dataset.py):加载数据集配置后把标注画回原图上逐张检查。它解决"格式没错但标错了怎么发现"的问题,交付前的最后一道防线。
实操主线:从零跑通一条完整流程
先装环境。克隆仓库(git clone https://gitcode.com/GitHub_Trending/mm/mmpose)后创建 conda 环境装依赖,再用 mim 装 mmengine、mmcv、mmdet 三件套,这一步没坑就不展开了。下面按四个关键动作推进。
批量推一遍:先让模型把底稿画出来
不用手写推理循环。MMPoseInferencer支持直接传文件夹路径,检测模型自动加载,结果可落盘到pred-out-dir:
python demo/inferencer_demo.py data/raw_images/ \ --pose2d rtmpose-m \ --vis-out-dir data/vis_draft \ --pred-out-dir data/pred_json \ --kpt-thr 0.3 --show-progress--vis-out-dir把骨架画回原图,这一步强烈建议开:伪标注里"手点到了肩膀上"这类肉眼可见的错误,翻一遍可视化图就能抓出来,比事后翻 JSON 快得多。RTMPose 系列配置见 configs/body_2d_keypoint/rtmpose/,m 档是精度和速度的平衡点,打底够用。
框不够准就先补框
Top-Down 流程的效果很大程度取决于人体框质量。如果推完发现小目标、边缘人物框歪得离谱,用tools/misc/generate_bbox_file.py单独调一遍检测模型,调--score-thr和--nms-thr重新出一版框文件,再喂回推理流程。这个脚本依赖 mmdet 的DetInferencer,装好 mmdet 即可直接跑。
人工过筛难例:把修正预算花在刀刃上
全量 8000 张不需要人逐张过。做法是:把可视化结果导出,按"低置信度 + 遮挡 + 小目标"三类筛出难例子集(实测下来大约占 20%~30%),只修这部分;高置信度样本抽 10% 抽检即可。修正在 Label Studio 里做,标注接口要同时配KeyPointLabels、PolygonLabels、RectangleLabels三种组件,且关键点必须标在实例的最前面、矩形/多边形标在最后,转换器靠这个顺序把同实例的标注拼到一起——这是整个流程里最容易踩的一个约定,详细规则见 Label Studio 文档。
转换格式并抽检交付
修正完导出 JSON,一条命令转 COCO:
python tools/dataset_converters/labelstudio2coco.py \ config.xml data/labelstudio_corrected.json data/coco_final.json注意 Label Studio 会截断长文件名,图片要取导出 COCO 压缩包里的图片文件夹,别直接用上传目录的。转完之后别急着交付,跑一遍校验:
python tools/misc/browse_dataset.py <数据集配置> \ --phase train --max-item-per-dataset 50 --output-dir data/vis_check它会把关键点画回原图,--mode original看原始标注、默认模式看数据增强后的效果,标注错位、关键点数量对不上[数据集配置](https://link.gitcode.com/i/8de08202b700c8af2464d77c606fc5ad)里dataset_info声明的,都会一目了然。
进阶玩法:三个值得提前做的优化
按不确定性挑难例(主动学习式采样)。模型对每个关键点都会输出置信度,把伪标注里均值置信度最低的 20% 样本拎出来优先人工修正,修正完重训一轮模型再推下一批。适合标注周期长、可以分轮交付的项目——第二轮模型的打底质量会明显好于第一轮,人工修正量随之递减。起步不用写复杂代码,在伪标注 JSON 里按kpt_thr过滤排序即可。
双模型互检。一个快模型(RTMPose)打底,一个准但慢的模型(如 HRNet 系列 Top-Down 网络)在难例子集上复推一遍,两版关键点平均偏差超过阈值的样本标为"高疑"强制人修。适合对交付质量有量化验收(比如 PCK 或定位误差要求)的场景,成本是难例集上多一次推理,换标注返工率下降。
按场景切分任务包做分布式标注。万级以上数据别再按时间切任务,按场景类型(室内/室外、单人/多人密集)切分成独立任务包,不同标注员只负责同类场景,标注一致性(Kappa 系数)会好很多。进度监控用每包导出时间戳就能做,不必上重型工具。
避坑速查
| 高频现象 | 典型原因 | 解法 |
|---|---|---|
转换后num_keypoints全为 0 | Label Studio 标注顺序错,矩形标在关键点前面 | 重新修正难例集,严格"关键点→矩形/多边形"顺序,转换器靠顺序聚合同实例标注 |
| 导出的图片文件名和标注对不上 | Label Studio 截断长文件名,直接用了上传目录 | 用 Export COCO 压缩包里的 images 文件夹 |
| 小目标/边缘人物关键点整体偏移 | 人体框框歪或框太大,Top-Down 裁剪偏了 | 调低--score-thr重出框文件,或推理时加大输入分辨率 |
| 遮挡关节(如被手臂挡住的肘)乱飘 | 模型对不可见点也会给高置信度 | 该类点交人工修正,标注时按 COCO 可见性协议设 visible |
| 交付后训练报关键点数量不匹配 | dataset_info声明的顺序/数量与标注不一致 | 对照 数据集配置 里dataset_info逐项核对,转换前就定死标签顺序 |
选型收束:规模决定路线
给个直接的分档建议:千张以内纯人工标,成本可控还省了模型打底的钱;一千到一万张走本文这条"模型打底 + 难例修正"的半自动化流水线,人工只碰低置信度样本;上万张或要持续迭代的数据集,必须在半自动化之上叠主动学习采样和按场景切分的分布式标注,否则质量一致性撑不住。标注流水线的一次性搭建成本不高,但流程里"标注顺序约定"和"交付前抽样校验"这两步不能省——前者决定转换是否成功,后者决定你交付的到底是什么。
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考