阅读笔记——Distribution-Aware Coordinate Representation for Human Pose Estimation

该博客探讨了关键点检测模型中坐标编码和解码的误差对定位精度的影响。作者提出了利用高斯分布假设改进坐标编码方法,通过避免量化过程来减少误差。实验结果显示,这种改进在COCO数据集上使用HRNet网络时能有效提升关键点定位的准确性,且不增加计算负担,具有实际应用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

在关键点检测模型中,首先要将高分辨图像缩放到低分辨以产生特征热图(encoder),随后推理中要将低分辨特征热图中的响应位置放大到输入图像以产生最终的关键点结果(decoder)。文章认为,在这个缩放过程中,坐标值的转换存在误差,影响了关键点定位精度。

方法

坐标编码

经典的编码方法,是在给定特征图响应极大值位置和次极大值位置之后,按照如下公式,在特征图上计算出次像素级的坐标精度:

在这里插入图片描述

这意味着直接将最大响应位置向次最大响应位置移动 0.25 个距离以在特征图上获取次像素级定位精度。

随后将 p 缩放 λ 倍获得输入图像上的对应坐标:

在这里插入图片描述

只考虑最大响应位置和次最大响应位置的编码方式,有可能造成定位不准确。

作者提出假设预测特征热图也应当符合高斯分布,因此特征热图可以用下式表示:

在这里插入图片描述

其中 x 是预测特征热图中像素位置,μ 是真实值位置,也就是需要估计的值。

对上式取对数:

在这里插入图片描述

由于真实值和预测值相隔很近,根据泰勒展开:

在这里插入图片描述

由于 μ 是真实极大值位置,因此在 x=μ 时的一阶导应该为 0,即:

在这里插入图片描述
在这里插入图片描述

可以求出:

在这里插入图片描述

这其中的一阶导和二阶导都可以从特征图中直接求取。

坐标解码

在关键点坐标由高分辨输入图像转换到低分辨特征图时,给定一个降采样因子,坐标转换公式就是:

在这里插入图片描述

为了在特征图上产生 2D 高斯 GT 分布,通常将浮点坐标 g’ 进行量化:

在这里插入图片描述

随后以 g’’ 为中心产生一个高斯 GT 分布:

在这里插入图片描述

上述的量化过程也会产生误差,因此在产生 GT 高斯分布时,不再进行量化,而是直接用 g’ 产生高斯热图。

实验结果

使用 COCO 数据集合 HRNet 网络的实验结果表明,这两种方法对于提升关键点定位精度,都有积极作用。实际中也观察到了相似的结论。尤其是这种方法,不需修改当前模型,不会增大模型推理的计算量,因此比较有实际意义。

在这里插入图片描述

DeepCut 是一种用于多人人体姿态估计的经典方法,最初由 Pishchulin 等人在 2015 年提出。该方法的核心思想是利用多阶段图模型来解决复杂的姿态估计问题,并通过深度学习技术提取特征[^6]。 以下是 DeepCut 的一些关键特性及其对应的论文信息: ### 关键特性 - **多人检测与分割**:DeepCut 提出了一个多阶段图模型,能够处理图像中的多个目标并进行精确的姿态估计。 - **联合优化框架**:它采用了一种联合优化策略,在同一框架下完成目标检测和姿态估计的任务。 - **深度卷积网络**:DeepCut 利用了深度卷积神经网络(CNN)作为其核心组件之一,从而显著提高了性能。 ### 论文详情 DeepCut 的原始论文名为《DeeperCut: A Deeper, Stronger, and Faster Multi-Person Pose Estimation》[^7]。这篇论文发表于计算机视觉领域的重要会议 ECCV 2016 上。可以通过以下链接访问完整的 PDF 文件以及相关资源: - 原始论文地址: [https://arxiv.org/abs/1511.06897](https://arxiv.org/abs/1511.06897) 此外,如果需要进一步了解其他改进版本或者后续工作,可以参考 Distribution-Aware Coordinate Representation 方法,这种方法在解码过程中引入了分布感知机制以减少量化误差[^4]。 对于实际应用开发而言,“lightweight-human-pose-estimation.pytorch”项目提供了轻量级的人体姿态估计算法实现方案,适合部署到边缘设备上运行[^2]。 ```python import torch from models.with_mobilenet import PoseEstimationWithMobileNet from modules.keypoints import extract_keypoints, group_keypoints from val import normalize, pad_width def load_model(model_path): net = PoseEstimationWithMobileNet() checkpoint = torch.load(model_path, map_location='cpu') net.load_state_dict(checkpoint) return net.eval() model = load_model('checkpoint_iter_370000.pth') # 替换为你下载好的权重路径 ``` 上述代码片段展示了如何加载预训练模型来进行快速而精准的人体姿态估计操作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇哇九号

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值