CNN經(jīng)典結(jié)構(gòu)(Lenet,AlexNet翔始,VGG罗心,GoogleNet,ResNet, Resnext, Densenet, Senet, BAM,mobilenet)及其pytorch實現(xiàn)

CNN經(jīng)典結(jié)構(gòu)

前言

本文主要介紹2012-2019年的一些經(jīng)典CNN結(jié)構(gòu)城瞎,從Lenet渤闷,AlexNet,VGG脖镀,GoogleNet肤晓,ResNet, Resnext, Densenet, Senet, BAM, CBAM, genet, sknet, mobilenet。以下附上論文鏈接认然。另外补憾,使用pytorch實現(xiàn)了大部分的模型,并在CIFAR數(shù)據(jù)集上進行測試卷员,可在github鏈接中查看具體實現(xiàn)代碼細節(jié)盈匾。如果對大家有幫助,歡迎給個star毕骡。:smile:

Architecture

Regularization

Learning Rate Scheduler

經(jīng)典網(wǎng)絡結(jié)構(gòu)

1. LeNet5

LeNet5 誕生于 1994 年削饵,LeNet做為CNN的經(jīng)典網(wǎng)絡結(jié)構(gòu),結(jié)構(gòu)如下未巫。


在這里插入圖片描述

LeNet5特征能夠總結(jié)為如下幾點:
1)卷積神經(jīng)網(wǎng)絡使用三個層作為一個系列: 卷積窿撬,池化,非線性
2) 使用卷積提取空間特征
3)使用映射到空間均值下采樣(subsample)
4)雙曲線(tanh)或S型(sigmoid)形式的非線性
5)多層神經(jīng)網(wǎng)絡(MLP)作為最后的分類器
6)層與層之間的稀疏連接矩陣避免大的計算成本

2.AlexNet

網(wǎng)絡結(jié)構(gòu)
如下圖所示叙凡,8層網(wǎng)絡劈伴,參數(shù)大約有60 million,使用了relu函數(shù)握爷,頭兩個全連接層使用了0.5的dropout跛璧。使用了LRN和重疊的池化,現(xiàn)在LRN都不用了新啼,一般用BN作Normalization追城。當時使用了多GPU訓練。
預處理
先down-sample成最短邊為256的圖像燥撞,然后剪出中間的256x256圖像座柱,再減均值做歸一化(over training set)迷帜。 訓練時,做數(shù)據(jù)增強色洞,對每張圖像瞬矩,隨機提取出227x227以及水平鏡像版本的圖像。除了數(shù)據(jù)增強锋玲,還使用了PCA對RGB像素降維的方式來緩和過擬合問題景用。
預測
對每張圖像提取出5張(四個角落以及中間)以及水平鏡像版本,總共10張惭蹂,平均10個預測作為最終預測伞插。
超參數(shù)
SGD,學習率0.01盾碗,batch size是128媚污,momentum為0.9,weight decay為0.0005(論文有個權(quán)重更新公式)廷雅,每當validation error不再下降時耗美,學習率除以10。權(quán)重初始化用(0航缀,0.01)的高斯分布商架,二四五卷積層和全連接層的bias初始化為1(給relu提供正值利于加速前期訓練),其余bias初始化為0芥玉。

在這里插入圖片描述

3.VGG

網(wǎng)絡結(jié)構(gòu)
如下圖所示蛇摸,VGG-16,16層灿巧,參數(shù)大約有138 million赶袄。實驗發(fā)現(xiàn)LRN的加入沒有提升反而更差,舍棄使用抠藕。實驗發(fā)現(xiàn)1x1效果更差饿肺,于是沒有使用,1x1卷積在Network in Network(顏水成)中提出推廣盾似,是很重要的思想,在GoogleNet和ResNet都有用到购岗。
使用小卷積核3x3可以捕捉左右上下的信息门粪,而且利于堆疊深度(保證參數(shù)不要過大)。步長為1烹困。same卷積。
兩個3x3卷積可以和5x5卷積達到一樣的感受野。三個3x3卷積可以和7x7卷積達到一樣的感受野绎签。使用三個3x3的好處在于使用了3個非線性變換,同時后減小了參數(shù).假設輸入輸出通道數(shù)一樣酝锅,那么有

在這里插入圖片描述

