Hrnet_DEKR 简单理解和计算评价指标

介绍DEKR算法,采用自适应卷积与多分支结构实现人体关键点的精确回归,解决了自底向上姿态估计中的关键点聚类问题。在COCO和CrowdPose数据集上取得优秀结果。

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

HRNet-DEKR

最近在搞bottom-up方法的研究,这个速度有点慢,后面在研究其他的bottom-up 方法。

一、摘要

在本文中对从图像中估计人体姿势的自底向上范式感兴趣。作者研究了以前不如关键点检测和分组框架的密集关键点回归框架。作者的动机是准确地回归关键点位置需要学习专注于关键点区域的表示。作者提出了一种简单而有效的方法,称为解缠(解耦)关键点回归(DEKR)。作者通过逐像素空间变换器采用自适应卷积来激活关键点区域中的像素,并相应地从中学习表示。作者使用多分支结构进行单独的回归:每个分支通过专用的自适应卷积学习一个表示并回归一个关键点。由此产生的解开表示能够分别关注关键点区域,因此关键点回归在空间上更准确。并在两个基准数据集 COCO 和CrowdPose 上实现了出色的自底向上姿态估计结果。

二、DEKR 解构式关键点回归:算法思想

DEKR独立地对每个关键点进行特征提取和回归,实现了关键点之间的解耦,犹如其名——解构式关键点回归,而这种做法的成功则得益于其中的重要思想:回归关键点坐标的特征必须集中注意到关键点周围的区域。

主要包含一下两点

(1)传统卷积只能激活中心像素及其周围的邻域点,于是,DEKR设计了一种自适应卷积,它能够使得像素点的激活范围不再局限于其邻域,而是集中在关键点周围。

(2)为了使得每个关键点的预测更加精准,就应该更有针对性地对各个关键点进行特征提取和回归。于是,DEKR采用了多分支结构,每个分支与每个关键点一一对应,利用自适应卷积专心学习关键点特征,然后基于这些特征去回归关键点的位置。这些并行的分支结构都是一样的,但是各自有独立的参数,互相“井水不犯河水”。这样就实现了各个关节点之间的解耦。

将上面的两点结合起来大致的框架是:

图3. 解构式关键点回归。 每个分支通过两个自适应卷积从主干输出的特征图的分区中学习一个关键点的表示,并分别使用 1×1 卷积回归每个关键点的 2D 偏移。 这是三个关键点的说明,特征图被分成三个分区,每个分区输入一个分支。 在我们关于 COCO 姿态估计的实验中,特征图被分为 17 个分区,并且有 17 个分支用于回归 17 个关键点。

三.自适应卷积

自适应卷积是一个很广泛的概念,没有准确的定义,CVPR2019 通用网络之内容自适应卷积 - 知乎这里的定义是只要进行了一个额外的k核操作,都可以叫做自适应卷积,k核可以使各种操作,比如是RGB分布计算得到的。结合DEKR可一说这里的k核是仿射变换得到的。

一个正常的卷积(例如,3×3卷积)只能看到中心像素 q 附近的像素。 几个正常卷积的序列可能会看到离中心像素更远的像素,这些像素可能位于关键点区域,但可能不会聚焦并高度激活这些像素。 我们采用自适应卷积来学习专注于关键点区域的表示。 自适应卷积是对普通卷积(例如 3×3 卷积)的修改。

偏移量可以通过额外的正常 3 × 3 卷积以非参数方式(如可变形卷积)或以参数方式将空间Transformer网络 [26] 从全局方式扩展到像素方式来估计。 我们采用后者并为每个像素估计一个仿射变换矩阵 Aq (∈R2×2) 和一个平移向量 t (∈R2×1)。 然后 Gqs = AqGt + [t t ... t]。 Gt 表示规则的 3×3 位置(意思是在变换后的空间中进行普通卷积)

这套仿射变换的具体做法是:

注:自适应卷积的目的是使得像素的激活点不集中于其周围,而是更广大的范围,也就是说尽可能的直接看到关键点;自适应卷积回归的是该像素与关键点的x/y偏移量,这也是直接让模型的自始至终对关键点建模的一种操作。因为DEKR的直接回归本身对于关键点的建模能力较弱(相对于自上而下方式而言),所以他需要这种强烈的直接信息编码先验。

关于Heatmap:

如果一个正样本(x,y)处于多个关键点的高斯核半径范围内,那么它应该负责预测哪个关键点?标签值该如何设置?最直接的做法:选择最近的那个关键点去预测。那么,对应的标签值就是最大的那个。因为由高斯函数的公式可知,距离中心越近函数值越大。

虚拟中心点:

另外,还有个重点需要说明下,就是DEKR不仅为各类关键点(COCO是17类)制作了heatmap,而且还为一种被称为中心点的虚拟关键点(后简称虚拟中心点)制作了heatmap。这种虚拟中心点与人一一对应,其坐标值就是每个人所有关键点的坐标均值。这个虚拟中心点很关键,因为接下来的offset标签主要是基于它进行分配的。

关于offset:

其实这部分的思想和以上Heatmap差不多,只不过不是基于高斯核的方式,而是直接设定一个距离 r ,以虚拟中心点为中心, 横、纵坐标与虚拟中心点的距离都不超过 r的位置(x,y) 则为正样本,其标签值由该位置坐标与各个关键点(COCO的话就是17个)的坐标作差计算得出:

如果一个正样本(x,y)处于多个虚拟中心点(也就是对应多个人)的有效范围内,那么它该回归哪个人的关键点位置呢?DEKR的做法是:选择面积最小的人去回归。至于每个人的面积,则是根据其中关键点之间的最远距离来计算。这也是在解决自下而上方式中本质存在的问题:如何对关键点聚类于同一个人身上。

