Recurrence along Depth: Deep Convolutional Neural Networks with Recurrent Layer Aggregation阅读笔记

(一) Title

在这里插入图片描述
前言:对于循环网络,我们往往考虑的是融合不同时刻的输入信息,这个文章想到了循环网络同样可以用于不同layer之间信息的融合,并贡献到当前layer进行接下来的特征提取。本文关于引入RLA的故事讲述比较多,如果想直接看本文的工作,到5.3小节
论文地址:https://arxiv.org/abs/2110.11852
代码地址:https://github.com/fangyanwen1106/RLANet

(二) Summary

研究背景

关于layer间信息传递的研究也有很多:Residual connections或者skip connections,使得当前层可以访问到之前的层,从而帮助深层网络梯度的反向传播。实际上网络学习到的特征是建立在较简单特性的layer,并不一定是当前层前面那一层。因此,在DenseNet中是将所有的层传递到当前层上(一个block里面),,但是这种方式使得模型参数相对于层数呈二次增加,并且在提取特征上存在着高度冗余。

本文内容

本文进一步探讨了layer aggregation的问题,使得previous layer的信息能够更好地服务于current layer的特征提取。
通过引入recurrent layer aggregation(RLA),充分利用CNNs layers的顺序结构,帮助学习图像中的structural information.具体的做法是:
在这里插入图片描述
构建一个recurrent connection分支,实现对之前feature map information的信息的聚合,通过和卷积层的交互,实现聚合信息的传递。同时recurrent connection中隐藏层参数是共享的,并没有引入冗余参数。

性能表现

RLA模块能够在目前基于卷积的框架中实现,兼容ResNets,Xception,MobilNetV2,在图像分类,目标检测和示例分割任务中进行了大量的实验,对应的RLA-Net在目标检测任务上实现了2-3%的性能提升。

(三) Research Object

本文思路首先是希望将卷积同RNN结构结合起来,目前Transformer在CV中的表现很亮眼,怎么样能够很好地将RNN的思想引入到卷积中来我觉得是一个很值得思考的问题.

讲真的博主觉得如何给CNN赋能Transformer类似的作用是很具有研究价值的,这里所说的赋能我觉得并不是简单的拼接,也就是文中作者提到的之前的一些conv+rnn融合处理视频问题,rnn负责序列,cnn负责特征。而是使得CNN具备recurrent的能力,说实话我觉得本文的思路更是让我觉得很好的,因为rnn一开始是处理序列问题的,实际上是对序列输入而言的,这里是将cnn的layer看成了一个序列,实现对之前序列信息的融合,妙啊~,并且作者通过resnet这种layer aggregation,以及attention的形式来解释这样做,就很合理

然后这里本文将CNN的卷积得到特征图过程看成是一个序列的产生的过程,通过将前面层序列的信息融合汇集到当前层用于接下来的卷积计算,这里实际上考虑的是一个单帧图像的信息recurrent方式,这里博主觉得对于视频问题还可以考虑如何处理视频序列的特征信息融合,类似于TSM那种在帧间进行特征通道的平移的处理,将这个平移也用双向rnn来代替我觉得也能起到更好的作用,冲啊!兄弟们

(四) Problem Statement

本文的主要问题就是怎么实现layer之间的recurrent信息传递,借助时间序列分析的一些方法构建了light-weighted RLA模块。

(五) Method

5.1 Layer Aggregation

正常卷积的计算过程是上一层的卷积feature map x t − 1 x^{t-1} xt1->卷积运算-> x t x^{t} xt,而layer aggregation是在进行卷积运算之前增加之前层的信息。这里作者给出了两种解释:Layer Aggregation,另一种是multi-head masked self-attention.