和AlexNet一樣诡必,頭兩個全連接層后面加0.5的dropout搔扁。
超參數(shù)
和AlexNet基本一致。batch size是256扭勉。初始化也是用(0苛聘,0.01)的高斯分布,只不過VGG先訓練一個淺層的網(wǎng)絡唱捣,然后把淺層網(wǎng)絡的部分參數(shù)來初始化深層網(wǎng)絡部分參數(shù)网梢,其它參數(shù)還是用高斯分布。值得注意的是論文提交后VGG發(fā)現(xiàn)使用glorot的初始化方法可以不用預訓練蛀序。
預處理
和AlexNet不同活烙,在下采樣的時候不是變成256,變成一個S重贺,S有兩種方法來設定回懦。第一個方法是固定的S(single-scale),固定為256或384潜圃。為了加速384的網(wǎng)絡,用256預訓練的模型進行權(quán)重初始化舟茶。另外學習率調(diào)小為0.001谭期。第二個方法從[256, 512]中隨機采樣S(multi-scale,注意這里的是multi-scale training踏志,和overfeat中的multi-scale test含義不一樣)胀瞪,這可以看成用尺寸抖動(scale jittering)對訓練集進行增強凄诞。為了加速,使用384預訓練的模型進行權(quán)重初始化摸柄。
預測
采用了AlexNet的10 views法(VGG論文中把它稱作multi-crop評估)和overfeat的多尺度預測方法(VGG論文中把它稱作dense評估)相結(jié)合既忆。在OverFeat已經(jīng)提到了multi-crop是有缺點的,存在冗余的卷積計算跃脊,所以使用了dense評估苛吱,但是Inceptionv1的論文中提到multi-crop使用大量crops能提高準確率因為它的采樣更精細翠储。而VGG認為實作上準確率的提升不足以彌補速度,但是為了參考起見庐舟,還是跑了multi-scrop的方法住拭。在實驗中,兩者結(jié)合優(yōu)于multi-crop優(yōu)于dense杠娱,好那么一點點谱煤,差別不大。
在這里插入圖片描述

4.GoogleNet

Inceptionv1

網(wǎng)絡結(jié)構(gòu)
如下圖所示為Inception塊睹簇。網(wǎng)絡總共有22層太惠,圖太大疲憋,這里就給個表格“T啵可以看到雖然把全連接替換成了全局均值池化(這后面還是使用了0.4的dropout)秋忙,但是網(wǎng)絡圖中最后還是有一個全連接層灰追,這是為了便于把網(wǎng)絡fine tune到其它數(shù)據(jù)集。
參數(shù)
為了提升模型表現(xiàn)朴下,典型的辦法是增大模型(增加深度或?qū)挾龋┛噍铮沁@樣會帶來過大的參數(shù),然后導致計算資源增大而且需要的數(shù)據(jù)更多(而高質(zhì)量數(shù)據(jù)往往是昂貴的)团滥,所以要考慮降低參數(shù)报强。Inceptionv1雖然有22層的參數(shù)卻只有5 million躺涝,是同期VGG16(138 million)的1/27,是AlexNet(60 million)的1/12而準確率卻遠勝AlexNet坚嗜。
1x1卷積好處
減小了參數(shù)苍蔬,允許增加深度; 可以降維俺猿,構(gòu)建瓶頸層來減小計算成本,Inception塊中就是通過在3x3和5x5后面加入1x1來減小計算诵冒;增強了網(wǎng)絡的表達能力(可以根據(jù)自己的意愿谊惭,或壓縮或增加或保持通道數(shù))。還有配合全局均值池化來代替全連接層圈盔,這個就是為了能大大減小模型的參數(shù)驱敲。1x1的思想也來自Network in Network。
超參數(shù)和預處理
因為比賽的過程做了很多變動握牧,包括采樣方法和各種超參围辙,所以很難定義一個有效的指導去訓練這個網(wǎng)絡。只給出了幾個超參數(shù)矫俺,固定學習率掸冤,每8epoch下降4%稿湿,momentum是0.9。
預測:先下降樣出256包斑,288涕俗,320和352大小,分別從左中右三個方位裁(如果是人畫像則從上中下三個方位裁)萌抵,然后從4 corners和center剪出224x224再加上把正方形縮放到224,以及它們的水平鏡像霎桅。這樣就可以得到4x3x6x2也就是144個crops讨永,最后對crops取平均住闯。

在這里插入圖片描述

在這里插入圖片描述

Inceptionv2

網(wǎng)絡結(jié)構(gòu)
如下圖所示比原,主要改變有杠巡,用兩個3x3代替5x5,28x28的Inception塊從2個變成了3個蚌铜,pooling時有些是avg有些是max嫩海,在Incetpion塊之間不再有額外的max-pool而是直接把卷積和池化的stride設置為2叁怪。BN被用在每一個輸入層后面(先BN再激活)。batch size為32涣觉。網(wǎng)絡使用DistBelief(Tensorflow前身)訓練
其它變動
增大學習率并加快學習率衰減(適用BN后的數(shù)據(jù))血柳,移除dropout并減小L2權(quán)重衰減(BN有一定的正則效果),去除LRN(發(fā)現(xiàn)用了BN后不需要LRN了)膝宁,更徹底對訓練樣本進行shuffle根吁,減小數(shù)據(jù)增強時對數(shù)據(jù)的光學畸變(因為BN訓練更快婴栽,每個樣本被訓練次數(shù)變少,模型需要注重更真實的樣本)映皆。

