天天看點

PRID-了解add和concat之多層特征融合二、concat實操

一、如何了解concat和add的方式融合特征

在各個網絡模型中,ResNet,FPN等采用的element-wise add來融合特征,而DenseNet等則采用concat來融合特征。那add與concat形式有什麼不同呢?事實上兩者都可以了解為整合特征圖資訊。隻不過concat比較直覺,而add了解起來比較生澀。

PRID-了解add和concat之多層特征融合二、concat實操

從圖中可以發現,

  • concat是通道數的增加;
  • add是特征圖相加,通道數不變

你可以這麼了解,add是描述圖像的特征下的資訊量增多了,但是描述圖像的次元本身并沒有增加,隻是每一維下的資訊量在增加,這顯然是對最終的圖像的分類是有益的。而concatenate是通道數的合并,也就是說描述圖像本身的特征數(通道數)增加了,而每一特征下的資訊是沒有增加。

concat每個通道對應着對應的卷積核。 而add形式則将對應的特征圖相加,再進行下一步卷積操作,相當于加了一個先驗:對應通道的特征圖語義類似,進而對應的特征圖共享一個卷積核(對于兩路輸入來說,如果是通道數相同且後面帶卷積的話,add等價于concat之後對應通道共享同一個卷積核)。

是以add可以認為是特殊的concat形式。但是add的計算量要比concat的計算量小得多。

另解釋:

對于兩路輸入來說,如果是通道數相同且後面帶卷積的話,add等價于concat之後對應通道共享同一個卷積核。下面具體用式子解釋一下。由于每個輸出通道的卷積核是獨立的,我們可以隻看單個通道的輸出。假設兩路輸入的通道分别為X1, X2, …, Xc和Y1, Y2, …, Yc。那麼concat的單個輸出通道為(*表示卷積):

PRID-了解add和concat之多層特征融合二、concat實操

 而add的單個輸出通道為:

PRID-了解add和concat之多層特征融合二、concat實操

 是以add相當于加了一種prior,當兩路輸入可以具有“對應通道的特征圖語義類似”(可能不太嚴謹)的性質的時候,可以用add來替代concat,這樣更節省參數和計算量(concat是add的2倍)。FPN[1]裡的金字塔,是希望把分辨率最小但語義最強的特征圖增加分辨率,從性質上是可以用add的。如果用concat,因為分辨率小的特征通道數更多,計算量是一筆不少的開銷。

PRID-了解add和concat之多層特征融合二、concat實操

 Resnet是做值的疊加,通道數是不變的,DenseNet是做通道的合并。你可以這麼了解,add是描述圖像的特征下的資訊量增多了,但是描述圖像的次元本身并沒有增加,隻是每一維下的資訊量在增加,這顯然是對最終的圖像的分類是有益的。而concatenate是通道數的合并,也就是說描述圖像本身的特征增加了,而每一特征下的資訊是沒有增加。

參考文章:https://blog.csdn.net/u012193416/article/details/79479935

通過keras代碼,觀察了add對參數的影響,以及concat操作數組的結果。

二、concat實操

Concat層解析

https://blog.csdn.net/weixin_36608043/article/details/82859673

在channel次元上進行拼接,在channel次元上的拼接分成無BN層和有BN層。

(1)無BN層:直接将deconvolution layer 和convolution layer concat。實驗結果表明,該方式取得的結果精度較低,低于原有的VGG模型,分析主要的原因是漏檢非常嚴重,原因應該是concat連接配接的兩層參數不在同一個層級,類似BN層用在eltwise層上。

(2)有BN層:在deconvolution layer 和convolution layer 後面加batchnorm和scale層(BN)後再concat。實驗結果表明,該方式取得了比原有VGG模型更好的檢測效果(表中的疊代次數還沒有完哦),增加了2%的精度,但是速度上慢了一些。

總結:concat層多用于利用不同尺度特征圖的語義資訊,将其以增加channel的方式實作較好的性能,但往往應該在BN之後再concat才會發揮它的作用,而在num次元的拼接較多使用在多任務問題上,将在後續的部落格中介紹,總之concat層被廣泛運用在工程研究中。

三、concat與add執行個體

3.1 Densnet

https://blog.csdn.net/Gentleman_Qin/article/details/84638700

與inception 的加寬網絡結構以及ResNet的加深網絡結構不同,DenseNet着重于對每一層feature maps的重複利用。在一個Dense block中,每一個卷積層的輸入都是前幾個卷積層輸出的concatenation(拼接),這樣即每一次都結合了前面所得到的特征,來得到後續的特征。但是,其顯存占用率高的缺點也比較明顯