首先对于Laryer Aggregation来说,卷积神经网络中输入为 x 0 x^0 x0,对应t层的输出feature map为 x t x^{t} xt,整个CNN一种有 L L L层,假如说这个CNN模型具有layer之间信息的传递能力的话,从数学形式上来看就是:
A t = g t ( x t − 1 , x t − 2 , … , x 0 )  and  x t = f t ( A t − 1 , x t − 1 ) A^{t}=g^{t}\left(x^{t-1}, x^{t-2}, \ldots, x^{0}\right) \quad \text { and } \quad x^{t}=f^{t}\left(A^{t-1}, x^{t-1}\right) At=gt(xt1,xt2,,x0) and xt=ft(At1,xt1)
其中 A t A^{t} At表示前面 t − 1 t-1 t1层的信息的聚合,是通过 g t g^t gt对之前层特征feature map变换得来的, f t f^t ft是一个transformation用于得到当前层的feature map输出。

这里的函数符号可能会有一点儿乱,博主这边自己说明下:其中 g t g^t gt第t层的聚合函数 f t f^t ft是第t层的特征图卷积函数

接下来的话,将普通卷积ResNet结构(卷积后聚合)以及DenseNet结构用上面统一的形式表述出来:
普通CNN结构的话,当前层feature map的表达式为
A t = 0 , x t = f t ( x t − 1 ) A^{t}=0,x^{t}=f^{t}\left(x^{t-1}\right) At=0,xt=ft(xt1)
相当于之前层的信息 x l with  l < t − 1 x^{l} \text {with } l<t-1 xlwith l<t1只能通过 t − 1 t-1 t1层传递过来,

这种传递方式相比于通过 A t A^t At聚合的方式为什么能够传递更有效的信息呢?我觉得这个应该是从梯度反向传播上能够更好地说明吧

对于ResNet结构来说,是一种卷积后聚合的方式,从表现上来看跟卷积前聚合是不一样的。当前层feature map的表达式为:
A t = 0 , x t = f t ( x t − 1 ) + x t − 1 A^{t}=0,x^{t}=f^{t}\left(x^{t-1}\right)+x^{t-1} At=0,xt=ft(xt1)+xt1
卷积后聚合,构建的是另一种聚合方式,这种后聚合方式和前聚合方式相比有什么区别呢?会不会在性能上有不同的表现呢?我们可以将 x t − 1 x^{t-1} xt1看成是 x t − 2 x^{t-2} xt2经过了前聚合后,进行卷积接着再进行后聚合,对应的表达式为:
A t − 1 = f t − 1 ( x t − 2 ) + x t − 2 , x t = f t ( A t − 1 ) + x t − 1 A^{t-1}=f_{t-1}(x^{t-2})+x^{t-2},x^{t}=f^{t}\left(A^{t-1}\right)+x^{t-1} At1=ft1(xt2)+xt2,xt=ft(At1)+xt1
这里我的一个想法就是,构建后聚合方式,对应的统一表达形式为:

x t = b t ( f t ( x t − 1 ) , x t − 2 , … , x 0 ) x^{t}=b^{t}\left(f^{t}\left(x^{t-1}\right), x^{t-2}, \ldots, x^{0}\right) xt=bt(ft(xt1),xt2,,x0)