在這里插入圖片描述

Inceptionv3

v2網(wǎng)絡結(jié)構(gòu)
共42層,網(wǎng)絡圖就不放了组去,主要改動有如下步淹。各個改動模塊圖可以參考后面v4的結(jié)構(gòu)圖缭裆。

  • 修改部分Inception塊,使5x5分解成2個3x3卷積(可參考下面v4的InceptionA)辛燥。
  • 修改部分Inception塊缝其,分解成非對稱卷積(把nxn分解成1xn和nx1卷積内边,這里n=7。注意原始結(jié)構(gòu)并沒有7x7卷積)(可參考下面v4的InceptionB)嘴高。
  • 修改部分Inception塊辉懒,擴大卷積核數(shù)量(匯聚的分支數(shù)量)(可參考下面v4的InceptionC)
    修改部分Inception塊眶俩,減小特征圖大小(使用并行的stride為2的卷積和池化)(可參考下面v4的Reduction)
    v3網(wǎng)絡結(jié)構(gòu)
    在以上基礎上纲岭,加入如下改動
    用RMSProp訓練线罕,decay為0.9钞楼,?為1.0
    使用Label smoothing進行模型正則
    開頭第一層7x7分解成3個3x3卷積
    加入帶BN的輔助分類器

Inceptionv4,Inception-ResNet

v4網(wǎng)絡結(jié)構(gòu):如下第一個圖是v4燃乍。
Inception-ResNet
探索了多種Inception-ResNet,論文只闡述了兩個逗旁。其中Inceptin-ResNet-v1和Inceptinv3計算代價差不多舆瘪,Inceptin-ResNet-v2和Inceptionv4計算代價差不多英古,然而實作上Inceptionv4慢很多可能是因為層數(shù)太多。在帶有ResNet的Inception中舌缤,還有一個和純Inception的不同點是只在傳統(tǒng)層上使用BN某残,不在BN層上使用玻墅,這樣可以減小計算從而堆疊更多Inceptin塊壮虫。
Inception-ResNet-v2結(jié)構(gòu)
如下第二個圖是Inception-ResNet-v2(輸出的shape是Inception-ResNet-v1的)垫桂。

在這里插入圖片描述

在這里插入圖片描述

5.ResNet

網(wǎng)絡加深
對于網(wǎng)絡加深齐媒,會出現(xiàn)梯度消失或梯度爆炸锣吼,這個問題可以通過正則初始化(何凱明初始化等等)和BN來解決募狂。
退化問題
然而深層網(wǎng)絡到了一定深度,準確率趨近飽和性穿,而且繼續(xù)加深的話會降低準確率需曾,這稱為退化問題(degradation),而且這個問題并不是過擬合導致的(過擬合在訓練集應該更好)刻蚯,也不是梯度消失造成的(論文檢查了梯度)桑嘶。
殘差塊
為了解決退化問題逃顶,提出了殘差學習,如下圖所示為殘差塊霸褒,假設本來是要學習H(x)盈蛮,加了一條恒等映射之后我們要學習的就是F(x) = H(x) - x,(假設)學習F(x)會比學習H(x)更容易殊轴,最極端的情況就是假設我們要學習的映射是x旁理,那么讓F(x)為0我磁,比學習到H(x)為恒等映射要容易夺艰。這種做法的motivation是,如果增加的層能被構(gòu)建成恒等映射層减牺,那么一個更深的網(wǎng)絡的準確率至少不會低于淺層網(wǎng)絡霞势。
殘差塊的相加
當殘差塊的輸入和輸出不是相同維度時(因為部分殘差塊會使用stride為2的卷積來降采樣)愕贡,有兩種方法來保證維度一致,一個是補0墩虹,另一個是乘以W矩陣做映射(使用1x1卷積)。
訓練配置
預處理時像VGG一樣隨機采樣[256, 480]的scale旬昭,然后像AlexNet一樣crop出224x224的圖像以及水平翻轉(zhuǎn)问拘,然后做mean substracted惧所。預測時候使用AlexNet的10-crop測試法下愈,最好的結(jié)果是跟從VGG中的全卷積后的multi-scale評估,scale為{224, 256, 384, 480, 640}拌夏。在每個卷積的激活前使用BN障簿,不使用dropout搓逾。何凱明初始化霞篡。SGD端逼,batch size為256,學習率從0.1開始每次錯誤率平緩時就除以10粉洼,模型訓練了60萬個iteration,權(quán)重衰減為0.0001奔滑,momentum為0.9。
Identity和projection
對于殘差塊的相加,有三種配置,A配置是捷徑用identity幔崖,需要增加維度時的捷徑補0忙迁。B配置是捷徑一般都用identity摧茴,但是增加維度時使用映射。C配置是所有捷徑都使用映射(1x1卷積)。表現(xiàn)是C>B>A优床,但是三者差異不大,實作上不會使用C频蛔,因為C增加了參數(shù)和計算喧笔。
網(wǎng)絡結(jié)構(gòu)
論文闡述了ResNet-18-34-50-101-152书闸。其中ResNet-18/34使用配置A,ResNet-50/101/152使用配置B嫌术,此外使用了bottleneck結(jié)構(gòu)牌借,如下第一個圖的右圖所示膨报。

