ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MMPose 实战问题排查指南:安装版本兼容、数据准备与训练/评估/推理排错详解

MMPose 实战问题排查指南:安装版本兼容、数据准备与训练/评估/推理排错详解 MMPose 实战问题排查指南安装版本兼容、数据准备与训练/评估/推理排错详解【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本文基于 MMPose 官方 FAQ 文档docs/en/faq.md整理并深度扩充覆盖用户在安装、数据、训练、评估、推理五个环节最常遇到的问题MMCV/MMEngine 版本兼容矩阵、xtcocotools 安装失败、mmcv.ops缺失、自定义数据集缺少 bbox、MASTER_PORT冲突、预训练权重键不匹配、训练曲线实时可视化、日志不打印、预测关节点超出 bbox、CPU 推理与推理加速等。读完本篇后你可以对照仓库源码定位每一类报错的根因并直接复制可用的配置与命令完成修复。安装阶段版本兼容与依赖报错MMCV/MMEngine 版本不兼容AssertionError 提示最典型的安装期报错是导入 mmpose 时的断言失败AssertionError: MMCVxxx is used but incompatible. Please install mmcvxxx, xxx.该断言并非凭空而来。在 mmpose/init.py 中包在导入时即检查两个依赖mmcv_minimum_version 2.0.0rc4 mmcv_maximum_version 3.0.0 ... mmengine_minimum_version 0.6.0 mmengine_maximum_version 1.0.0 assert (mmcv_version digit_version(mmcv_minimum_version) and mmcv_version digit_version(mmcv_maximum_version)), \ fMMCV{mmcv.__version__} is used but incompatible. \ fPlease install mmcv{mmcv_minimum_version}, {mmcv_maximum_version}.也就是说只要环境中的 mmcv 或 mmengine 版本落在断言区间之外import mmpose就会立刻失败。报错信息本身已给出应安装的版本范围按提示重装对应依赖即可。官方文档给出了 mmdet、mmcv、mmpose 三条主线之间的对应关系mmdet 2.x mmpose 0.x mmcv 1.xmmdet 3.x mmpose 1.x mmcv 2.xMMPose 1.x 各版本对应的 MMCV/MMEngine 版本MMPose 版本MMCV / MMEngine 版本1.3.2mmcv2.0.1, mmengine0.9.01.3.1mmcv2.0.1, mmengine0.9.01.3.0mmcv2.0.1, mmengine0.9.01.2.0mmcv2.0.1, mmengine0.8.01.1.0mmcv2.0.1, mmengine0.8.01.0.0mmcv2.0.0, mmengine0.7.01.0.0rc1mmcv2.0.0rc4, mmengine0.6.01.0.0rc0mmcv2.0.0rc0, mmengine0.0.11.0.0b0mmcv2.0.0rc0, mmengine0.0.1MMPose 0.x 各版本对应的 MMCV 版本MMPose 版本MMCV 版本0.x通配mmcv-full1.3.8, 1.8.00.29.0 / 0.28.1mmcv-full1.3.8, 1.7.00.28.0 / 0.27.0 / 0.26.0 / 0.25.1mmcv-full1.3.8, 1.6.00.25.0 / 0.24.0 / 0.23.0 / 0.22.0 / 0.21.0mmcv-full1.3.8, 1.5.00.20.0 / 0.19.0 / 0.18.0 / 0.17.0 / 0.16.0mmcv-full1.3.8, 1.4.00.14.0 / 0.13.0mmcv-full1.1.3, 1.4.00.12.0 / 0.11.0 / 0.10.0 / 0.9.0mmcv-full1.1.3, 1.30.8.0 / 0.7.0mmcv-full1.1.1, 1.2排查顺序建议先确认自己安装的 mmpose 版本落在上表哪一行再核对环境中mmcv.__version__与mmengine.__version__是否满足区间约束。无法安装 xtcocotoolsxtcocotools 是 COCO 评测pck 等指标的底层依赖。官方 FAQ 给出两条路径先用 PyPI 直接安装pip install xtcocotools若 PyPI 安装失败则从 xtcocoapi 项目源码编译安装克隆仓库后执行python setup.py install。这里还有一个仓库层面的细节在 setup.py 中解析依赖时若检测到当前运行于 Colab 环境ON_COLAB会自动把xtcocotools的依赖项替换为 git 源码地址因为 Colab 平台与预编译的 PyPI 轮子存在兼容问题。可以推断如果你在类似受限平台无预编译轮子、需要本地编译 C 扩展上安装 mmpose遇到 xtcocotools 失败时采用源码编译方案是与官方打包逻辑一致的做法。No matching distribution found for xtcocotools1.6该错误通常意味着当前 Python 环境找不到可用的预编译轮子。官方给出的解法先安装 Cythonpip install cython再从源码安装 xtcocotools即 xtcocoapi 仓库python setup.py install。No module named mmcv.ops / No module named mmcv._ext这两个报错说明环境里存在一个残缺的 mmcv只安装了纯 Python 部分或旧版 mmcv-full缺少编译后的 C/CUDA 扩展。修复步骤用pip uninstall mmcv彻底卸载现有 mmcv按照 mmcv 官方安装文档重新安装完整版 mmcv包含编译后的mmcv/ops与mmcv/_ext模块。数据阶段bbox 缺失与检测框文件自定义数据集没有 bounding box 标注怎么办MMPose 的 Top-down 模型需要人体 bbox 来裁剪输入。若你的自定义数据集没有 bbox 标注官方 FAQ 给出的方案是以能紧贴包围全部关键点的最小矩形框作为该人的 bbox。这是从关键点几何直接推导的降级方案不需要额外训练检测器适合先跑通流程。COCO_val2017_detections_AP_H_56_person.json 是什么没有它能否训练该文件包含 COCO 验证集上检测得到的人体 bbox由 FasterRCNN 生成。它的作用是让评估模拟真实部署场景真实推理时输入是检测框而非真值框。在配置文件的val_dataloader.dataset中有两种选择用真值框评估设置bbox_fileNone用检测框评估模型的泛化能力设置bbox_fileCOCO_val2017_detections_AP_H_56_person.json。因此训练与评测并不强制依赖该文件但两种设置对应的指标含义不同检测框模式下指标会偏低因为它额外包含了检测误差。训练阶段端口冲突、权重加载与日志问题RuntimeError: Address already in use分布式训练默认占用固定端口同一机器上并发跑多个任务时容易冲突。解法是显式指定MASTER_PORT环境变量。官方 FAQ 给出的 Slurm 场景完整示例MASTER_PORT29517 GPUS16 GPUS_PER_NODE8 CPUS_PER_TASK2 ./tools/slurm_train.sh train res50 configs/body_2d_keypoint/topdown_regression/coco/td-reg_res50_8xb64-210e_coco-256x192.py work_dirs/res50_coco_256x192对照 tools/slurm_train.sh可以看到该脚本默认GPUS为 8、GPUS_PER_NODE为 8、CPUS_PER_TASK为 5并通过srun将任务分发到多节点后调用python -u tools/train.py。因此只需在命令行前附加MASTER_PORTXXXXX即可避免端口抢占。加载预训练权重时出现 Unexpected keys in source state dict这是正常现象官方 FAQ 明确说明预训练分类网络与姿态估计网络结构不同例如分类头在姿态模型中并不存在因此源权重中有一部分键在当前模型里找不到对应层属于预期行为。官方 FAQ 同时指出在训练加载时这些意外键会被忽略不影响训练。如果你想把用已有姿态模型权重做 backbone 预训练做规范可参考 docs/en/migration.md 中 Migration - Step3: Model - Backbone 的说明。如何实时可视化训练精度/损失曲线修改配置文件中的vis_backends同时启用本地与 TensorBoard 后端vis_backends [ dict(typeLocalVisBackend), dict(typeTensorboardVisBackend) ]作为对照仓库默认配置 configs/base/default_runtime.py 中只启用了LocalVisBackendTensorboardVisBackend与WandbVisBackend处于注释状态visualizer则统一绑定这些后端vis_backends [ dict(typeLocalVisBackend), # dict(typeTensorboardVisBackend), # dict(typeWandbVisBackend), ] visualizer dict( typePoseLocalVisualizer, vis_backendsvis_backends, namevisualizer)更多可视化细节可参阅 docs/en/user_guides/visualization.md。日志信息不打印Log info is NOT printed默认日志间隔为 50 个迭代短训练或调试时看起来像没有日志。官方 FAQ 的解法是把default_hooks中 logger 的interval调小例如从 50 改为 1# hooks default_hooks dict(loggerdict(interval1))这与 configs/base/default_runtime.py 中default_hooks dict(..., loggerdict(typeLoggerHook, interval50), ...)的默认值一一对应改小 interval 即可让每个迭代都打印日志。评估阶段MPII 测试集与关节点越界如何评估 MPII 测试集由于 MPII 测试集不提供 ground-truth 标注无法在本地计算指标。若想在测试集上得到官方分数需要将测试过程中生成的pred.mat通过邮件上传至 MPII 官方评测服务器流程遵循 MPII 官方评测指南。为什么 Top-down 2D 预测的关节点会落在 bbox 之外这是设计使然而非 bug。官方 FAQ 解释模型并不直接用 bbox 裁剪图像而是先把 bbox 转换为中心 尺度表示且尺度会乘以一个 1.25 的系数以纳入更多上下文当 bbox 的宽高比与模型输入比例例如 256x192不一致时还会进一步调整 bbox。这一机制在源码中可以直接印证。mmpose/datasets/transforms/common_transforms.py 中的GetBBoxCenterScale变换负责把[x, y, w, h]形式的 bbox 转为中心与尺度其 padding 系数默认正是 1.25class GetBBoxCenterScale(BaseTransform): ... Args: padding (float): The bbox padding scale that will be multilied to bbox_scale. Defaults to 1.25 def __init__(self, padding: float 1.25) - None: super().__init__() self.padding padding因此预测关节点出现在原始 bbox 外是裁剪区域本来就比 bbox 大的必然结果在做可视化对齐或结果后处理时应以放大后的中心尺度框而非原始 bbox作为坐标系参考。推理阶段CPU 运行、加速与关键点索引如何在 CPU 上运行 MMPose官方 FAQ 的答复很直接演示脚本加上--devicecpu参数即可。以 demo/image_demo.py 为例其参数解析默认使用--device cuda:0demo/image_demo.py传入cpu即完成设备切换python demo/image_demo.py --config config --checkpoint ckpt --input image --devicecpu如何加速推理官方 FAQ 给出两条主要手段关闭翻转测试在配置中把flip_test设为False。翻转测试会对左右翻转图像再做一次前向并融合结果代价约翻倍。从源码结构看flip_test是从各 pose estimator 的test_cfg读取的例如 mmpose/models/heads/coord_cls_heads/rtmcc_head.py、mmpose/models/heads/coord_cls_heads/rtmw_head.py 中均有test_cfg.get(flip_test, False)的分支而仓库的模型配置中普遍以test_cfgdict(flip_testTrue, ...)的形式开启它如 configs/animal_2d_keypoint/topdown_heatmap/ak/td-hm_hrnet-w32_8xb32-300e_animalkingdom_P1-256x256.py。将该项改为False即可省去一次前向。更换更轻量的人体检测器对 Top-down 模型整条流水线的耗时往往被人体检测器主导选型时应参照 MMDetection 模型库中更轻量的检测器例如 RTMDet 系列以检测速度换取整体吞吐。每个关键点索引的定义在哪里查官方 FAQ 指引查看你所用模型训练数据对应的数据集元信息文件meta information file其中的keypoint_info键定义了每个关键点的名称、颜色、类型与左右配对关系。这些文件位于 configs/base/datasets/ 目录下。例如 configs/base/datasets/coco.py 中索引 0 为nose、5 为left_shoulder、16 为right_ankle每个关键点还带有swap字段描述水平翻转时的左右映射这正是翻转增强与翻转测试结果融合所依赖的元数据同文件中的skeleton_info与joint_weights、sigmas则分别服务于骨架绘制、PCK 评估权重与 AP 的 σ 计算。小结一份按环节索引的排错速查表环节症状处置依据安装MMCVxxx is used but incompatible按上表重装 mmcv/mmengine 到对应区间mmpose/init.py安装xtcocotools 安装失败 / 无匹配轮子先pip install cython再源码编译安装setup.py安装No module named mmcv.ops/mmcv._ext卸载后重装完整版 mmcv官方 FAQ数据自定义数据集无 bbox用包围全部关键点的最小框替代官方 FAQ数据缺少 COCO 检测框文件bbox_fileNone用真值框评估官方 FAQ训练Address already in use设置MASTER_PORTXXXtools/slurm_train.sh训练Unexpected keys in source state dict预期行为训练时忽略官方 FAQ训练想实时看曲线/日志启用TensorboardVisBackend调小 loggerintervalconfigs/base/default_runtime.py评估关节点超出 bbox裁剪框 中心尺度框 x 1.25 padding属正常common_transforms.py推理CPU 推理 / 提速--devicecpuflip_testFalse换更快检测器demo/image_demo.py推理关键点索引含义查对应数据集 meta 文件中的keypoint_infoconfigs/base/datasets/coco.py【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表