另外,如果同时考虑前后聚合的话,对应的表达形式为:
A t = g t ( x t − 1 , x t − 2 , … , x 0 ) , x t = b t ( f t ( x t − 1 , A t − 1 ) , x t − 2 , … , x 0 ) A^{t}=g^{t}\left(x^{t-1}, x^{t-2}, \ldots, x^{0}\right),x^{t}=b^{t}\left(f^{t}\left(x^{t-1},A^{t-1}\right), x^{t-2}, \ldots, x^{0}\right) At=gt(xt1,xt2,,x0),xt=bt(ft(xt1,At1),xt2,,x0)
但是这样来看的话,大概率是会存在冗余的。
作者这里给出了一个一种表示形式,不断递归到第一层上 x t = f t ( x t − 1 ) + x t − 1 = f t ( x t − 1 ) + f t − 1 ( x t − 2 ) + x t − 2 = x t = ∑ l = 0 t − 1 f l ( x l ) + x 0 x^{t}=f^{t}\left(x^{t-1}\right)+x^{t-1}=f^{t}\left(x^{t-1}\right)+f^{t-1}\left(x^{t-2}\right)+x^{t-2}=x^{t}=\sum_{l=0}^{t-1} f^{l}\left(x^{l}\right)+x^{0} xt=ft(xt1)+xt1=ft(xt1)+ft1(xt2)+xt2=xt=l=0t1fl(xl)+x0,因此,对应着可以给出 A t A^t At x t x^t xt的对应关系为:
A t = ∑ l = 0 t − 1 f l ( x l ) + x 0 , x t = A t − 1 + f t − 1 ( x t − 1 ) A^{t}=\sum_{l=0}^{t-1} f^{l}\left(x^{l}\right)+x^{0},x^{t}=A^{t-1}+f^{t-1}\left(x^{t-1}\right) At=l=0t1fl(xl)+x0,xt=At1+ft1(xt1)
对于DenseNet结构来说,首先引入几个假设,假定聚合函数是feature map变换后的线性组合:
A t = ∑ l = 0 t − 1 g l t ( x l ) A^{t}=\sum_{l=0}^{t-1} g_{l}^{t}\left(x^{l}\right) At=l=0t1glt(xl)
其中第t层的聚合函数一共有t个,分别对应着相应层的feature map,而且有可能第t层的前t-1个函数同第t-1层的t-1个聚合函数是不相同的。但是这里假定第t层的前t-1个函数同第t-1层的t-1个聚合函数是相同的,也就是上式可以简化成 A t = ∑ l = 0 t − 1 g l ( x l ) A^{t}=\sum_{l=0}^{t-1} g_l\left(x^{l}\right) At=l=0t1gl(xl)
同时假定第t层的卷积运算是一个 3 × 3 3\times3 3×3的卷积。
接着再来看一个DenseNet层的表示方式为:
x t = Conv ⁡ 3 t [ Conv ⁡ 1 t ( Concat ⁡ ( x 0 , x 1 , … , x t − 1 ) ) ] x^{t}=\operatorname{Conv} 3^{t}\left[\operatorname{Conv} 1^{t}\left(\operatorname{Concat}\left(x^{0}, x^{1}, \ldots, x^{t-1}\right)\right)\right] xt=Conv3t[Conv1t(Concat(x0,x1,,xt1))]
这里我们可以将 x t x^t xt拆成两部分,首先对应的就是聚合部分的表示:
Conv ⁡ 1 t ( Concat ⁡ ( x 0 , x 1 , … , x t − 1 ) ) = ∑ l = 0 t − 1 Conv ⁡ 1 l t ( x l ) \operatorname{Conv} 1^{t}\left(\operatorname{Concat}\left(x^{0}, x^{1}, \ldots, x^{t-1}\right)\right)=\sum_{l=0}^{t-1} \operatorname{Conv} 1_{l}^{t}\left(x^{l}\right) Conv1t(Concat(x0,x1,,xt1))=l=0t1Conv1lt(xl)

x 0 , x 1 , … , x t − 1 x^{0}, x^{1}, \ldots, x^{t-1} x0,x1,,xt1的通道数分别为 c 0 , c 1 , … , c t − 1 c_{0}, c_{1}, \ldots, c_{t-1} c0,c1,,ct1,对应着卷积 Conv ⁡ 1 t \operatorname{Conv} 1^{t} Conv1t的通道channel数为 ∑ l = 0 t − 1 c l \sum_{l=0}^{t-1}c_{l} l=0t1cl,当前卷积运算的话,输入大小为 ∑ l = 0 t − 1 c l × H × W \sum_{l=0}^{t-1}c_{l} \times H \times W l=0t1cl×H×W,卷积核的size是 ∑ l = 0 t − 1 c l × 1 × 1 × o u t _ c h a n n e l \sum_{l=0}^{t-1}c_{l} \times 1 \times 1 \times out\_channel l=0t1cl×1×1×out_channel,实际上相当于将卷积核拆成 t t t份,每一份的卷积大小为 c l × 1 × 1 × o u t _ c h a n n e l c_l \times 1 \times 1 \times out\_channel cl×1×1×out_channel,对应着的卷积核记作 Conv ⁡ 1 l t \operatorname{Conv} 1_{l}^{t} Conv1lt,相当于将一个完整的卷积拆分成 t t t个。