在這里插入圖片描述

6.preresnet

分析
ResNetv1的公式如下,論文分析了h函數(shù)和f函數(shù)的選取院领,即shortcut路徑的函數(shù)選取比然,以及addition后的操作選取周循。在ResNetv1中,h函數(shù)為恒等映射饮怯,f函數(shù)為relu函數(shù)硕淑,如下圖(a)所示。

在這里插入圖片描述

h函數(shù)的選取
論文分析了h函數(shù)選取為恒等映射于樟,做常數(shù)scale拇囊,異或寥袭,1x1卷積,dropout時的表現(xiàn)杰扫,發(fā)現(xiàn)恒等映射的表現(xiàn)最好章姓,主要是通過實驗來分析识埋。
f函數(shù)的選取
由于h函數(shù)使用恒等映射表現(xiàn)最好,下圖的分析中h函數(shù)都使用的恒等映射系忙。下圖(a)表示f函數(shù)為Relu银还,這是ResNetv1的做法洁墙。下圖(b)表示f函數(shù)為BN+Relu扫俺。下圖(c)表示f函數(shù)為恒等映射(Relu放到addition前)固翰。下圖d表示f函數(shù)為恒等映射,但是把最后一個Relu放在下一個殘差塊的F-path中冈欢。下圖e和圖d類似盈简,只不過把BN也放在addition后的下一個殘差塊的F-path,ResNetv2使用的就是圖e的結(jié)構(gòu)柠贤,通過實驗發(fā)現(xiàn)這個結(jié)構(gòu)表現(xiàn)最好香浩。
f和h函數(shù)都為恒等映射
ResNetv2采取圖e的結(jié)構(gòu),此時f和h函數(shù)都為恒等映射臼勉,那么上式可以寫成下式,可以看到這樣的式子有幾個特點宴霸,首先氓扛,不管L和l差多少層,xL和xl總是相差一個殘差函數(shù)芽卿;其次左电,普通網(wǎng)絡輸入和輸出的關系是很多個Wx相乘(忽略激活和BN的話)连舍,而這里是各個殘差函數(shù)相加;另外涩哟,從求導式看索赏,1+后面那一項不會總是為-1(對一個mini-batch的樣本來說),所以梯度很難為0贴彼。
在這里插入圖片描述

訓練配置
和ResNetv1基本一致潜腻。對于CIFAR的實驗前400個iteration用0.01(warming up),之后恢復0.1器仗,盡管觀察到這對于殘差塊沒有必要融涣。對于ImageNet實驗,學習率為0.1(no warming up),在30輪和60輪除以10暴心。在ResNet的開頭第一個殘差塊和最后一個殘差塊是特殊case妓盲,第一個殘差塊的激活會放在后面的“單獨卷積”之后和分成兩路之前,最后一個殘差塊的激活放在它的addition之后专普。

在這里插入圖片描述

7.resnext

貢獻
網(wǎng)絡結(jié)構(gòu)簡明,模塊化
需要手動調(diào)節(jié)的超參少
與 ResNet 相比弹沽,相同的參數(shù)個數(shù)檀夹,結(jié)果更好:一個 101 層的 ResNeXt 網(wǎng)絡,和 200 層的 ResNet 準確度差不多策橘,但是計算量只有后者的一半.
方法

在這里插入圖片描述

提出來 cardinality 的概念炸渡,在上圖左右有相同的參數(shù)個數(shù),其中左邊是 ResNet 的一個區(qū)塊丽已,右邊的 ResNeXt 中每個分支一模一樣蚌堵,分支的個數(shù)就是 cardinality。此處借鑒了 GoogLeNet 的 split-transform-merge沛婴,和 VGG/ResNets 的 repeat layer吼畏。
所謂 split-transform-merge 是指通過在大卷積核層兩側(cè)加入 1x1 的網(wǎng)絡層,控制核個數(shù)嘁灯,減少參數(shù)個數(shù)的方式泻蚊。借鑒 fei-fei li 的 cs231n 課件


