Inside-Outside Net中在卷积图片中应用IRNN的理解

 最近读了一篇论文是阴影检测的,其中有一个空间感知注意力模块DSC是基于ION中的模块改进的,变化没有太大。《Inside-Outside Net: Detecting Objects in Context with Skip Pooling and Recurrent Neural Networks》这篇文章是在VGG16之后添加两个IRNN去实现提升检测性能的,IRNN是用来实现同一层的feature map的上下左右感知,理解起来是有些困难的,而且我没有找到其他博客有解释这篇文章的IRNN。
Inside-Outside Net中在卷积图片中应用IRNN的理解_第1张图片
 我默认了所以有人都了解了RNN的工作方式,IRNN的原文是Google的《A Simple Way to Initialize Recurrent Networks of Rectified Linear Units》这篇文章在普通RNN的改进是:拿上图来说,由s变O的过程激活函数tanh换成 ReLU,隐层的自循环矩阵W用单位阵初始化、偏置项设置成0。
Inside-Outside Net中在卷积图片中应用IRNN的理解_第2张图片
 下面开始说明如何处理。传统中的RNN处理图片是从左到右每列作为一个输入,不同的列作为不同时刻的输入。这篇文章的输入是以每行每列的每个格子作为输入。为了尽可能有效地实现IRNN,对内部IRNN计算进行了拆分,分成不同的计算层。
1.每个 f i , j f_{i,j} fi,j相当于 x t x_{t} xt,通过一个1×1的卷积作为输入到隐藏层的权重相当于U,得到激活值 h i , j h_{i,j} hi,j相当于 s t s_{t} st。(图中shared input-to hidden transition操作)
2.通过上一步得到 h i , j h_{i,j} hi,j,四个方向,以右边举例子,每个方向都是 h i , j r i g h t = m a x { W h h r i g h t h i , j − 1 r i g h t + h i , j r i g h t , 0 } h_{i,j}^{right}=max\{W_{hh}^{right}h_{i,j-1}^{right}+h_{i,j}^{right},0\} hi,jright=max{Whhrighthi,j1right+hi,jright,0}(不过既然是右边感知,我在纠结为什么不是j+1)
3.利用IRNN论文的处理方式,自然就 W h h W_{hh} Whh是单位矩阵,变成了 h i , j r i g h t = m a x { h i , j − 1 r i g h t + h i , j r i g h t , 0 } h_{i,j}^{right}=max\{h_{i,j-1}^{right}+h_{i,j}^{right},0\} hi,jright=max{hi,j1right+hi,jright,0},后面有实验索性直接不学习 W h h W_{hh} Whh,最后的效果并没有降低太多。作者认为是输入层到隐藏层,隐藏层到输出层的1×1卷积已经包含了丰富的上下文信息,因此可以除掉自循环矩阵。(我觉得有点搬石砸脚,这篇文章的主要不就是用RNN去学特征的吗,自循环都扔了,那不就像前馈网络那样了啊)
4.四个方向得到的feature map做concat操作,再通过1×1卷积,再重复实现一次IRNN。
Inside-Outside Net中在卷积图片中应用IRNN的理解_第3张图片
 我们来从感受野的角度来解释,这样操作如何实现全局感知。上图的(d)本来feature map中的一个格只能得到他自己的信息,通过一次IRNN之后,同一位置的这个格,它接收到了它上一个格的信息,它上一个格接收到的是它上上个格的信息,以此类推,直到整个feature map的边缘。上下左右四个方向都进行操作后,就得到了以原格为中心的十字架感受野。再来一次IRNN,因为中心格子能感受到的格子它们本身也有十字架感受野,就相当于覆盖了前两步feature map的所有格子。

你可能感兴趣的:(文章阅读)