此时,我们有 A t = ∑ l = 0 t − 1 Conv ⁡ 1 l t ( x l ) A^t=\sum_{l=0}^{t-1} \operatorname{Conv} 1_{l}^{t}\left(x^{l}\right) At=l=0t1Conv1lt(xl),这里引入我们之前的另一个假设,也就是聚合函数同当前在的层无关,即 A t = ∑ l = 0 t − 1 Conv ⁡ 1 l ( x l ) A^t=\sum_{l=0}^{t-1} \operatorname{Conv} 1_{l}\left(x^{l}\right) At=l=0t1Conv1l(xl),此时DenseNet的表示方式为:
x t = Conv ⁡ 3 t [ A t − 1 + Conv ⁡ 1 t − 1 ( x t − 1 ) ] x^{t}=\operatorname{Conv} 3^{t}\left[A^{t-1}+\operatorname{Conv} 1_{t-1}\left(x^{t-1}\right)\right] xt=Conv3t[At1+Conv1t1(xt1)]

接着对于multi-head masked self-attention的处理,相当于在卷积之前插入了一个multi-head masked self-attention的结构,用于聚合之前layer的信息:
 Attention  t =  Concat  (  head  0 t , … ,  head  m − 1 t )  with head  i t = ∑ l = 0 t − 1 s l , i t x l ,  for  i = 1 , … , m \text { Attention }^{t}=\text { Concat }\left(\text { head }_{0}^{t}, \ldots, \text { head }_{m-1}^{t}\right) \text { with head }_{i}^{t}=\sum_{l=0}^{t-1} s_{l, i}^{t} x^{l}, \text { for } i=1, \ldots, m  Attention t= Concat ( head 0t,, head m1t) with head it=l=0t1sl,itxl, for i=1,,m