在這里插入圖片描述

而 repeat layer 則是指重復相同的幾層,前提條件是這幾層的輸出輸出具有相同的維度丑婿,一般在不同的 repeat layers 之間使用 strip=2 降維性雄,同時核函數(shù)的個數(shù)乘 2。

網(wǎng)絡參數(shù)

在這里插入圖片描述

以上圖為例羹奉,中括號內(nèi)就是 split-transform-merge秒旋,通過 cardinality(C) 的值控制 repeat layer诀拭。
output 在上下相鄰的格子不斷減半迁筛,中括號內(nèi)的逗號后面卷積核的個數(shù)不斷翻倍瑰煎。

等價模式
圖一右側(cè)的模型有兩個等價的模型析恋,最右側(cè)是 AlexNet 中提出的分組卷積,相同層的 width 分組卷積滓技,最終作者使用的是下圖最右邊的模型哩牍,更加簡潔并且訓練更快。

在這里插入圖片描述

8.densenet

文章提出的DenseNet(Dense Convolutional Network)主要還是和ResNet及Inception網(wǎng)絡做對比令漂,思想上有借鑒膝昆,但卻是全新的結(jié)構(gòu),網(wǎng)絡結(jié)構(gòu)并不復雜叠必,卻非常有效荚孵!眾所周知,最近一兩年卷積神經(jīng)網(wǎng)絡提高效果的方向挠唆,要么深(比如ResNet处窥,解決了網(wǎng)絡深時候的梯度消失問題)要么寬(比如GoogleNet的Inception),而作者則是從feature入手玄组,通過對feature的極致利用達到更好的效果和更少的參數(shù)滔驾。博主雖然看過的文章不算很多,但是看完這篇感覺心潮澎湃俄讹,就像當年看完ResNet那篇文章一樣哆致!

先列下DenseNet的幾個優(yōu)點,感受下它的強大:
1患膛、減輕了vanishing-gradient(梯度消失)
2摊阀、加強了feature的傳遞
3、更有效地利用了feature
4踪蹬、一定程度上較少了參數(shù)數(shù)量

幾張圖可以看出densenet的思想和結(jié)構(gòu)


在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

9.SENet(Squeeze-and-Excitation Networks)

參考鏈接:
https://www.cnblogs.com/bonelee/p/9030092.html
https://blog.csdn.net/yimingsilence/article/details/79233650
通過學習的方式來自動獲取到每個特征通道的重要程度胞此,然后依照這個重要程度去提升有用的特征并抑制對當前任務用處不大的特征.
已經(jīng)有很多工作在空間維度上來提升網(wǎng)絡的性能。那么很自然想到跃捣,網(wǎng)絡是否可以從其他層面來考慮去提升性能漱牵,比如考慮特征通道之間的關系?我們的工作就是基于這一點并提出了 Squeeze-and-Excitation Networks(簡稱 SENet)疚漆。在我們提出的結(jié)構(gòu)中酣胀,Squeeze 和 Excitation 是兩個非常關鍵的操作刁赦,所以我們以此來命名。我們的動機是希望顯式地建模特征通道之間的相互依賴關系闻镶。另外甚脉,我們并不打算引入一個新的空間維度來進行特征通道間的融合,而是采用了一種全新的「特征重標定」策略铆农。具體來說牺氨,就是通過學習的方式來自動獲取到每個特征通道的重要程度,然后依照這個重要程度去提升有用的特征并抑制對當前任務用處不大的特征墩剖。

在這里插入圖片描述

上圖是我們提出的 SE 模塊的示意圖波闹。給定一個輸入 x,其特征通道數(shù)為 c_1涛碑,通過一系列卷積等一般變換后得到一個特征通道數(shù)為 c_2 的特征。與傳統(tǒng)的 CNN 不一樣的是孵淘,接下來我們通過三個操作來重標定前面得到的特征蒲障。
首先是 Squeeze 操作,我們順著空間維度來進行特征壓縮瘫证,將每個二維的特征通道變成一個實數(shù)揉阎,這個實數(shù)某種程度上具有全局的感受野,并且輸出的維度和輸入的特征通道數(shù)相匹配背捌。它表征著在特征通道上響應的全局分布毙籽,而且使得靠近輸入的層也可以獲得全局的感受野,這一點在很多任務中都是非常有用的毡庆。
其次是 Excitation 操作坑赡,它是一個類似于循環(huán)神經(jīng)網(wǎng)絡中門的機制。通過參數(shù) w 來為每個特征通道生成權(quán)重么抗,其中參數(shù) w 被學習用來顯式地建模特征通道間的相關性毅否。
最后是一個 Reweight 的操作,我們將 Excitation 的輸出的權(quán)重看做是進過特征選擇后的每個特征通道的重要性蝇刀,然后通過乘法逐通道加權(quán)到先前的特征上螟加,完成在通道維度上的對原始特征的重標定。

