点击查看原文:《Deep High-Resolution Representation Learning for Human Pose Estimation》
在HRNet论文中主要研究人体姿态估计问题,着重于输出可靠的高分辨率表征。现有的大多数方法都是从高分辨率到低分辨率网络产生的低分辨率表征中恢复高分辨率表征。而HRNet能在整个过程中都保持高分辨率的表征。高分辨率子网络作为第一阶段开始,逐步增加高分辨率到低分辨率的子网,形成更多的阶段,并将多分辨率子网并行连接进行多次多尺度融合,使得每一个高分辨率到低分辨率的表征都从其他并行表示中反复接收信息,从而得到丰富的高分辨率表征。预测的关键点heatmap更准确,在空间上也更精确。
二维人体姿态估计是计算机视觉中一个基本而又具有挑战性的问题,目的是定位人体的解剖关键点(如肘部、腕部等)或部位。它的应用较为广泛,包括人体动作识别、人机交互、动画等。随着深度卷积神经网络发展,现有的方法已经取得了最先进的性能,其中大多数是通过一个网络(由高分辨率到低分辨率的子网串联而成)传递输入,然后提高分辨率。
高分辨率网路HRNet能够在整个过程中维护高分辨率的表示。在整个过程中通过在并行的多分辨率子网络上反复交换信息来进行多尺度的重复融合,通过网络输出的高分辨率表示来估计关键点。生成的网络如图1所示。与其他用于姿态估计的网络相比,HRNet网络有两个明显的优势:
(i)并行连接高分辨率到低分辨率的子网,而不是像大多数现有解决方案那样串行连接,因此能够保持高分辨率,而不是通过一个低到高的过程恢复分辨率;
(ii)大多数现有的融合方案都将低层和高层的表示集合起来。相反,HRNet使用重复的多尺度融合,利用相同深度和相似级别的低分辨率表示来提高高分辨率表示,从而使得高分辨率表示对于姿态的估计也很充分。由于上述两点,HRNet预测的heatmap更加准确。
HRNet网络并行地连接高到低的子网,它保持了高分辨率的表示,通过整个过程的空间精确heatmap估计。它通过重复融合高到低子网产生的高分辨率表示来生成可靠的高分辨率表示。该方法在不使用中间heatmap监控的情况下,具有较好的关键点检测精度和计算复杂度及参数效率。人体姿态估计,即关键点检测,旨在检测K个部分关键点的位置(例如,手肘、手腕等)从一个图像的大小W×H×3。State of-the-art级别的方法是将这个问题转变为估计K heatmap的大小,其中每个热图 Hk 表示第k个关键点的位置置信度。HRNet使用卷积网络预测human keypoint,这是由stem组成的两个步长卷积网络降低分辨率,主体输出特性映射具有相同的分辨率作为它的输入特征图,和一个回归量估算的heatmap关键点位置选择和转换为完整的分辨率。接下来是网络各个部分的详细介绍。
1.Sequential multi-resolution subnetworks
现有的姿态估计网络是将高分辨率到低分辨率的子网络串联起来,每个子网络形成一个阶段,由一系列卷积组成,相邻子网络之间存在一个下采样层,将分辨率减半,结构如图。
2. Parallel multi-resolution subnetworks
HRNet以高分辨率子网为第一阶段,逐步增加高分辨率到低分辨率的子网,形成新的阶段,并将多分辨率子网并行连接。因此,后一阶段并行子网的分辨率由前一阶段的分辨率和下一阶段的分辨率组成。一个包含4个并行子网的网络结构示例如图。
3.Repeated multi-scale fusion
跨并行子网的交换单元,使每个子网重复接收来自其他并行子网的信息。将第三阶段划分为若干个交换块,每个块由3个并行卷积单元与1个交换单元跨并行单元进行卷积,下图说明了信息交换的方式。
交换单元的输入为s响应映射:{X1,X2,X3…},输出为s响应图:{Y1,Y2,Y3…},其分辨率和宽度与输入相同。每个输出都是输入映射的集合:
各阶段的交换单元有额外的输出图:
函数a(Xi,k)从分辨率i到k对Xi上采样或下采样组成。采用步长为3×3的卷积使用步长为2做下采样。对于上采样,采用最简单的最近邻抽样,从1×1卷积调整通道的数量。如果i=k,则为直接连接。
4.Heatmap estimation
将heatmap从上一个交换单元输出的高分辨率表示进行回归。损失函数定义为均方误差,用于比较预测的热图和ground truth heatmpas。Ground truth heatmpas是采用二维高斯分布,以每个关键点的ground truth位置为中心,标准差为1像素生成的。
1.实验设置
运行的代码为https://github.com/stefanopini/simple-HRNet。采用的数据集为COCO val2017使用的标注为2017 person keypoints。使用pytorch深度学习框架。实验参数分别为,输入图片的分辨率为256*192,基本单位通道数为32,batch size设置为8,joints数量为17,学习率不衰减为0.001,使用Adam优化器momentum=0.9。
2.实验运行
实验的运行步骤具体如下。首先需要编译nms模块,在运行之前需要将nms.py中的导入cpu_nms部分改成下图代码,然后运行第一个指令,得到两个.so文件。现在修改train_coco.py中的参数后,下载官方的预训练模型pose_hrnet_w32_256x192.pth,对于 multi-person support,在./models/detector文件夹中clone YOLOv3,并将文件夹名称从pytor- YOLOv3更改为yolo。从weights文件夹中下载运行脚本download_weight .sh的预训练的weights。然后运行第二个指令,运行train_coco.py程序,开始训练网络模型。
由于当时的计算资源有限,仅用了5000张图片训练模型,来走通过程,并且也可瞥见一些结果。
3.可视化
当然,这是加载官方weights的检测结果,自己只用5000张图片训练的模型结果显然不好喽,这里就不贴了,嘻嘻。
Sun K , Xiao B , Liu D , et al. Deep High-Resolution Representation Learning for Human Pose Estimation[J]. arXiv e-prints, 2019.
代码来源:https://github.com/stefanopini/simple-HRNet