网站首页 > 技术文章 正文
作者:Nushaine Ferdinand
编译:ronghuaiyang
导读
一个简单和通俗易懂的用Hourglass网络做人体姿态预测的理论的深入解析。
有个人拿着刀向你冲来。你要怎么办?嗯,大多数人的脑子里只有一个想法:跑。那你为什么要跑?因为在观察了这个男人咄咄逼人的姿势后,你可以得出结论,他想伤害你。因为你想活到明天,所以你决定尽可能快地跑。
那么,你怎么能在几秒钟内完成所有这些复杂的分析呢?嗯,你的大脑刚刚做了一件叫做“人体姿态估计”的事情。幸运的是,由于人类的姿态估计是通过眼睛和大脑的结合来完成的,这是我们可以在计算机视觉中复制的东西。
为了进行人体姿态估计,我们使用一种特殊类型的全卷积网络,称为hourglass网络。网络的编解码器结构使它看起来像一个沙漏,因此被称为“hourglass networks”
但在我们深入了解这个网络的组成部分之前,让我们先看看这个网络所基于的其他一些深层神经网络。
回顾
这里有一些其他的网络架构,你应该在看沙漏网络之前熟悉一下:
Convolutional Neural Networks (CNN’s)
- Significance:自动学习与特定物体最对应的特征,从而提高分类精度。
Residual Networks (ResNets)
- Significance:通过减缓网络在反向传播中的梯度衰减,允许训练更深的网络。
Fully Convolutional Networks (FCN’s)
- Significance:用1x1卷积替换全连接层,允许网络接受不同维度的输入。
Encoder-Decoder Networks
- Significance:允许我们通过提取输入的特征并试图重新创建它来操作输入(如图像分割、文本翻译),我们将更多地讨论编码器-解码器,因为这基本上就是hourglass网络。
在High Level上看网络
因此,希望你在学习所有这些网络架构时得到了乐趣,但是现在是时候将它们全部结合起来了。
Hourglass网络是卷积编码器-解码器网络的一种类型(这意味着它使用卷积层来分解和重构输入)。它们接受输入(在我们的例子中,是一幅图像),然后通过将图像分解为特征矩阵,从输入中提取特征。
然后,它将这个特征矩阵和之前的层结合起来,这些层比特征矩阵对空间的理解更高(比特征矩阵对物体在图像中的位置有更好的感觉)。
- 注:特征矩阵具有低的空间理解,这意味着它不能真正知道物体在图像中的位置。这是因为,为了能够提取物体的特征,我们必须丢弃所有不是物体特征的像素。这意味着丢弃所有的背景像素,通过这样做,它删除了所有关于物体在图像中的位置的知识。
- 通过将特征矩阵与网络中对空间有更高理解的早期的层相结合,可以让我们对输入(它是什么+它在图像中的位置)有更多的了解。
在网络中把早期的层传输给后来的层,这难道没有给我们提醒吗?ResNets。残差在整个网络中被大量使用。它们被用来结合空间信息和特征信息,不仅如此,每个绿色块代表了我们称之为“bottleneck block”的东西。
Bottlenecks是一种新的残差类型。不是2个3X3的卷积,我们有1个1X1的卷积,1个3X3的卷积和1个1X1的卷积。这使得计算在计算机上容易得多(3X3卷积在尺度上要比1X1卷积难得多),这意味着我们可以节省大量内存。
总结一下:
- Input: 人体图像
- Encoding: 通过将输入分解为特征矩阵来提取特征
- Decoding: 结合特征信息+空间信息,深入理解图像
- Output: 这取决于应用,在我们的例子中,是关节位置的热图
一步一步理解整个过程
如果我们真的想要能够用代码实现,我们需要理解在每一层发生了什么,以及为什么。因此,在这里,我们将分解整个过程,一步一步地进行,以便我们对网络有一个深刻的理解(我们只是回顾hourglass网络的架构,而不是整个训练过程)。
在这个网络中,我们将使用:
- 卷积层:提取图像中的特征
- MaxPooling Layers:去除图像中不需要提取特征的部分
- 残差层:将网络的层变得更深
- Bottleneck Layers:通过包含更少的卷积来释放内存
- Upsampling Layers:增加输入的大小(在我们的例子中,使用最近邻方法)
好了,在开始之前,让我们看看另一个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 (在编码部分)的样子:
这些层要简单得多。之前的输出层被传递到瓶颈层,然后复制到残差层和特征提取层。我们将重复这个过程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
- 上一篇: SM框架整合篇 ssm框架crud
- 下一篇: 后端思维篇:如何抽一个观察者模板
猜你喜欢
- 2024-09-27 后端思维篇:如何抽一个观察者模板
- 2024-09-27 SM框架整合篇 ssm框架crud
- 2024-09-27 动物分类器 动物分类网
- 2024-09-27 图表显示日志离线信息 离线日志正在运行
- 2024-09-27 比用Pytorch框架快200倍!0.76秒后,笔记本上的CNN就搞定了MNIST
- 2024-09-27 卷积神经网络背后的数学 卷积神经网络教学视频
- 2024-09-27 多层级遇到多兴趣:快手、武汉大学用于序列推荐的多粒度神经模型
- 2024-09-27 使用分割来寻找疑似结节(13) 分割检测
- 2024-09-27 买药秒送 JADE动态线程池实践及原理浅析
- 2024-09-27 可逆神经网络详细解析:让神经网络更加轻量化
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)