论文阅读:《Stacked Hourglass Networks for Human Pose Estimation》ECCV 2016

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36165459/article/details/78321529

概述

本文仍然是使用全卷积神经网络,对给定的单张RGB图像,输出人体关键点的精确像素位置,使用多尺度特征,捕捉人体各关节点的空间位置信息。网络结构形似沙漏状,重复使用top-down到bottom-up来推断人体的关节点位置。每一个top-down到bottom-up的结构都是一个stacked hourglass模块。

这里写图片描述

沙漏网络

这里写图片描述

Motivation:使用沙漏网络的目的是为了反复获取不同尺度下图片所包含的信息。例如一些局部信息,包括脸部和手部信息。最后的人体姿态估计需要对整个人体做一个理解,因此需要结合不同尺度下的信息,人体的方位,肢体的动作以及相邻关节点的关系。

Design:单个的hourglass模块对应的是一个residual模块,它的拓扑结构是对称的。最开始的卷积层和池化层是为了将特征映射到很小的分辨率。每经过一次池化,进行一次下采样,网络从这里开始分叉——下采样之前的特征图经过卷积保留下来,和之后bottom-up上采样到相同分辨率的特征图融合;下采样之后的特征图继续卷积池化操作。当达到最小分辨率后,网络开始上采样,使用双线性差值,并开始融合不同尺度的信息。Hourglass网络的输出再经过两个连续的1*1的卷积处理,得到最终的输出。输出是一个heatmap的集合,表示的是各个关节点在该像素出现的概率。

residual模块

这里写图片描述

Residual网络的作用是既提取高层的特征,又保留原有层次的信息。Residual网络结构:1*1卷积降维(256到128),3*3卷积,1*1卷积升维(128到256)。最后使用8个沙漏网络,每个沙漏网络的输入都是64*64。因为输入图片是256*256,一共经过一个卷积层(7*7 with stride=2,一次下采样)和一个池化层(第二次下采样)。

中继监督

Hourglass网络输出heatmap的集合(蓝色),将这与ground truth进行误差计算,其中使用1*1的卷积层进行处理是为了保证通道数相同,这是一种保证通道数相同很常见的方法,对每一个hourglass网络都添加loss,这就相当于是8个loss一起监督。

这里写图片描述

训练和测试

采用MPII数据集,以人为目标裁剪图片。Resize到256*256,+/-30度旋转,0.75-1.25尺度变换。测试的时候,原始图片和翻转图片,输入到网络中,取输出的heatmap的平均值,最终输出的各heatmap的最大值作为关节点的位置。

总结

本文的设计基于模块到子网络再到完整网络的思想。一阶hourglass网络就是一个最简单的旁路相加,上半路在原尺度进行,下半路先经历下采样再进行上采样。对于二阶hourglass网络,就是在一阶的基础上将一阶网络嵌套进来。至于之后的高阶hourglass就是一层一层嵌套,从本质上说子模块都是一样的。

模块特点:

  1. 每次下采样前,分出一路保留原尺度信息
  2. 每次上采样之后,和上一尺度的特征融合
  3. 两次下采样之间,用三个residual模块提取特征
  4. 两次相加之间,使用一个residual模块提取特征

因此整个hourglass不改变特征的尺度,只改变特征的深度。

开源实现

https://github.com/anewell/pose-hg-train(torch版本)
https://github.com/wbenbihi/hourglasstensorlfow (tensorflow, 单人PCK达到90%,速度:可以做到本地实时,28-30 FPS on NVIDIA GTX 1070 for single person detection,13-18FPS for multiple person detection,多人检测采用自顶向下的方法,先用YOLO检测出人体,再进行人体姿态估计)

Reference:http://blog.csdn.net/shenxiaolu1984/article/details/51428392

展开阅读全文

没有更多推荐了,返回首页