头部姿态识别模型:使用Hourglass网络来理解人体姿态
头部姿态识别模型:使用Hourglass网络来理解人体姿态这里有一些其他的网络架构,你应该在看沙漏网络之前熟悉一下:但在我们深入了解这个网络的组成部分之前,让我们先看看这个网络所基于的其他一些深层神经网络。那么,你怎么能在几秒钟内完成所有这些复杂的分析呢?嗯,你的大脑刚刚做了一件叫做“人体姿态估计”的事情。幸运的是,由于人类的姿态估计是通过眼睛和大脑的结合来完成的,这是我们可以在计算机视觉中复制的东西。为了进行人体姿态估计,我们使用一种特殊类型的全卷积网络,称为hourglass网络。网络的编解码器结构使它看起来像一个沙漏,因此被称为“hourglass networks”Hourglass网络图
作者:Nushaine Ferdinand
编译:ronghuaiyang
导读一个简单和通俗易懂的用Hourglass网络做人体姿态预测的理论的深入解析。
有个人拿着刀向你冲来。你要怎么办?嗯,大多数人的脑子里只有一个想法:跑。那你为什么要跑?因为在观察了这个男人咄咄逼人的姿势后,你可以得出结论,他想伤害你。因为你想活到明天,所以你决定尽可能快地跑。
那么,你怎么能在几秒钟内完成所有这些复杂的分析呢?嗯,你的大脑刚刚做了一件叫做“人体姿态估计”的事情。幸运的是,由于人类的姿态估计是通过眼睛和大脑的结合来完成的,这是我们可以在计算机视觉中复制的东西。
为了进行人体姿态估计,我们使用一种特殊类型的全卷积网络,称为hourglass网络。网络的编解码器结构使它看起来像一个沙漏,因此被称为“hourglass networks”
Hourglass网络图
但在我们深入了解这个网络的组成部分之前,让我们先看看这个网络所基于的其他一些深层神经网络。
回顾这里有一些其他的网络架构,你应该在看沙漏网络之前熟悉一下:
Convolutional Neural Networks (CNN’s)- Significance:自动学习与特定物体最对应的特征,从而提高分类精度。
- Significance:通过减缓网络在反向传播中的梯度衰减,允许训练更深的网络。
- Significance:用1x1卷积替换全连接层,允许网络接受不同维度的输入。
- Significance:允许我们通过提取输入的特征并试图重新创建它来操作输入(如图像分割、文本翻译),我们将更多地讨论编码器-解码器,因为这基本上就是hourglass网络。
因此,希望你在学习所有这些网络架构时得到了乐趣,但是现在是时候将它们全部结合起来了。
hourglass网络结构
Hourglass网络是卷积编码器-解码器网络的一种类型(这意味着它使用卷积层来分解和重构输入)。它们接受输入(在我们的例子中,是一幅图像),然后通过将图像分解为特征矩阵,从输入中提取特征。
然后,它将这个特征矩阵和之前的层结合起来,这些层比特征矩阵对空间的理解更高(比特征矩阵对物体在图像中的位置有更好的感觉)。
- 注:特征矩阵具有低的空间理解,这意味着它不能真正知道物体在图像中的位置。这是因为,为了能够提取物体的特征,我们必须丢弃所有不是物体特征的像素。这意味着丢弃所有的背景像素,通过这样做,它删除了所有关于物体在图像中的位置的知识。
- 通过将特征矩阵与网络中对空间有更高理解的早期的层相结合,可以让我们对输入(它是什么 它在图像中的位置)有更多的了解。
在网络中把早期的层传输给后来的层,这难道没有给我们提醒吗?ResNets。残差在整个网络中被大量使用。它们被用来结合空间信息和特征信息,不仅如此,每个绿色块代表了我们称之为“bottleneck block”的东西。
Bottlenecks是一种新的残差类型。不是2个3X3的卷积,我们有1个1X1的卷积,1个3X3的卷积和1个1X1的卷积。这使得计算在计算机上容易得多(3X3卷积在尺度上要比1X1卷积难得多),这意味着我们可以节省大量内存。
左:残差层,右:Bottleneck Block
总结一下:
- Input: 人体图像
- Encoding: 通过将输入分解为特征矩阵来提取特征
- Decoding: 结合特征信息 空间信息,深入理解图像
- Output: 这取决于应用,在我们的例子中,是关节位置的热图
如果我们真的想要能够用代码实现,我们需要理解在每一层发生了什么,以及为什么。因此,在这里,我们将分解整个过程,一步一步地进行,以便我们对网络有一个深刻的理解(我们只是回顾hourglass网络的架构,而不是整个训练过程)。
在这个网络中,我们将使用:
- 卷积层:提取图像中的特征
- MaxPooling Layers:去除图像中不需要提取特征的部分
- 残差层:将网络的层变得更深
- Bottleneck Layers:通过包含更少的卷积来释放内存
- Upsampling Layers:增加输入的大小(在我们的例子中,使用最近邻方法)
好了,在开始之前,让我们看看另一个hourglass 网络的图。
Hourglass网络图
这里我们可以看到一些东西:
- 有两个部分:编码和解码。
- 每个部分有4个cubes。
- 左边的cubes传到右边,形成右边的cubes。
如果我们把每个cubes展开,它看起来是这样的:
bottleneck layer
因此在整个网络的图中,每个cube都是一个bottleneck层(如上图所示)。在每个池化层之后,我们会添加一个这样的bottleneck层。
但是,第一层有点不同,因为它有一个7X7的卷积(它是架构中唯一大于3X3的卷积)。第一层是这样的:
第一层的可视化
这是第一个cube的样子。首先,输入被传递到一个7X7的卷积加上BatchNormalization和ReLu层。接下来,它被传递到bottleneck层,bottleneck 层进行了复制:一个通过MaxPool并执行特征提取,另一个稍后在上采样(解码)部分返回到网络。
接下来的cubes (cubes 2、3和4)具有相似的结构,但与cubes 1的结构不同。下面是其他cubes (在编码部分)的样子:
第2 3 4层的可视化
这些层要简单得多。之前的输出层被传递到瓶颈层,然后复制到残差层和特征提取层。我们将重复这个过程3次(在cubes 2、3和4中),然后我们将生成特征图。
下面是创建特征图所涉及的图层(这部分是你在整个网络图中看到的三个非常小的cubes ):
底层的可视化
这是网络中最深的层。同时也是特征信息最高的部分和空间信息最低的部分。这里,我们的图像被压缩成一个矩阵,实际上是一个张量,它代表了我们图像的特征。
为了达到这个目的,它通过了所有的4个编码cubes和底部的3个bottleneck层。现在我们准备上采样。下面是上采样层的样子:
上采样层的可视化
这里,传入的残差层会通过一个bottleneck层,然后在其本身和上采样层之间执行element-wise加法。
我们将重复这个过程4次,然后将最后一层(解码部分中的第4个cubes)传递到最后一个部分,在这里我们将确定每个预测的准确性。
- 注:这叫做即时监督。它是在每个阶段的结束的时候计算损失,而不是在整个网络的结束后。在我们的例子中,我们在每个hourglass网络的末端计算损失,而不是在所有网络组合的末端计算损失(因为对于人体姿态估计,我们使用多个hourglass网络堆叠在一起)。
下面是最后一层的样子:
网络的最终预测的可视化
这是网络的最后部分。我们通过一个卷积层来传递最终网络的输出,然后复制这个层来产生一组热图。最后,我们在网络的输入、热图和网络的两个输出(一个是预测,另一个是到下一个网络末端的输出)之间执行元素加法。
然后,就是重复!是的,就是这样。你只是过了一遍整个hourglass 网络。在实践中,我们将一起使用这些网络,所以这就是为什么标题是“重复”。希望这个主题现在可以被人们理解。
英文原文:https://towardsdatascience.com/using-hourglass-networks-to-understand-human-poses-1e40e349fa15