Concat层解析
Concat層的作用就是將兩個及以上的特征圖按照在channel或num維度上進行拼接,并沒有eltwise層的運算操作,舉個例子,如果說是在channel維度上進行拼接conv_9和deconv_9的話,首先除了channel維度可以不一樣,其余維度必須一致(也就是num、H、W一致),這時候所做的操作僅僅是conv_9 的channel k1加上deconv_9的channel k2,Concat 層輸出的blob可表示為:N(k1+k2)H*W。通常情況下,考慮到Concat是希望將同大小的特征圖拼接起來,那為什么會產(chǎn)生同大小的特征圖呢?顯然離不開上采樣和下采樣的操作,接下來,以Caffe為例,介紹一下這兩種拼接的方式,如下:
選擇axis=0,表示在num維度上進行拼接,可表示為:((k_1+k_2) ext{*}C ext{*}H ext{*}W);
選擇axis=1,表示在channel維度上進行拼接,可表示為:(N ext{*}(k_1+k_2) ext{*}H ext{*}W)。
注意,卷積運算是三維的(不要想成二維的,當(dāng)然這應(yīng)該在學(xué)卷積的時候說過的),卷積核的數(shù)量就是feature map的channel,feature map的num通常是minibatch的數(shù)目。可問題是,這兩種Concat的方式應(yīng)該如何選擇呢?(ps:如果自己不會用,很自然就是看看別人怎么用)
那么接下來我們就看看到底怎么用。
目前我見過的大都是在channel維度上進行拼接,其實也容易想到,因為我們說feature map 的num是minibatch的圖片數(shù)目,比方我們的batch是32,但是我們有4張顯卡同時訓(xùn)練,顯然minibatch等于8,這個8表示的是每張顯卡一次性處理的圖片數(shù)目,這么說來,如果在num維度上拼接的意思就是將同一張顯卡處理的feature map數(shù)目重復(fù)的加倍了,當(dāng)然由于上下采樣并不是嚴(yán)格的互逆運算,所以在重復(fù)的特征圖上像素值還是存在差異。反之,如果是在channel 維度上拼接,此時channel 的數(shù)量增加了,也就是說同一個大小的特征圖有了更多的特征表示,很多論文都已經(jīng)證實其可以提高檢測性能,但是如果不是cancat的方式,而是增加原有的卷積層的channel數(shù)目會導(dǎo)致顯存占用增加,速度下降,這樣一來concat的方式在不失速度的前提下,提高了精度,這也是其主要的貢獻。當(dāng)然光說不行,我把這兩種方法都試驗一下,供大家參考。
在試驗之前介紹一下我的環(huán)境,我采用的是VGG模型加的改進,訓(xùn)練中用了4個TITAN X,minibatch等于8,在保證其它情況一致的情況下進行如下試驗:
在num維度上進行拼接;顯然,在num維度上拼接的話,concat層輸出的num個數(shù)就變成16了,如下表統(tǒng)計的結(jié)果顯示,此種操作的效果很差,出現(xiàn)missing GT position for label的warning,不建議使用。
在channel維度上進行拼接,在channel維度上的拼接分成無BN層和有BN層。
(1)無BN層:直接將deconvolution layer 和convolution layer concat。實驗結(jié)果表明,該方式取得的結(jié)果精度較低,低于原有的VGG模型,分析主要的原因是漏檢非常嚴(yán)重,原因應(yīng)該是concat連接的兩層參數(shù)不在同一個層級,類似BN層用在eltwise層上。
(2)有BN層:在deconvolution layer 和convolution layer 后面加batchnorm和scale層(BN)后再concat。實驗結(jié)果表明,該方式取得了比原有VGG模型更好的檢測效果(表中的迭代次數(shù)還沒有完哦),增加了2%的精度,但是速度上慢了一些。
總結(jié):concat層多用于利用不同尺度特征圖的語義信息,將其以增加channel的方式實現(xiàn)較好的性能,但往往應(yīng)該在BN之后再concat才會發(fā)揮它的作用,而在num維度的拼接較多使用在多任務(wù)問題上,將在后續(xù)的博客中介紹,總之concat層被廣泛運用在工程研究中。
https://www.cnblogs.com/cvtoEyes/p/8602739.html
總結(jié)
- 上一篇: 网游公会名字(网游名字大全霸气)
- 下一篇: APP界面设计之尺寸介绍