concat特征融合_深度特征融合---理解add和concat之多层特征融合
一、如何理解concat和add的方式融合特征
在各個網絡模型中,ResNet,FPN等采用的element-wise add來融合特征,而DenseNet等則采用concat來融合特征。那add與concat形式有什么不同呢?事實上兩者都可以理解為整合特征圖信息。只不過concat比較直觀,而add理解起來比較生澀。
從圖中可以發現,
concat是通道數的增加;
add是特征圖相加,通道數不變
你可以這么理解,add是描述圖像的特征下的信息量增多了,但是描述圖像的維度本身并沒有增加,只是每一維下的信息量在增加,這顯然是對最終的圖像的分類是有益的。而concatenate是通道數的合并,也就是說描述圖像本身的特征數(通道數)增加了,而每一特征下的信息是沒有增加。
concat每個通道對應著對應的卷積核。 而add形式則將對應的特征圖相加,再進行下一步卷積操作,相當于加了一個先驗:對應通道的特征圖語義類似,從而對應的特征圖共享一個卷積核(對于兩路輸入來說,如果是通道數相同且后面帶卷積的話,add等價于concat之后對應通道共享同一個卷積核)。
因此add可以認為是特殊的concat形式。但是add的計算量要比concat的計算量小得多。
另解釋:
對于兩路輸入來說,如果是通道數相同且后面帶卷積的話,add等價于concat之后對應通道共享同一個卷積核。下面具體用式子解釋一下。由于每個輸出通道的卷積核是獨立的,我們可以只看單個通道的輸出。假設兩路輸入的通道分別為X1, X2, …, Xc和Y1, Y2, …, Yc。那么concat的單個輸出通道為(*表示卷積):
而add的單個輸出通道為:
因此add相當于加了一種prior,當兩路輸入可以具有“對應通道的特征圖語義類似”(可能不太嚴謹)的性質的時候,可以用add來替代concat,這樣更節省參數和計算量(concat是add的2倍)。FPN[1]里的金字塔,是希望把分辨率最小但語義最強的特征圖增加分辨率,從性質上是可以用add的。如果用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 Densenet
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中的那部分。
DenseBlock結構
上圖是一個詳細的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 單元,即1×1卷積進行降維,被降到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模塊中加入了11卷積做降維。
其中,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
這里我們嘗試了兩種融合策略:concat和add
Concatenation Module
Element-Sum Module
3.3 Scene Classification Based on Two-Stage Deep Feature Fusion
https://www.cnblogs.com/blog4ljy/p/8697313.html
3.4 Deep Heterogeneous Feature Fusion for Template-Based Face Recognition
https://blog.csdn.net/u011732139/article/details/69943954
總結
以上是生活随笔為你收集整理的concat特征融合_深度特征融合---理解add和concat之多层特征融合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发送编辑器里面的内容_【公众号运营技巧7
- 下一篇: m40型工业机器人_工业机器人4大控制方