从矩阵上来看,表达就是:
[  head  0 t  head  1 t …  head  m − 1 t ] = [ s 0 , 0 t s 0 , 1 t … s 0 , t − 1 t s 1 , 0 t s 1 , 1 t … s 1 , t − 1 t … … … … s m − 1 , 0 t s m − 1 , 1 t … s m − 1 , t − 1 t ] × [ x 0 x 1 … x t − 1 ] \begin{bmatrix} \text { head }_{0}^{t}\\ \text { head }_{1}^{t}\\ \ldots\\ \text { head }_{m-1}^{t} \end{bmatrix}=\begin{bmatrix} s_{0, 0}^{t}& s_{0, 1}^{t}& \ldots&s_{0, t-1}^{t} \\ s_{1, 0}^{t}& s_{1, 1}^{t}& \ldots&s_{1, t-1}^{t} \\ \ldots& \ldots& \ldots& \ldots\\ s_{m-1, 0}^{t}& s_{m-1, 1}^{t}& \ldots&s_{m-1, t-1}^{t} \end{bmatrix}\times \begin{bmatrix} x^0\\ x^1\\ \ldots\\ x^{t-1} \end{bmatrix}  head 0t head 1t head m1t=s0,0ts1,0tsm1,0ts0,1ts1,1tsm1,1ts0,t1ts1,t1tsm1,t1t×x0x1xt1
得到的head特征用于后续的卷积运算当中。其中query,key和value都设置成了 x t x^{t} xt忘记了Transformer里面的Q,K,V是啥了, s l , i t s_{l, i}^{t} sl,it表示相似度的度量, m m m表示multi heads的数量。
对应到DenseNet中的方式是:
x t = Conv ⁡ 3 t [ Conv ⁡ 1 t ( Concat ⁡ ( x 0 , x 1 , … , x t − 1 ) ) ] x^{t}=\operatorname{Conv} 3^{t}\left[\operatorname{Conv} 1^{t}\left(\operatorname{Concat}\left(x^{0}, x^{1}, \ldots, x^{t-1}\right)\right)\right] xt=Conv3t[Conv1t(Concat(x0,x1,,xt1))]
其中 Conv ⁡ 1 t ( Concat ⁡ ( x 0 , x 1 , … , x t − 1 ) ) \operatorname{Conv} 1^{t}\left(\operatorname{Concat}\left(x^{0}, x^{1}, \ldots, x^{t-1}\right)\right) Conv1t(Concat(x0,x1,,xt1))的过程,假定前面的所有layer的输出通道数相同都是 k k k(其实这里不同也没有多大问题,只不过按照原文表述罢了),这里 Conv ⁡ 1 t \operatorname{Conv} 1^{t} Conv1t对应的卷积核大小就是: t k × 1 × 1 × o u t p u t _ c h a n n e l ( m ) t k \times 1 \times 1 \times output\_channel(m) tk×1×1×output_channel(m),记作一个矩阵:
[ W 0 , 0 t … W j , m − 1 t … … … W t k − 1 , 0 t … W t k − 1 , m − 1 t ] \begin{bmatrix} W_{0, 0}^{t}& \ldots& W_{j, m-1}^{t}\\ \ldots& \ldots& \ldots\\ W_{tk-1, 0}^{t}& \ldots& W_{tk-1, m-1}^{t} \end{bmatrix} W0,0tWtk1,0tWj,m1tWtk1,m1t
此时multi head attention表述中的  head  i t = ∑ l , c W j ( l , c ) , i t x c l \text { head }_{i}^{t}=\sum_{l, c} W_{j(l, c), i}^{t} x_{c}^{l}  head it=l,cWj(l,c),itxcl,其中 j ( l , c ) = l k + c j(l, c)=l k+c j(l,c)=lk+c,相当于将上面的矩阵在横坐标上划分成t份,同时将layer特征展开来表述。但是作者指出目前存在的问题是将 1 × 1 1\times1 1×1的卷积换成 3 × 3 3\times3 3×3的卷积后,it will collapse。没太看懂collapse指的是什么,同时为什么换成 3 × 3 3\times 3 3×3之后会出现collapse呢?

这里给出了一个新的思路,就是layer aggregation和multihead attention之间具有一定的关联,是不是说的是我们可以通过layer aggregation的方式使得CNN具备Transformer的能力呢?如果说再结合上MLP进行一些工作呢?

5.2 在深层network中的Sequential结构