在這里插入圖片描述

上左圖是將 SE 模塊嵌入到 Inception 結(jié)構(gòu)的一個示例吞琐。方框旁邊的維度信息代表該層的輸出捆探。
這里我們使用 global average pooling 作為 Squeeze 操作。緊接著兩個 Fully Connected 層組成一個 Bottleneck 結(jié)構(gòu)去建模通道間的相關性站粟,并輸出和輸入特征同樣數(shù)目的權(quán)重黍图。我們首先將特征維度降低到輸入的 1/16,然后經(jīng)過 ReLu 激活后再通過一個 Fully Connected 層升回到原來的維度卒蘸。這樣做比直接用一個 Fully Connected 層的好處在于:1)具有更多的非線性雌隅,可以更好地擬合通道間復雜的相關性翻默;2)極大地減少了參數(shù)量和計算量。然后通過一個 Sigmoid 的門獲得 0~1 之間歸一化的權(quán)重恰起,最后通過一個 Scale 的操作來將歸一化后的權(quán)重加權(quán)到每個通道的特征上修械。

10. BAM: Bottleneck Attention Module

我們把重心放在了Attention對于一般深度神經(jīng)網(wǎng)絡的影響上,我們提出了一個簡單但是有效的Attention 模型—BAM检盼,它可以結(jié)合到任何前向傳播卷積神經(jīng)網(wǎng)絡中肯污,我們的模型通過兩個分離的路徑 channel和spatial, 得到一個Attention Map.


在這里插入圖片描述

這里作者將BAM放在了Resnet網(wǎng)絡中每個stage之間。有趣的是吨枉,通過可視化我們可以看到多層BAMs形成了一個分層的注意力機制蹦渣,這有點像人類的感知機制。BAM在每個stage之間消除了像背景語義特征這樣的低層次特征貌亭,然后逐漸聚焦于高級的語義–明確的目標(比如圖中的單身狗)柬唯。


在這里插入圖片描述

Spatial attention branch
這個空間分支產(chǎn)生了空間Attention去增強或者抑制特征在不同的空間位置,眾所周知圃庭,利用上下文信息是去知道應該關注哪些位置的關鍵點锄奢。在這里我們?yōu)榱烁咝赃\用空洞卷積去增大感受野。
我們觀察到剧腻,與標準卷積相比拘央,空洞卷積有助于構(gòu)造更有效的spatial map.
細節(jié)圖:


在這里插入圖片描述

在這里插入圖片描述

11.CBAM: Convolutional Block Attention Module

Convolutional Block Attention Module (CBAM) 表示卷積模塊的注意力機制模塊。是一種結(jié)合了空間(spatial)和通道(channel)的注意力機制模塊书在。相比于senet只關注通道(channel)的注意力機制可以取得更好的效果灰伟。
它依然采用了block的形式,但是在每一個block上進行更加細致的設計來使得網(wǎng)絡的結(jié)構(gòu)更加合理有效儒旬。
整體的結(jié)構(gòu)如下圖

在這里插入圖片描述

作者采用了類似于人類attention栏账,也就是注意力的機制,對一個特征矩陣進行重新構(gòu)造义矛。注意力機制其實并不復雜发笔,就是采用一種可以學習的方式來對特征重新賦予權(quán)重,權(quán)重高的特征就是注意力的注意點凉翻。
注意力
從上面的結(jié)構(gòu)圖可以看到了讨,一個特征經(jīng)過一個Channel Attention Module和一個Spatial Attention Module被重新構(gòu)造,輸出了一個精修過的特征矩陣制轰。
通道注意力
首先是通道注意力前计,我們知道一張圖片經(jīng)過幾個卷積層會得到一個特征矩陣,這個矩陣的通道數(shù)就是卷積層核的個數(shù)垃杖。那么男杈,一個常見的卷積核經(jīng)常達到1024,2048個调俘,并不是每個通道都對于信息傳遞非常有用了的伶棒。因此旺垒,通過對這些通道進行過濾,也就是注意肤无,來得到優(yōu)化后的特征先蒋。
主要思路就是:增大有效通道權(quán)重,減少無效通道的權(quán)重宛渐。
公式如下:

在這里插入圖片描述

結(jié)構(gòu)如下:


在這里插入圖片描述

