图 - Stacked Hourglass Networks由多个 stacked hourglass 模块组成,通过重复进行bottom-up, top-down推断以估计人体姿态.
动机:捕捉不同尺度下图片所包含的信息. 局部信息,对于比如脸部、手部等等特征很有必要,而最终的姿态估计需要对整体人体一致理解. 不同尺度下,可能包含了很多有用信息,比如人体的方位、肢体的动作、相邻关节点的关系等等.
Hourglass设计:
图 - 单个hourglass模块示例. 图中个方框分别对应一个residual模块. 整个hourglass中,特征数是一致的.
hourglass设置: 首先Conv层和Max Pooling层用于将特征缩放到很小的分辨率; 每一个Max Pooling(降采样)处,网络进行分叉,并对原来pre-pooled分辨率的特征进行卷积; 得到最低分辨率特征后,网络开始进行upsampling,并逐渐结合不同尺度的特征信息. 这里对较低分辨率采用的是最近邻上采样(nearest neighbor upsampling)方式,将两个不同的特征集进行逐元素相加. 整个hourglass是对称的,获取低分辨率特征过程中每有一个网络层,则在上采样的过程中相应低就会有一个对应网络层.
得到hourglass网络模块输出后,再采用两个连续的 1×1 Conv层进行处理,得到最终的网络输出. Stacked Hourglass Networks输出heatmaps的集合,每一个heatmap表征了关节点在每个像素点存在的概率.
Hourglass网络中使用的Residual模块. Residual模块提取较高层次的特征,同时保留原有层次的信息.
输入256×256尺寸的图片需要较多的GPU显存,hourglass网络的最大分辨率,也就是最终的输出分辨率,为 64×64. Stacked Hourglass Networks网络开始是步长为2,filters为7×7的Conv层,其后是residual模块和一串Max Pooling层,将分辨率由256降到64. 其后是两个residual和hourglass模块. 整个hourglass中的所有residual模块输出特征数都是256.
Hourglass网络输出heatmaps集合(蓝色方框部分),与真值进行误差计算. 其中利用1×1的Conv层对heatmaps进行处理以保证中间特征的通道数一致. 每一个Hourglass网络都添加Loss层.
MPII Human Pose Dataset 数据处理: - 采用MPII提供的scale和center标注信息,以目标人为中心,裁剪图片 - Resized to 256x256 - Rotation (+/- 30 degrees) - Scaling (.75-1.25) 未进行平移处理,因为图像中目标人的位置是很重要的信息.
Training: - Torch7 - rmsprop with a learning rate of 2.5e-4 - drop the learning rate once by a factor of 5 after validation accuracy plateaus - 3 days on a 12GB NVIDIA TitanX GPU - Batch normalization - Mean Squared Error (MSE) loss 计算估计的heatmap和参考heatmap的误差 - single forward pass of the network takes 75 ms
Testing: - 原始图片和其翻转图片,输入到网络,取输出heatmaps的平均值 - 最终输出的各heatmap的最大值位置作为关节点位置
MPII Human Pose 测试集的人体姿态估计结果