目前来看聚合函数的表示形式为 A t = g t ( x t − 1 , x t − 2 , … , x 0 ) A^{t}=g^{t}\left(x^{t-1}, x^{t-2}, \ldots, x^{0}\right) At=gt(xt1,xt2,,x0),引入假设简化之后的聚合函数为 A t = ∑ l = 0 t − 1 g l t ( x l ) A^{t}=\sum_{l=0}^{t-1} g_{l}^{t}\left(x^{l}\right) At=l=0t1glt(xl),同样也相当复杂,作者指出这种DenseNet的结构往往存在着较多的冗余,考虑到layer之间是序列结构的关系,借助时间序列的思想来实现对聚合函数的进一步简化.这里又引入了之前的假设聚合函数 g l t g_{l}^{t} glt同所在的层是没有关系的,也就是上标可以去掉,同时引入AR模型(autoregressive)
x t = β 1 x t − 1 + … + β t − 1 x 1 + β t x 0 = ∑ l = 0 t − 1 β t − l x l x^{t}=\beta_{1} x^{t-1}+\ldots+\beta_{t-1} x^{1}+\beta_{t} x^{0}=\sum_{l=0}^{t-1} \beta_{t-l} x^{l} xt=β1xt1++βt1x1+βtx0=l=0t1βtlxl
这里角标的顺序是为了同AR模型保持一致,AR模型的表示为:
x t = ∑ l = 1 ∞ β l x t − l + i t x^{t}=\sum_{l=1}^{\infty} \beta_{l} x^{t-l}+i^{t} xt=l=1βlxtl+it
其中 i t i^{t} it表示加性噪声,AR模型在理论讨论中比较常见,实际使用中还是基于autoregressive moving average (ARMA)模型,ARMA(1,1)模型的表示为: x t = β x t − 1 + i t − γ i t − 1 x^{t}=\beta x^{t-1}+i^{t}-\gamma i^{t-1} xt=βxt1+itγit1,展开成 AR ⁡ ( ∞ ) \operatorname{AR}(\infty) AR()形式为:
x t = β x t − 1 + i t − γ i t − 1 , i t − 1 = x t − 1 − β x t − 2 + i t − 2 = β x t − 1 − γ ( x t − 1 − β x t − 2 ) + i t − γ 2 i t − 2 = ( β − γ ) x t − 1 + i t + γ ( β x t − 2 − γ i t − 2 ) , i t − 2 = x t − 2 − β x t − 3 + i t − 3 = ⋯ = ∑ l = 1 ∞ ( β − γ ) γ l − 1 x t − l + i t \begin{aligned} x^{t} &=\beta x^{t-1}+i^{t}-\gamma i^{t-1},i^{t-1}=x^{t-1}-\beta x^{t-2}+i^{t-2}\\ &=\beta x^{t-1}-\gamma\left(x^{t-1}-\beta x^{t-2}\right)+i^{t}-\gamma^{2} i^{t-2} \\ &=(\beta-\gamma)x^{t-1}+i^{t}+\gamma(\beta x^{t-2}-\gamma i^{t-2}),i^{t-2}=x^{t-2}-\beta x^{t-3}+i^{t-3}\\ &=\cdots\\ &=\sum_{l=1}^{\infty}(\beta-\gamma) \gamma^{l-1} x^{t-l}+i^{t} \end{aligned} xt=βxt1+itγit1,it1=xt1βxt2+it2=βxt1γ(xt1βxt2)+itγ2it2=(βγ)xt1+it+γ(βxt2γit2),it2=xt2βxt3+it3==l=1(βγ)γl1xtl+it
受上面表述的启发,目前构建的一个更加parsimonious简洁的等式如下所示:
h t = α x t − 1 + γ h t − 1  and  x t = β 1 x t − 1 + β 2 h t − 1 h^{t}=\alpha x^{t-1}+\gamma h^{t-1} \quad \text { and } \quad x^{t}=\beta_{1} x^{t-1}+\beta_{2} h^{t-1} ht=αxt1+γht1 and xt=β1xt1+β2ht1
同时假定 h 0 = 0 h^0=0 h0=0,通过递归可以又有:
h t = ∑ l = 1 t α γ l − 1 x t − l , x t = β 1 x t − 1 + β 2 α ∑ l = 1 t − 1 γ l − 1 x t − 1 − l h^{t}=\sum_{l=1}^{t} \alpha \gamma^{l-1} x^{t-l},x^{t}=\beta_{1} x^{t-1}+\beta_{2} \alpha \sum_{l=1}^{t-1} \gamma^{l-1} x^{t-1-l} ht=l=1tαγl1xtl,xt=β1xt1+β2αl=1t1γl1xt1l
上式具有至多4个参数,并且 h t h^t ht的作用同 i t i^t it是相同的,此外上面的式子也比较符合RNN的结构(说实话,RNN的结构已经忘记得差不多了)。