(因為concatenation,不過好在後續有了解決方法:(論文)Memory-Efficient Implementation of DenseNets)。

DenseNet優勢:

(1)解決了深層網絡的梯度消失問題

(2)加強了特征的傳播

(3)鼓勵特征重用

(4)減少了模型參數

(5)能夠減少小樣本的過拟合問題

DensNet缺點:

(1)非常消耗顯存

Densnet基本結構

DenseNet的網絡基本結構如上圖所示,主要包含DenseBlock和transition layer兩個組成子產品。其中Dense Block為稠密連接配接的highway的子產品,transition layer為相鄰2個Dense Block中的那部分。

PRID-了解add和concat之多層特征融合二、concat實操

DenseBlock結構

PRID-了解add和concat之多層特征融合二、concat實操

上圖是一個詳細的Dense Block子產品,其中

  • 層數為5,即具有5個BN+Relu+Conv(3*3)這樣的layer,
  • 網絡增長率為4,簡單的說就是每一個layer輸出的feature map的次元為4。
  • 由于DenseNet的每一個Dense Block子產品都利用到了該子產品中前面所有層的資訊,即每一個layer都和前面的layer有highway的稠密連接配接。假設一個具有L層的網絡,那麼highway稠密連接配接數目為L*(L+1)/2。

和Resnet不同的是,這裡的連接配接方式得到的feature map做的是concat操作,而resnet中做的是elementwise操作。

DenseNet降維

highway的稠密連接配接方式具有諸多的優勢,增加了梯度的傳遞,特征得到了重用,甚至減少了在小樣本資料上的過拟合。但是随之産生2個缺點:

(1)DenseBlock靠後面的層的輸入channel過大—每層開始的時候引入Bottleneck:

這裡假設第L層輸出K個feature map,即網絡增長率為K,那麼第L層的輸入為K0+K*(L-1),其中K0為輸入層的次元。也就是說,對于Dense Block子產品中每一層layer的輸入feature map時随着層數遞增的,每次遞增為K,即網絡增長率。那麼這樣随着Dense Block子產品深度的加深,後面的層的輸入feature map的次元是很大的。

為了解決這個問題,在DenseNet-B網絡中,在Dense Block每一層開始的時候加入了Bottleneck 單元,即1x1卷積進行降維,被降到4K維(K為增長率)。

(2) DenseBlock子產品的輸出次元很大—transition layer子產品中加入1*1卷積降維

每一個DenseBlock子產品的輸出次元是很大的,假設一個L層的Dense Block子產品,假設其中已經加入了Bottleneck 單元,那麼輸出的次元為,第1層的次元+第2層的次元+第3層的次元+****第L層的次元,加了Bottleneck單元後每層的輸出次元為4K,那麼最終Dense Block子產品的輸出次元為4KL。随着層數L的增加,最終輸出的feature map的次元也是一個很大的數。

為了解決這個問題,在transition layer子產品中加入了1x1卷積做降維。 

PRID-了解add和concat之多層特征融合二、concat實操
PRID-了解add和concat之多層特征融合二、concat實操

其中,DenseNet-B在原始DenseNet的基礎上,在Dense Block子產品的每一層都加入了1*1卷積,使得将每一個layer輸入的feature map都降為到4k的次元,大大的減少了計算量。

DenseNet-BC在DenseNet-B的基礎上,在transitionlayer子產品中加入了壓縮率θ參數,論文中将θ設定為0.5,這樣通過1*1卷積,将上一個Dense Block子產品的輸出feature map次元減少一半。

附:tensorflow下實作DenseNet對資料集cifar-10的圖像分類

https://blog.csdn.net/k87974/article/details/80352315

3.2 Feature-Fused SSD: Fast Detection for Small Objects

https://blog.csdn.net/zhangjunhit/article/details/78031452

PRID-了解add和concat之多層特征融合二、concat實操

這裡我們嘗試了兩種融合政策:concat和add

Concatenation Module

PRID-了解add和concat之多層特征融合二、concat實操

Element-Sum Module

PRID-了解add和concat之多層特征融合二、concat實操

3.3 Scene Classification Based on Two-Stage Deep Feature Fusion

https://www.cnblogs.com/blog4ljy/p/8697313.html

PRID-了解add和concat之多層特征融合二、concat實操

3.4 Deep Heterogeneous Feature Fusion for Template-Based Face Recognition

https://blog.csdn.net/u011732139/article/details/69943954

PRID-了解add和concat之多層特征融合二、concat實操
PRID-了解add和concat之多層特征融合二、concat實操

轉載位址:https://blog.csdn.net/xys430381_1/article/details/88355956