Recurrence along Depth: Deep Convolutional Neural Networks with Recurrent Layer Aggregation阅读笔记
RLA阅读笔记
- (一) Title
- (二) Summary
- (三) Research Object
- (四) Problem Statement
- (五) Method
- 5.1 Layer Aggregation
- 5.2 在深层network中的Sequential结构
- 5.3 结合上面的一些思考有了本文的RLA
- (六) Experiments
- (七) Conclusion
- (八) Notes
- 8.1 CNN-RNN混合模型的研究
- 8.2 带有branching path的CNN模型
- 8.3 CNNs中的注意力机制
- 8.4 RNN的变体
(一) 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 mapxt−1x^{t-1}xt−1->卷积运算->xtx^{t}xt,而layer aggregation是在进行卷积运算之前增加之前层的信息。这里作者给出了两种解释:Layer Aggregation,另一种是multi-head masked self-attention.
首先对于Laryer Aggregation来说,卷积神经网络中输入为x0x^0x0,对应t层的输出feature map为xtx^{t}xt,整个CNN一种有LLL层,假如说这个CNN模型具有layer之间信息的传递能力的话,从数学形式上来看就是:
At=gt(xt−1,xt−2,…,x0)and xt=ft(At−1,xt−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(xt−1,xt−2,…,x0) and xt=ft(At−1,xt−1)
其中AtA^{t}At表示前面t−1t-1t−1层的信息的聚合,是通过gtg^tgt对之前层特征feature map变换得来的,ftf^tft是一个transformation用于得到当前层的feature map输出。这里的函数符号可能会有一点儿乱,博主这边自己说明下:其中gtg^tgt是第t层的聚合函数,ftf^tft是第t层的特征图卷积函数。
接下来的话,将普通卷积,ResNet结构(卷积后聚合)以及DenseNet结构用上面统一的形式表述出来:
普通CNN结构的话,当前层feature map的表达式为
At=0,xt=ft(xt−1)A^{t}=0,x^{t}=f^{t}\left(x^{t-1}\right) At=0,xt=ft(xt−1)
相当于之前层的信息xlwith l<t−1x^{l} \text {with } l<t-1xlwith l<t−1只能通过t−1t-1t−1层传递过来,这种传递方式相比于通过AtA^tAt聚合的方式为什么能够传递更有效的信息呢?我觉得这个应该是从梯度反向传播上能够更好地说明吧。
对于ResNet结构来说,是一种卷积后聚合的方式,从表现上来看跟卷积前聚合是不一样的。当前层feature map的表达式为:
At=0,xt=ft(xt−1)+xt−1A^{t}=0,x^{t}=f^{t}\left(x^{t-1}\right)+x^{t-1} At=0,xt=ft(xt−1)+xt−1
卷积后聚合,构建的是另一种聚合方式,这种后聚合方式和前聚合方式相比有什么区别呢?会不会在性能上有不同的表现呢?我们可以将xt−1x^{t-1}xt−1看成是xt−2x^{t-2}xt−2经过了前聚合后,进行卷积接着再进行后聚合,对应的表达式为:
At−1=ft−1(xt−2)+xt−2,xt=ft(At−1)+xt−1A^{t-1}=f_{t-1}(x^{t-2})+x^{t-2},x^{t}=f^{t}\left(A^{t-1}\right)+x^{t-1} At−1=ft−1(xt−2)+xt−2,xt=ft(At−1)+xt−1
这里我的一个想法就是,构建后聚合方式,对应的统一表达形式为:xt=bt(ft(xt−1),xt−2,…,x0)x^{t}=b^{t}\left(f^{t}\left(x^{t-1}\right), x^{t-2}, \ldots, x^{0}\right) xt=bt(ft(xt−1),xt−2,…,x0)
另外,如果同时考虑前后聚合的话,对应的表达形式为:
At=gt(xt−1,xt−2,…,x0),xt=bt(ft(xt−1,At−1),xt−2,…,x0)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(xt−1,xt−2,…,x0),xt=bt(ft(xt−1,At−1),xt−2,…,x0)
但是这样来看的话,大概率是会存在冗余的。
作者这里给出了一个一种表示形式,不断递归到第一层上xt=ft(xt−1)+xt−1=ft(xt−1)+ft−1(xt−2)+xt−2=xt=∑l=0t−1fl(xl)+x0x^{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(xt−1)+xt−1=ft(xt−1)+ft−1(xt−2)+xt−2=xt=∑l=0t−1fl(xl)+x0,因此,对应着可以给出AtA^tAt和xtx^txt的对应关系为:
At=∑l=0t−1fl(xl)+x0,xt=At−1+ft−1(xt−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=0∑t−1fl(xl)+x0,xt=At−1+ft−1(xt−1)
对于DenseNet结构来说,首先引入几个假设,假定聚合函数是feature map变换后的线性组合:
At=∑l=0t−1glt(xl)A^{t}=\sum_{l=0}^{t-1} g_{l}^{t}\left(x^{l}\right) At=l=0∑t−1glt(xl)
其中第t层的聚合函数一共有t个,分别对应着相应层的feature map,而且有可能第t层的前t-1个函数同第t-1层的t-1个聚合函数是不相同的。但是这里假定第t层的前t-1个函数同第t-1层的t-1个聚合函数是相同的,也就是上式可以简化成At=∑l=0t−1gl(xl)A^{t}=\sum_{l=0}^{t-1} g_l\left(x^{l}\right)At=∑l=0t−1gl(xl)
同时假定第t层的卷积运算是一个3×33\times33×3的卷积。
接着再来看一个DenseNet层的表示方式为:
xt=Conv3t[Conv1t(Concat(x0,x1,…,xt−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,…,xt−1))]
这里我们可以将xtx^txt拆成两部分,首先对应的就是聚合部分的表示:
Conv1t(Concat(x0,x1,…,xt−1))=∑l=0t−1Conv1lt(xl)\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,…,xt−1))=l=0∑t−1Conv1lt(xl)x0,x1,…,xt−1x^{0}, x^{1}, \ldots, x^{t-1}x0,x1,…,xt−1的通道数分别为c0,c1,…,ct−1c_{0}, c_{1}, \ldots, c_{t-1}c0,c1,…,ct−1,对应着卷积Conv1t\operatorname{Conv} 1^{t}Conv1t的通道channel数为∑l=0t−1cl\sum_{l=0}^{t-1}c_{l}∑l=0t−1cl,当前卷积运算的话,输入大小为∑l=0t−1cl×H×W\sum_{l=0}^{t-1}c_{l} \times H \times W∑l=0t−1cl×H×W,卷积核的size是∑l=0t−1cl×1×1×out_channel\sum_{l=0}^{t-1}c_{l} \times 1 \times 1 \times out\_channel∑l=0t−1cl×1×1×out_channel,实际上相当于将卷积核拆成ttt份,每一份的卷积大小为cl×1×1×out_channelc_l \times 1 \times 1 \times out\_channelcl×1×1×out_channel,对应着的卷积核记作Conv1lt\operatorname{Conv} 1_{l}^{t}Conv1lt,相当于将一个完整的卷积拆分成ttt个。
此时,我们有At=∑l=0t−1Conv1lt(xl)A^t=\sum_{l=0}^{t-1} \operatorname{Conv} 1_{l}^{t}\left(x^{l}\right)At=∑l=0t−1Conv1lt(xl),这里引入我们之前的另一个假设,也就是聚合函数同当前在的层无关,即At=∑l=0t−1Conv1l(xl)A^t=\sum_{l=0}^{t-1} \operatorname{Conv} 1_{l}\left(x^{l}\right)At=∑l=0t−1Conv1l(xl),此时DenseNet的表示方式为:
xt=Conv3t[At−1+Conv1t−1(xt−1)]x^{t}=\operatorname{Conv} 3^{t}\left[A^{t-1}+\operatorname{Conv} 1_{t-1}\left(x^{t-1}\right)\right] xt=Conv3t[At−1+Conv1t−1(xt−1)]
接着对于multi-head masked self-attention的处理,相当于在卷积之前插入了一个multi-head masked self-attention的结构,用于聚合之前layer的信息:
Attention t=Concat (head 0t,…,head m−1t)with head it=∑l=0t−1sl,itxl,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 m−1t) with head it=l=0∑t−1sl,itxl, for i=1,…,m
从矩阵上来看,表达就是:
[head 0thead 1t…head m−1t]=[s0,0ts0,1t…s0,t−1ts1,0ts1,1t…s1,t−1t…………sm−1,0tsm−1,1t…sm−1,t−1t]×[x0x1…xt−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 m−1t⎦⎥⎥⎤=⎣⎢⎢⎡s0,0ts1,0t…sm−1,0ts0,1ts1,1t…sm−1,1t…………s0,t−1ts1,t−1t…sm−1,t−1t⎦⎥⎥⎤×⎣⎢⎢⎡x0x1…xt−1⎦⎥⎥⎤
得到的head特征用于后续的卷积运算当中。其中query,key和value都设置成了xtx^{t}xt忘记了Transformer里面的Q,K,V是啥了,sl,its_{l, i}^{t}sl,it表示相似度的度量,mmm表示multi heads的数量。
对应到DenseNet中的方式是:
xt=Conv3t[Conv1t(Concat(x0,x1,…,xt−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,…,xt−1))]
其中Conv1t(Concat(x0,x1,…,xt−1))\operatorname{Conv} 1^{t}\left(\operatorname{Concat}\left(x^{0}, x^{1}, \ldots, x^{t-1}\right)\right)Conv1t(Concat(x0,x1,…,xt−1))的过程,假定前面的所有layer的输出通道数相同都是kkk(其实这里不同也没有多大问题,只不过按照原文表述罢了),这里Conv1t\operatorname{Conv} 1^{t}Conv1t对应的卷积核大小就是:tk×1×1×output_channel(m)t k \times 1 \times 1 \times output\_channel(m)tk×1×1×output_channel(m),记作一个矩阵:
[W0,0t…Wj,m−1t………Wtk−1,0t…Wtk−1,m−1t]\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,0t…Wtk−1,0t………Wj,m−1t…Wtk−1,m−1t⎦⎤
此时multi head attention表述中的head it=∑l,cWj(l,c),itxcl\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)=lk+cj(l, c)=l k+cj(l,c)=lk+c,相当于将上面的矩阵在横坐标上划分成t份,同时将layer特征展开来表述。但是作者指出目前存在的问题是将1×11\times11×1的卷积换成3×33\times33×3的卷积后,it will collapse。没太看懂collapse指的是什么,同时为什么换成3×33\times 33×3之后会出现collapse呢?
这里给出了一个新的思路,就是layer aggregation和multihead attention之间具有一定的关联,是不是说的是我们可以通过layer aggregation的方式使得CNN具备Transformer的能力呢?如果说再结合上MLP进行一些工作呢?
5.2 在深层network中的Sequential结构
目前来看聚合函数的表示形式为At=gt(xt−1,xt−2,…,x0)A^{t}=g^{t}\left(x^{t-1}, x^{t-2}, \ldots, x^{0}\right)At=gt(xt−1,xt−2,…,x0),引入假设简化之后的聚合函数为At=∑l=0t−1glt(xl)A^{t}=\sum_{l=0}^{t-1} g_{l}^{t}\left(x^{l}\right)At=∑l=0t−1glt(xl),同样也相当复杂,作者指出这种DenseNet的结构往往存在着较多的冗余,考虑到layer之间是序列结构的关系,借助时间序列的思想来实现对聚合函数的进一步简化.这里又引入了之前的假设聚合函数gltg_{l}^{t}glt同所在的层是没有关系的,也就是上标可以去掉,同时引入AR模型(autoregressive)
xt=β1xt−1+…+βt−1x1+βtx0=∑l=0t−1βt−lxlx^{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=β1xt−1+…+βt−1x1+βtx0=l=0∑t−1βt−lxl
这里角标的顺序是为了同AR模型保持一致,AR模型的表示为:
xt=∑l=1∞βlxt−l+itx^{t}=\sum_{l=1}^{\infty} \beta_{l} x^{t-l}+i^{t} xt=l=1∑∞βlxt−l+it
其中iti^{t}it表示加性噪声,AR模型在理论讨论中比较常见,实际使用中还是基于autoregressive moving average (ARMA)模型,ARMA(1,1)模型的表示为:xt=βxt−1+it−γit−1x^{t}=\beta x^{t-1}+i^{t}-\gamma i^{t-1}xt=βxt−1+it−γit−1,展开成AR(∞)\operatorname{AR}(\infty)AR(∞)形式为:
xt=βxt−1+it−γit−1,it−1=xt−1−βxt−2+it−2=βxt−1−γ(xt−1−βxt−2)+it−γ2it−2=(β−γ)xt−1+it+γ(βxt−2−γit−2),it−2=xt−2−βxt−3+it−3=⋯=∑l=1∞(β−γ)γl−1xt−l+it\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=βxt−1+it−γit−1,it−1=xt−1−βxt−2+it−2=βxt−1−γ(xt−1−βxt−2)+it−γ2it−2=(β−γ)xt−1+it+γ(βxt−2−γit−2),it−2=xt−2−βxt−3+it−3=⋯=l=1∑∞(β−γ)γl−1xt−l+it
受上面表述的启发,目前构建的一个更加parsimonious简洁的等式如下所示:
ht=αxt−1+γht−1and xt=β1xt−1+β2ht−1h^{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=αxt−1+γht−1 and xt=β1xt−1+β2ht−1
同时假定h0=0h^0=0h0=0,通过递归可以又有:
ht=∑l=1tαγl−1xt−l,xt=β1xt−1+β2α∑l=1t−1γl−1xt−1−lh^{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=1∑tαγl−1xt−l,xt=β1xt−1+β2αl=1∑t−1γl−1xt−1−l
上式具有至多4个参数,并且hth^tht的作用同iti^tit是相同的,此外上面的式子也比较符合RNN的结构(说实话,RNN的结构已经忘记得差不多了)。到这个地方我们再回顾下ResNet的Layer Aggregation的表示方式:
xt=∑l=0t−2fl(xl)+x0+ft−1(xt−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=0∑t−2fl(xl)+x0+ft−1(xt−1)
从上式中可以看到xtx^txt和xlx^lxl的关系是同xlx^lxl所在的layer是有关系的(也就是从初始输入x0x^0x0开始计数,计到当前的第lll层),也就是xtx^txt是关于xlx^lxl和其所在层lll的函数,这种方式作者在实验中记作Shared-Ordinal。
从时间序列的表示来看,xtx^txt同xt−1−lx^{t-1-l}xt−1−l的关系是γl−1\gamma^{l-1}γl−1的关系,这里的l−1l-1l−1指的是xtx^txt同xt−1−lx^{t-1-l}xt−1−l之间相差的层数。这种方式作者记作Shared-Lag从时间序列的角度考虑,貌似更加合理。因此作者这里在ResNet上进行了一个实验来对比。使用了一个100层的DenseNet-BC(k=12).同时使用ResNet构建Shared-Ordinal(正常的ResNet结构)以及Shared-Lag方式,并假设在第ttt层的聚合函数同ttt没有关系两个的聚合方式:
(Shared-Lag )xt=Conv3t(Conv11(xt−1)+⋯+Conv1t−1(x1)+Conv10t(x0))(Shared-Ordinal )xt=Conv3t(Conv1t−1(xt−1)+⋯+Conv11(x1)+Conv10t(x0))\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(xt−1)+⋯+Conv1t−1(x1)+Conv10t(x0))xt=Conv3t(Conv1t−1(xt−1)+⋯+Conv11(x1)+Conv10t(x0))
对应的实验结果如下图所示:
通过共享1×11\times 11×1卷积,也就是第t层的聚合函数同t没有关系。能够让参数数量减少25%,同时在精度上仅仅相差了0.5%。实际上这个地方说的是DenseNet相比于ResNet其实并没有提升太多。而且Shared-Lag和Shared-Ordinal两个实验结果上相差很少
接着作者通过对两种方式1×11\times11×1卷积的权值进行可视化。
从上图来看,Shared-Lag的方式会使得xtx^txt同时间序列一样更多的关注到上一层的信息,并且快速衰减跟指数的方式很像。这里有没有可能出现先升高后降低(基于Attention)的构建方式呢?
5.3 结合上面的一些思考有了本文的RLA
借助时间序列的方式引入了RLA(recurrent layer aggregation)的机制:
ht=gt(ht−1,xt−1)and xt=ft(ht−1,xt−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(ht−1,xt−1) and xt=ft(ht−1,xt−1)
其中hth^tht表示从第000层到第t−1t-1t−1层的聚合信息,通过考虑不同的gtg^tgt实现形式可以有不同的RLA结构,可以使用conv,GRU,LSTM构建。然后这里的ftf^tft就是不同的CNN卷积形式。整个RLA的统一表示形式为:
具体来看的话,如下图所示,多种信息的构建形式:
整个更新的过程可以被实例化成
ht=g2[g1(yt)+ht−1]and xt=yt+xt−1h^{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)+ht−1] and xt=yt+xt−1
其中yt=f1t[Concat(ht−1,xt−1)]y^{t}=f_{1}^{t}\left[\operatorname{Concat}\left(h^{t-1}, x^{t-1}\right)\right]yt=f1t[Concat(ht−1,xt−1)].关于结构上的一些更详细的设置如下其实从上面的图中也可以看出来。关于RLA的初始状态h0h^0h0设置成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能够有更多的表现形式。
Recurrence along Depth: Deep Convolutional Neural Networks with Recurrent Layer Aggregation阅读笔记相关推荐
- Recurrence along Depth: Deep Convolutional Neural Networks with Recurrent Layer Aggregation
[优秀参考1] 目录 一.Title 1.1前言: 二.summary(idea) 2.1研究背景: 2.2存在问题: 2.3设计目的: 2.4创新点: 三.Method 3.1简述 一.Title ...
- CV:翻译并解读2019《A Survey of the Recent Architectures of Deep Convolutional Neural Networks》第一章~第三章
CV:翻译并解读2019<A Survey of the Recent Architectures of Deep Convolutional Neural Networks>第一章~第三 ...
- 《每日论文》ImageNet Classification with Deep Convolutional Neural Networks
这篇论文是剖析 CNN 领域的经典之作,也是入门 CNN 的必读论文.作者训练了一个面向数量为 1.2 百万的高分辨率的图像数据集 ImageNet, 图像的种类为 1000 种的深度卷积神经网络. ...
- AlexNet论文翻译(中英文对照版)-ImageNet Classification with Deep Convolutional Neural Networks
图像分类经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为中英文对照版,纯中文版请稳步:[AlexNet纯中文版] ImageNet Classification with De ...
- 论文《ImageNet Classification with Deep Convolutional Neural Networks》阅读及AlexNet的Tensorflow2复现
论文<ImageNet Classification with Deep Convolutional Neural Networks>阅读及AlexNet的Tensorflow2复现 论文 ...
- 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (1/3)
文章目录 Authors and Publishment Authors Bibtex Abstract 1. Introduction 2. The Dataset Authors and Publ ...
- ImageNet Classification with Deep Convolutional Neural Networks论文翻译——中英文对照
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 翻译论文汇总:https://github.com/SnailTyan/deep-learning-papers- ...
- 人群计数--Cross-scene Crowd Counting via Deep Convolutional Neural Networks
Cross-scene Crowd Counting via Deep Convolutional Neural Networks CVPR2015 本文主要使用深度学习来完成跨场景人群计数 cros ...
- 有效感受野--Understanding the Effective Receptive Field in Deep Convolutional Neural Networks
Understanding the Effective Receptive Field in Deep Convolutional Neural Networks NIPS 2016 本文主要分析了 ...
最新文章
- 访问 Microsoft SQL Server 元数据的三种
- str量化转化为int
- GdiPlus[59]: 图像(十一) IGPImageAttributes 之颜色矩阵(TGPColorMatrix)变换
- Struts2中采用Json返回List对象数据为空解决方案
- matlab图像去毛刺_信号去毛刺,去零漂
- Angular HTML template的解析位置
- php板块模板,有没有办法制作模板,但没有在板块php渲染它
- Java基础语法初学者了解
- 软Raid5,LVM,3T大硬盘纠缠操作的问题
- 2021-08-08 idea 连接Mysql
- 长沙县北部新城:“湖湘生态”蓝图已绘就,“右岸经济”起飞正当时
- CycloneII之EDA及学术开发功能描述
- 组装http报文调用小黄鸡网页端消息接口
- Linux redis ipv6,linux centOS 开启ipv6
- 微信小程序网易云音乐播放界面
- java有函数吗_java有函数吗?
- 腾讯地图标注_在腾讯地图上标注店铺,只需要简单几步就搞定
- 4.合宙Air32F103_LCD
- 许嵩音乐智能问答系统微信小程序之音乐播放器
- java代码实现登录跳转_java实现登录案例