
MMPose 中的 Debias IPR去除积分姿态回归偏置的算法原理与实战配置【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmposeDebias IPRRemoving the Bias of Integral Pose RegressionICCV 2021针对积分姿态回归Integral Pose Regression, IPR中因 softmax 后取期望而引入的固有偏置提出了补偿方案。本文以该论文卡片为核心结合 MMPose 仓库中的 codec、head 实现与真实训练配置完整讲解偏置来源、补偿公式、源码级实现以及可复现的配置与训练流程帮助你理解并直接使用这一算法。论文出处与引用信息该算法卡片位于仓库 docs/src/papers/algorithms/debias_ipr.md由 Gu Kerui、Yang Linlin 与 Yao Angela 发表于 ICCV 2021论文题为Removing the Bias of Integral Pose Regression。论文的引用信息如下inproceedings{gu2021removing, title{Removing the Bias of Integral Pose Regression}, author{Gu, Kerui and Yang, Linlin and Yao, Angela}, booktitle{Proceedings of the IEEE/CVF International Conference on Computer Vision}, pages{11067--11076}, year{2021} }核心问题热图检测与回归之间的差异以及 IPR 的固有偏置论文的出发点是一个长期存在的疑问基于热图的检测方法heatmap-based detection在 2D 人体姿态估计中长期占据主导地位尽管直接回归regression在直觉上更直接。积分回归Integral Regression方法的引入在架构层面通过隐式热图implicit heatmap把两条路线拉得非常接近从而引发一个关键问题检测真的优于回归吗作者分析了两条路线的核心剩余差异——监督方式supervision的不同并在此过程中发现积分姿态回归存在一个潜在偏置underlying bias其来源是在 softmax 函数之后取期望expectation。这个偏置的含义是softmax 后的概率分布经过期望计算得到的坐标并不等于真实的关键点位置期望值会系统性偏向某一方向从而在几乎所有 2D 姿态估计基准上都带来精度损失。针对该偏置论文提出一种补偿方法compensation method并验证其在所有 2D 姿态估计基准上都能提升积分回归的精度。在此基础上论文进一步提出一个将检测与偏置补偿回归结合的简单方法以很少的额外组件显著超过当时的 SOTA 基线。偏置补偿的数学原理与 MMPose 源码实现补偿公式从 MMPose 的源码 mmpose/models/heads/regression_heads/integral_regression_head.py 可以看到补偿逻辑的精确实现。head 首先对特征图做带温度参数beta的展平 softmax得到归一化热图heatmaps self._flat_softmax(feats * self.beta) pred_x self._linear_expectation(heatmaps, self.linspace_x) pred_y self._linear_expectation(heatmaps, self.linspace_y) if self.debias: B, N, H, W feats.shape C feats.reshape(B, N, H * W).exp().sum(dim2).reshape(B, N, 1) pred_x C / (C - 1) * (pred_x - 1 / (2 * C)) pred_y C / (C - 1) * (pred_y - 1 / (2 * C))其中_linear_expectation在 integral_regression_head.py 中实现即对归一化热图与坐标网格逐元素相乘后求和soft-argmax 的标准做法def _linear_expectation(self, heatmaps: Tensor, linspace: Tensor) - Tensor: B, N, _, _ heatmaps.shape heatmaps heatmaps.mul(linspace).reshape(B, N, -1) expectation torch.sum(heatmaps, dim2, keepdimTrue) return expectation_flat_softmax在 integral_regression_head.py 中将 (B, N, H, W) 的特征图展平为 (B, N, H*W) 后在最后一个维度做 softmaxdef _flat_softmax(self, featmaps: Tensor) - Tensor: _, N, H, W featmaps.shape featmaps featmaps.reshape(-1, N, H * W) heatmaps F.softmax(featmaps, dim2) return heatmaps.reshape(-1, N, H, W)当debiasTrue时坐标按如下方式修正pred_x C / (C - 1) * (pred_x - 1 / (2 * C))其中C sum(exp(feats))是特征图逐元素指数后的总和。从源码结构看这一修正项正是论文中补偿 softmax 期望偏置的具体形式用归一化常数C消去 softmax 分母带来的系统性偏移1 / (2*C)并以C / (C-1)重新缩放使期望在无偏情况下等于真实坐标。偏置补偿前后的pred_x/pred_y与补偿后的coords一起返回供损失计算与解码使用。debias与beta两个关键超参数在 integral_regression_head.py 的构造函数中两个参数直接控制偏置补偿行为debias (bool)是否移除积分姿态回归的偏置默认Falsebeta (float)softmax 中的平滑参数温度系数默认1.0。beta通过_flat_softmax(feats * self.beta)作用于网络输出beta越大softmax 后的分布越尖锐接近 argmax坐标更偏向热图峰值beta越小分布越平滑。在 Debias IPR 的配置中beta被设置为10.0。此外IntegralRegressionHead通过simplebaseline_head一个标准的 HeatmapHead 结构默认 3 层(256, 256, 256)反卷积把骨干特征图放大到in_featuremap_size * 2**num_deconv的尺寸见 integral_regression_head.py随后经 1x1 卷积得到每个关节点一张特征图。DSNTHead联合热图监督的变体仓库还提供了 DSNTHead它是IntegralRegressionHead的子类用于需要热图监督的 DSNT 方案。其独特之处在于多了一个lambda_t (int)参数默认-1当lambda_t 0时超过该 epoch 后丢弃热图监督损失只保留坐标损失见 dsnt_head.pyloss默认使用MultipleLossWrapper组合SmoothL1Loss坐标回归损失与JSDiscretLoss热图分布损失在loss()中同时接收预测坐标与预测热图见 dsnt_head.py。数据编码IntegralRegressionLabel codecDebias IPR 的训练数据通过 IntegralRegressionLabel codec 生成它组合了两个底层 codecMSRAHeatmap生成高斯热图支持 DarkPose 的unbiased编码与blur_kernel_size模糊核RegressionLabel将关键点坐标归一化到 [0, 1] 区间作为回归标签见 regression_label.py。关键参数见 integral_regression_label.pyinput_size (tuple)输入图像尺寸 [w, h]heatmap_size (tuple)热图尺寸 [W, H]sigma (float)高斯热图的 sigma 值unbiased (bool)是否使用 DarkPose 无偏编码默认Falseblur_kernel_size (int)DarkPose 热图调制的高斯模糊核大小默认11sigma 与核大小遵循经验公式sigma 0.3*((ks-1)*0.5-1)0.8normalize (bool)是否归一化热图默认True。encode()在 integral_regression_label.py 中同时输出三类标签keypoint_labels归一化回归坐标形状 (N, K, D)、heatmaps归一化后的高斯热图形状 (K, H, W)与keypoint_weights关键点权重形状 (N, K)。当normalizeTrue时每个热图会除以自身的总和加上1e-24防止除零if self.normalize: val_sum heatmaps.sum(axis(-1, -2)).reshape(-1, 1, 1) 1e-24 heatmaps heatmaps / val_sum该 codec 已在 mmpose/codecs/init.py 中注册其编码、解码与闭环校验均有对应测试用例见 tests/test_codecs/test_integral_regression_label.py其中test_encode、test_decode、test_cicular_verification分别验证标签生成、坐标解码与编解码闭环。在 MMPose 中的实战配置Debias IPR ResNet-50仓库提供了完整的可训练配置 configs/body_2d_keypoint/integral_regression/coco/ipr_res50_debias-8xb64-210e_coco-256x256.py其要点如下。codec 与模型结构# codec settings codec dict( typeIntegralRegressionLabel, input_size(256, 256), heatmap_size(64, 64), sigma2.0, normalizeTrue) # model settings model dict( typeTopdownPoseEstimator, data_preprocessordict( typePoseDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue), backbonedict( typeResNet, depth50, ), headdict( typeDSNTHead, in_channels2048, in_featuremap_size(8, 8), num_joints17, debiasTrue, beta10., lossdict( typeMultipleLossWrapper, losses[ dict(typeSmoothL1Loss, use_target_weightTrue), dict(typeJSDiscretLoss, use_target_weightTrue) ]), decodercodec), test_cfgdict( flip_testTrue, shift_coordsTrue, shift_heatmapTrue, ), init_cfgdict( typePretrained, checkpointhttps://download.openmmlab.com/mmpose/ pretrain_models/td-hm_res50_8xb64-210e_coco-256x192.pth))该配置使用DSNTHead而非纯IntegralRegressionHead是因为它同时输出坐标与热图从而可以叠加SmoothL1Loss坐标与JSDiscretLoss热图分布双路监督——这正是论文中检测 偏置补偿回归结合思路的工程化体现。与纯 IPR 相比开启 debias 只需设置debiasTrue热图监督则通过DSNTHead与MultipleLossWrapper实现。对照实验可参考同目录下的 ipr_res50_dsnt-8xb64-210e_coco-256x256.pydebias保持默认False。值得注意的细节输入 256x256codec 的heatmap_size(64, 64)ResNet-50 骨干输出 8x8 特征图经 3 层反卷积每层放大 2 倍得到 64x64 的预测热图与 codec 尺寸一致init_cfg使用预训练的td-hm_res50权重初始化骨干加速收敛测试阶段开启flip_test水平翻转 TTAshift_coords与shift_heatmap控制翻转后的坐标/热图偏移修正对应源码 integral_regression_head.py 中的 TTA 分支。训练超参# runtime train_cfg dict(max_epochs210, val_interval10) # optimizer optim_wrapper dict(optimizerdict(typeAdam, lr5e-4)) # learning policy param_scheduler [ dict( typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # warm-up dict( typeMultiStepLR, begin0, endtrain_cfg[max_epochs], milestones[170, 200], gamma0.1, by_epochTrue) ] # automatically scaling LR based on the actual training batch size auto_scale_lr dict(base_batch_size512)训练 210 个 epoch使用 Adam 优化器、lr5e-4前 500 iter 线性 warm-up并在第 170/200 epoch 各衰减 10 倍学习率auto_scale_lr以base_batch_size512为基准自动缩放学习率。数据与评估配置基于 COCO 数据集data_modetopdowndata_rootdata/coco/训练管线依次执行LoadImage - GetBBoxCenterScale - RandomFlip - RandomHalfBody - RandomBBoxTransform - TopdownAffine - GenerateTarget(encodercodec) - PackPoseInputs验证集使用CocoMetric评估default_hooks以coco/AP为准保存最优 checkpointdefault_hooks dict(checkpointdict(save_bestcoco/AP, rulegreater))训练与测试命令按仓库标准流程参考 tools/train.py 与 tools/test.py单卡训练与测试命令为# 训练 python tools/train.py configs/body_2d_keypoint/integral_regression/coco/ipr_res50_debias-8xb64-210e_coco-256x256.py # 测试 python tools/test.py configs/body_2d_keypoint/integral_regression/coco/ipr_res50_debias-8xb64-210e_coco-256x256.py checkpoint路径多卡训练可使用仓库自带的 tools/dist_train.sh例如bash tools/dist_train.sh config gpu数。实验结果偏置补偿带来的提升仓库 configs/body_2d_keypoint/integral_regression/README.md 汇总了 COCO 上的三种对照模型检测器在 COCO val2017 上的人体 AP 为 56.4ModelInput SizeAPAR详情ResNet-50Debias-IPR256x2560.6750.765resnet_debias_coco.mdResNet-50DSNT256x2560.6740.764resnet_dsnt_coco.mdResNet-50IPR256x2560.6330.730resnet_ipr_coco.md详细的完整指标含 AP50 / AP75 / AR50见 resnet_debias_coco.mdArchInput SizeAPAP50AP75ARAR50debias-ipr_resnet_50256x2560.6750.8720.7400.7650.928从这三组对照可以清晰看到论文主张的两个结论在 MMPose 中的验证其一IPR0.633 AP相对 DSNT0.674 AP存在明显差距且与检测类方法相比精度偏低其二在 DSNT 基础上加入debiasTrue的偏置补偿后0.675 AP精度得到进一步提升AR 也从 0.764 提升到 0.765印证了论文中补偿方法能改善积分回归精度的论断。小结Debias IPR 从热图检测与积分回归在监督方式上的差异出发识别出 softmax 后取期望这一步骤引入的固有偏置并提出以归一化常数为基础的闭式补偿。MMPose 将其落地为一套完整可复现的管线算法层IntegralRegressionHead 中的debias参数实现了论文补偿公式beta控制 softmax 平滑程度标签层IntegralRegressionLabel 同时产出归一化坐标标签与归一化高斯热图支持 DSNT 式联合监督配置层ipr_res50_debias-8xb64-210e_coco-256x256.py 提供了开箱即用的训练配置与 resnet_ipr_coco.md、resnet_dsnt_coco.md 形成 IPR / DSNT / Debias-IPR 三组严谨的消融对照。对希望在姿态估计中使用回归类方案的用户Debias IPR 提供了一条兼顾回归的简洁性与接近检测精度的成熟路径。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考