到这个地方我们再回顾下ResNet的Layer Aggregation的表示方式:
x t = ∑ l = 0 t − 2 f l ( x l ) + x 0 + f t − 1 ( x t − 1 ) x^{t}=\sum_{l=0}^{t-2} f^{l}\left(x^{l}\right)+x^{0}+f^{t-1}\left(x^{t-1}\right) xt=l=0t2fl(xl)+x0+ft1(xt1)
从上式中可以看到 x t x^t xt x l x^l xl的关系是同 x l x^l xl所在的layer是有关系的(也就是从初始输入 x 0 x^0 x0开始计数,计到当前的第 l l l层),也就是 x t x^t xt是关于 x l x^l xl和其所在层 l l l的函数,这种方式作者在实验中记作Shared-Ordinal
从时间序列的表示来看, x t x^t xt x t − 1 − l x^{t-1-l} xt1l的关系是 γ l − 1 \gamma^{l-1} γl1的关系,这里的 l − 1 l-1 l1指的是 x t x^t xt x t − 1 − l x^{t-1-l} xt1l之间相差的层数。这种方式作者记作Shared-Lag从时间序列的角度考虑,貌似更加合理。因此作者这里在ResNet上进行了一个实验来对比。使用了一个100层的DenseNet-BC(k=12).同时使用ResNet构建Shared-Ordinal(正常的ResNet结构)以及Shared-Lag方式,并假设在第 t t t层的聚合函数同 t t t没有关系两个的聚合方式:
(  Shared-Lag  ) x t = Conv ⁡ 3 t ( Conv ⁡ 1 1 ( x t − 1 ) + ⋯ + Conv ⁡ 1 t − 1 ( x 1 ) + Conv ⁡ 1 0 t ( x 0 ) ) (  Shared-Ordinal  ) x t = Conv ⁡ 3 t ( Conv ⁡ 1 t − 1 ( x t − 1 ) + ⋯ + Conv ⁡ 1 1 ( x 1 ) + Conv ⁡ 1 0 t ( x 0 ) ) \begin{aligned} (\text { Shared-Lag }) & x^{t}=\operatorname{Conv} 3^{t}\left(\operatorname{Conv} 1_{1}\left(x^{t-1}\right)+\cdots+\operatorname{Conv} 1_{t-1}\left(x^{1}\right)+\operatorname{Conv} 1_{0}^{t}\left(x^{0}\right)\right) \\ (\text { Shared-Ordinal }) & x^{t}=\operatorname{Conv} 3^{t}\left(\operatorname{Conv} 1_{t-1}\left(x^{t-1}\right)+\cdots+\operatorname{Conv} 1_{1}\left(x^{1}\right)+\operatorname{Conv} 1_{0}^{t}\left(x^{0}\right)\right) \end{aligned} ( Shared-Lag )( Shared-Ordinal )xt=Conv3t(Conv11(xt1)++Conv1t1(x1)+Conv10t(x0))xt=Conv3t(Conv1t1(xt1)++Conv11(x1)+Conv10t(x0))
对应的实验结果如下图所示:在这里插入图片描述
通过共享 1 × 1 1\times 1 1×1卷积,也就是第t层的聚合函数同t没有关系。能够让参数数量减少25%,同时在精度上仅仅相差了0.5%。实际上这个地方说的是DenseNet相比于ResNet其实并没有提升太多。而且Shared-Lag和Shared-Ordinal两个实验结果上相差很少
接着作者通过对两种方式 1 × 1 1\times1 1×1卷积的权值进行可视化。
在这里插入图片描述
从上图来看,Shared-Lag的方式会使得 x t x^t xt同时间序列一样更多的关注到上一层的信息,并且快速衰减跟指数的方式很像。这里有没有可能出现先升高后降低(基于Attention)的构建方式呢?

5.3 结合上面的一些思考有了本文的RLA