在通道維度上進行全局的pooling操作竞漾,再經(jīng)過同一個mlp得到權(quán)重,相加作為最終的注意力向量(權(quán)重)窥翩。
這里非常像SENet业岁,SENet在很多論文中都被證實對效果有提升,這里的區(qū)別是寇蚊,SENet采用的是平均值的pooling笔时,這篇論文又加入了最大值pooling。作者在論文中仗岸,通過對比實驗糊闽,證實max pooling提高了效果。
注意這里的mlp的中間層較小爹梁,這個可能有助于信息的整合。
空間注意力
論文中提澎,作者認為通道注意力關注的是:what姚垃,然而空間注意力關注的是:Where。
公式如下:

在這里插入圖片描述

結(jié)構(gòu)如下:
在這里插入圖片描述

模型
下圖是一個將論文的方法應用到ResNet的例子:

在這里插入圖片描述

12.(genet) Gather-Excite: Exploiting Feature Context in Convolutional Neural Networks

自底向上局部操作(bottom-up local)雖然可以匹配自然圖像的統(tǒng)計信息盼忌,但是可能防止模型捕獲上下文的長范圍的特征交互积糯。作者提出簡單方法,探索上下文信息利用(context exploitation)谦纱。引出一對操作看成,聚集gather和激活excite。聚集gather跨嘉,用于在某個較大空間范圍內(nèi)川慌,有效地聚集(aggregate)特征響應;激活excit祠乃,用于重新分配(redistribute)上面的池化信息到局部特征上梦重。帶有g(shù)ather-and-excite操作的ResNet-50,可以超越ResNet-101亮瓷。
Gather-Excite框架
受bag-of-visual-words啟發(fā)琴拧。GE操作如圖1所示。原文描述聚集操作非常正式(復雜)嘱支,簡單地說蚓胸,就是在特征圖上挣饥,逐層使用不同大小的濾波器(帶參數(shù)或不帶參數(shù))去聚集特征響應。不同大小就是選擇操作的范圍(extent)沛膳。激活操作就是把聚集操作后收集到的上下文信息扔枫,重新恢復到原來特征圖的空間大小,然后與之進行相乘于置。

在這里插入圖片描述

13 (sknet) SKNet: Selective Kernel Networks

SKNet同樣是一個輕量級嵌入式的模塊茧吊,其靈感來源是,我們在看不同尺寸不同遠近的物體時八毯,視覺皮層神經(jīng)元接受域大小是會根據(jù)刺激來進行調(diào)節(jié)的搓侄。那么對應于CNN網(wǎng)絡,一般來說對于特定任務特定模型话速,卷積核大小是確定的讶踪,那么是否可以構(gòu)建一種模型,使網(wǎng)絡可以根據(jù)輸入信息的多個尺度自適應的調(diào)節(jié)接受域大小呢泊交?
基于這種想法乳讥,作者提出了Selective Kernel Networks(SKNet)。結(jié)構(gòu)圖如下


在這里插入圖片描述

這個網(wǎng)絡主要分為Split廓俭,F(xiàn)use云石,Select三個操作:詳細介紹見SKNet

14 mobilenetV1

一、深度可分離卷積
標準的卷積過程可以看下圖研乒,一個2×2的卷積核在卷積時汹忠,對應圖像區(qū)域中的所有通道均被同時考慮,問題在于雹熬,為什么一定要同時考慮圖像區(qū)域和通道宽菜?我們?yōu)槭裁床荒馨淹ǖ篮涂臻g區(qū)域分開考慮?
深度可分離卷積提出了一種新的思路:對于不同的輸入channel采取不同的卷積核進行卷積竿报,它將普通的卷積操作分解為兩個過程铅乡。

在這里插入圖片描述

卷積過程
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

二、優(yōu)勢與創(chuàng)新
Depthwise+Pointwise可以近似看作一個卷積層:
? 普通卷積:3x3 Conv+BN+ReLU
? Mobilenet卷積:3x3 Depthwise Conv+BN+ReLU 和 1x1 Pointwise Conv+BN+ReLU
計算加速

  • 參數(shù)量降低
    假設輸入通道數(shù)為3烈菌,要求輸出通道數(shù)為256阵幸,兩種做法:
    1.直接接一個3×3×256的卷積核,參數(shù)量為:3×3×3×256 = 6,912
    2.DW操作芽世,分兩步完成侨嘀,參數(shù)量為:3×3×3 + 3×1×1×256 = 795(3個特征層(33的卷積核)),卷積深度參數(shù)通常取為1
  • 乘法運算次數(shù)降低
    對比一下不同卷積的乘法次數(shù):


    在這里插入圖片描述

    在這里插入圖片描述