为何这里不能像上述Heatmap部分那样选择最近的关键点进行回归呢?如果那样的话,一个正样本就可能回归多个人的关键点位置,而正样本是要被模型看作(学习)虚拟中心点的位置,其与人是一一对应的,也是就说,在宏观意义上,它被视作一个人。

因此,DEKR的做法,就能保证正样本回归的关键点都是属于同一个人的。另外,由于在图像中,远近高低各人的尺度不一,因此直接回归绝对坐标的差值是不理智的,易造成模型倾向于大(尺度)人物(大尺度容易有大差值,大差值产生大loss)。于是,上述提到的人物面积就有作用了!面积大小即尺度大小,于是可以使用面积对坐标差值进行归一化,这样就消除了尺度带来的影响。当然,由于面积是距离的二次方,因此还需要先对它开个根号。

  • 数据集和评价指标

模型在两个数据集上进行训练: COCO 和 CrowdPose。

train2017集合包含5.7万张图片和15万个带有17个关键点标注的person实例,val2017集合包含5千张图片,testdev2017集合包含2万张图片。在train2017集合上训练模型,并在val2017和test-dev2017集合上给出结果。评价指标遵循标准的coco评估指标,并使用基于oks的指标进行COCO姿态估计。

训练集包含了关键点和中心热图以及偏移图。

每个图像的groundtruth keypoint heatmaps H∗ 包含 K 个map,每个map对应一个关键点类型。作者按照 AE 中的方法构建它们:使用以每个 groundtruth 关键点周围的点为中心的高斯函数分配热值。中心热图的构造类似,如下所述。

Groundtruth偏移图:每个图像的groundtruth偏移图O∗由所有姿势{P1,P2,···,PN}构成。我们以第 n 个姿势 Pn 为例,其他相同。我们计算中心位置和偏移量 Tn = {pn1 - ¯pn, pn2 - ¯pn, ··· , pnK - ¯pn} 作为对应于中心位置。我们使用扩展方案将中心点扩大到中心区域:{m1n,m2n,···,mMn},它们是半径为 4 的中心点¯pn 周围的中心位置,并相应地更新偏移量。不在区域中的位置没有偏移值

每个中心位置 m 都有一个置信度值 c,表示它是中心的置信度,并使用形成 groundtruth 中心热图 C*2 的方式计算。不在该区域内的位置的热值为零。

训练数据增强,包括随机旋转([−30°,30°])、随机缩放([0.75,1.5])和随机平移([−40,40])。以随机翻转为训练样本,对HRNet-W32进行512 × 512的图像裁剪,对HRNet-W48进行640 × 640的图像裁剪。使用Adam优化器。基础学习率设置为1e−3,在第90和120个epoch分别降为1e−4和1e−5。训练140个epoch

测试: 将图像的短边调整为512/640,并保持高度和宽度之间的长宽比,并通过平均热图和原始图像和翻转图像的像素级关键点回归来计算热图和姿势位置。测试分为单尺度和多尺度,在多尺度测试中采用了0.5、1、2三个尺度。我们在三个尺度上平均三个热图,并从三个尺度收集回归结果作为候选。

复现:使用作者提供的train_model 来计算mAP

Hrnet_dekr_w48_640x640   without mutil-scale  5000/1052s = 4.75 fps

Hrnet_dekr_w48_640x640   with mutil-scale [0.5,1,2] 速度太慢了 1fps

这里without mutil-scale居然跑出了 with mutil-scale的效果 太神奇了。

### 安装 `hrnet.hrnet_cls` 库 为了成功安装并使用 `hrnet.hrnet_cls` 库,需按照特定步骤操作以确保所有依赖项都已正确配置。通常情况下,GitHub项目可能会假设用户已经熟悉这些前置条件。 对于HRNet框架中的分类部分(即`hrnet_cls`),官方文档可能并未详尽描述每一步骤。然而,基于社区反馈其他开源项目的实践,可以总结如下方法来完成安装: #### 方法一:通过克隆仓库并构建环境 如果目标是从源码编译,则建议直接从GitHub上获取最新版本的代码,并创建一个新的虚拟环境用于隔离其他Python包的影响。 ```bash git clone https://github.com/leoxiaobin/deep-high-resolution-net.pytorch.git cd deep-high-resolution-net.pytorch/ conda env create -f environment.yml conda activate hrnet pip install -e . ``` 上述命令会下载HRNet项目文件夹到本地计算机中[^2],并通过Anaconda管理工具设置专门的工作空间;最后利用`pip`工具将当前目录下的软件包作为可编辑模式安装进去。 #### 方法二:解决模块缺失错误 当遇到像`ModuleNotFoundError: No module named 'nms.cpu_nms'`这样的问题时,这表明某些必要的子模块未被正确加载或不存在于系统的PYTHONPATH路径下。此时应该仔细阅读README.md内的说明文档,确认是否有额外组件需要单独处理。例如,在本案例里可能是由于缺少了非极大值抑制(NMS)算法的相关实现所致。针对这种情况,可以从头开始重新搭建整个开发平台,或者尝试找到预编译好的whl格式轮子文件来进行快速部署。 #### 方法三:简化流程——仅安装所需功能 考虑到并非所有人都打算深入研究底层细节,有时只需要获得能够执行预测任务的功能即可满足需求。这时可以选择只安装核心库而不必关心其余辅助脚本: ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 pip install git+https://github.com/leoxiaobin/deep-high-resolution-net.pytorch.git@master#egg=cls&subdirectory=lib/models/hrnet ``` 这段指令首先保证PyTorch及其扩展库处于适当状态,接着指定了要拉取的具体分支以及相对应的目标位置,从而实现了对单一模型结构的选择性引入。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值