借助时间序列的方式引入了RLA(recurrent layer aggregation)的机制:
h t = g t ( h t − 1 , x t − 1 )  and  x t = f t ( h t − 1 , x t − 1 ) h^{t}=g^{t}\left(h^{t-1}, x^{t-1}\right) \quad \text { and } \quad x^{t}=f^{t}\left(h^{t-1}, x^{t-1}\right) ht=gt(ht1,xt1) and xt=ft(ht1,xt1)
其中 h t h^t ht表示从第 0 0 0层到第 t − 1 t-1 t1层的聚合信息,通过考虑不同的 g t g^t gt实现形式可以有不同的RLA结构,可以使用conv,GRU,LSTM构建。然后这里的 f t f^t ft就是不同的CNN卷积形式。整个RLA的统一表示形式为:
在这里插入图片描述
具体来看的话,如下图所示,多种信息的构建形式:
在这里插入图片描述
整个更新的过程可以被实例化成
h t = g 2 [ g 1 ( y t ) + h t − 1 ]  and  x t = y t + x t − 1 h^{t}=g_{2}\left[g_{1}\left(y^{t}\right)+h^{t-1}\right] \quad \text { and } \quad x^{t}=y^{t}+x^{t-1} ht=g2[g1(yt)+ht1] and xt=yt+xt1
其中 y t = f 1 t [ Concat ⁡ ( h t − 1 , x t − 1 ) ] y^{t}=f_{1}^{t}\left[\operatorname{Concat}\left(h^{t-1}, x^{t-1}\right)\right] yt=f1t[Concat(ht1,xt1)].关于结构上的一些更详细的设置如下其实从上面的图中也可以看出来。关于RLA的初始状态 h 0 h^0 h0设置成0.

(六) Experiments

分类任务

使用CIFAR-10和CIFAR-100数据集在这里插入图片描述分类误差降了一些,但是效果并不理想,没有想象中那样好.
使用ImageNet数据集
在这里插入图片描述
说实话,从实验结果上来看,RLA和ECA也没有差多少,但是可以互补。

目标检测

在这里插入图片描述
在慕白哦检测任务上的表现效果还可以,性能跟ECA差不多,但是能互补。回头试一下效果~

消融实验

在这里插入图片描述
-channel+12是在ResNet164的基础上增加了bottleneck结构的通道数。
ConvLSTM based RLA结构如下如所示:
在这里插入图片描述
Post-Activated RLA结构(更换了激活函数和卷积的顺序)
在这里插入图片描述
RLA通道数的消融实验
在这里插入图片描述
从实验结果上来看,不稳定。

(七) Conclusion

本文提出了一种轻量化的Laryer Aggregation方式,在主流的CNN上应用充分的说明了可行性,以及在不同任务下的改进。

(八) Notes

8.1 CNN-RNN混合模型的研究

作者提出现有的CNN-RNN混合模型混合程度不够,将RNN和CNN当成两个block,比如visual description问题中,将视频图片到CNNs的序列输出给到RNN中;对于visual super-resolution中,使用convolutional LSTMs在时序上融合帧间的依赖,并将输出给到CNNs。从任务上来看,CNN-RNN混合模型主要是解决视频问题,RNN的主要作用是混合帧间信息。信息的聚合是在前面帧的信息上。而本文提出的RNN-CNN聚合方式的混合应用于单帧图像特征提取的过程,通过RNN融合Laryer之间的信息,用于后面的特征信息传递。博主这里的问题是相比于Transform结构的detection网络这里的异同是什么?在效果上有什么差异呢?从实验结果上并没有看到和Transformer detection方法的比较。

8.2 带有branching path的CNN模型

带有RLA模块的CNN框架和具有多个分支的结构具有很多相似性,比如Inception Networks或者是带有Grouped convolutions,AlexNet以及ResNeXt,但是主要的差异的话就是RLA模块along depth上有共享的卷积kernels(这里博主的理解就是对于每一层的卷积,是通过RNN交互之后得到的,在RNN模型参数上是共享的,必定RLA要尝试下能够带来多大的性能提升)

8.3 CNNs中的注意力机制

分为空间注意力通道注意力,关于通道注意力的一个设计是Squeeze-and-Excitation(SE)块,在本文中利用RNN相当于构建了当前层和之前层之间的通道注意力

8.4 RNN的变体

RLA采用的是卷积RNN的形式,而不同的RNN变体会有不同的RLA设计。首先在隐状态的更新上可以采用LSTM或者GRU。在架构设计上可以引入skip-connection。对于深层的RNN也可以以不同频率更新状态变量,这些变体可以使得RLA能够有更多的表现形式。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值