15 MoibileNetv2

  1. Inverted residuals捂襟,通常的residuals block是先經(jīng)過一個11的Conv layer咬腕,把feature map的通道數(shù)“壓”下來,再經(jīng)過33 Conv layer葬荷,最后經(jīng)過一個1*1 的Conv layer涨共,將feature map 通道數(shù)再“擴張”回去纽帖。即先“壓縮”,最后“擴張”回去举反。
    而 inverted residuals就是 先“擴張”懊直,最后“壓縮”。為什么這么做呢火鼻?請往下看室囊。
  2. Linear bottlenecks,為了避免Relu對特征的破壞魁索。


    在這里插入圖片描述

主要是兩點:

  1. Depth-wise convolution之前多了一個1*1的“擴張”層融撞,目的是為了提升通道數(shù),獲得更多特征粗蔚;
  2. 最后不采用Relu尝偎,而是Linear,目的是防止Relu破壞特征鹏控。


    在這里插入圖片描述

主要不同之處就在于致扯,ResNet是:壓縮”→“卷積提特征”→“擴張”,MobileNetV2則是Inverted residuals,即:“擴張”→“卷積提特征”→ “壓縮当辐。

  • DWConv layer層提取得到的特征受限于輸入的通道數(shù)抖僵,若是采用以往的residual block,先“壓縮”缘揪,再卷積提特征台盯,那么DWConv layer可提取得特征就太少了撩独,因此一開始不“壓縮”扎运,MobileNetV2反其道而行户魏,一開始先“擴張”澡刹,本文實驗“擴張”倍數(shù)為6呻征。 通常residual block里面是 “壓縮”→“卷積提特征”→“擴張”,MobileNetV2就變成了 “擴張”→“卷積提特征”→ “壓縮”罢浇,因此稱為Inverted residuals
  • 當采用“擴張”→“卷積提特征”→ “壓縮”時陆赋,在“壓縮”之后會碰到一個問題,那就是Relu會破壞特征嚷闭。為什么這里的Relu會破壞特征呢攒岛?這得從Relu的性質(zhì)說起,Relu對于負的輸入胞锰,輸出全為零灾锯;而本來特征就已經(jīng)被“壓縮”,再經(jīng)過Relu的話嗅榕,又要“損失”一部分特征顺饮,因此這里不采用Relu吵聪,實驗結(jié)果表明這樣做是正確的,這就稱為Linear bottlenecks兼雄。


    在這里插入圖片描述

    在這里插入圖片描述

16 MobileNetV3

相對于v2吟逝,主要有3個變化:

  1. block結(jié)構(gòu)發(fā)生改變,在v2的bottleneck block里加入了Squeeze-and-Excitation block赦肋。
  2. 算法內(nèi)部微結(jié)構(gòu)變化块攒,把部分relu6使用hard-swish替換,把全部sigmoid使用hard-sigmoid替換佃乘。
  3. 使用Platform-Aware Neural Architecture Search(NAS)來形成網(wǎng)絡結(jié)構(gòu)囱井,并利用NetAdapt技術(shù)進一步篩選網(wǎng)絡層結(jié)構(gòu)。


    在這里插入圖片描述

    在這里插入圖片描述

    在這里插入圖片描述

參考文章:
論文筆記:CNN經(jīng)典結(jié)構(gòu)1(AlexNet恕稠,ZFNet琅绅,OverFeat,VGG鹅巍,GoogleNet千扶,ResNet)
深度學習之MobileNetV1
輕量級模塊SENet與SKNet詳解
ResNeXt算法詳解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骆捧,隨后出現(xiàn)的幾起案子澎羞,更是在濱河造成了極大的恐慌,老刑警劉巖敛苇,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妆绞,死亡現(xiàn)場離奇詭異,居然都是意外死亡枫攀,警方通過查閱死者的電腦和手機括饶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來来涨,“玉大人图焰,你說我怎么就攤上這事”钠” “怎么了技羔?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卧抗。 經(jīng)常有香客問我藤滥,道長,這世上最難降的妖魔是什么社裆? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任拙绊,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘时呀。我一直安慰自己张漂,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布谨娜。 她就那樣靜靜地躺著航攒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趴梢。 梳的紋絲不亂的頭發(fā)上漠畜,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音坞靶,去河邊找鬼憔狞。 笑死,一個胖子當著我的面吹牛彰阴,可吹牛的內(nèi)容都是我干的瘾敢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼尿这,長吁一口氣:“原來是場噩夢啊……” “哼簇抵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起射众,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤碟摆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叨橱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體典蜕,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年罗洗,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉舔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡伙菜,死狀恐怖轩缤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仇让,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布躺翻,位于F島的核電站丧叽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏公你。R本人自食惡果不足惜踊淳,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迂尝,春花似錦脱茉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溉躲,卻和暖如春榜田,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锻梳。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工箭券, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疑枯。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓辩块,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荆永。 傳聞我的和親對象是個殘疾皇子废亭,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容