1.模型
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)CNN為了更好,更高效蹈集、更準(zhǔn)確的去挖掘深層特征烁试,會(huì)將網(wǎng)絡(luò)加深或者將網(wǎng)絡(luò)結(jié)構(gòu)變寬使得模型能更好的去描述輸入數(shù)據(jù)內(nèi)容,如google在2014年提出的Inception Net就是在原有的CNN網(wǎng)絡(luò)上添加了卷積核為1*1的邊緣卷積拢肆。具體如圖:
上圖顯示减响,inception moel共四個(gè)分支,四個(gè)分支都用到了1*1郭怪,來進(jìn)行低成本跨通道組織信息:①第一個(gè)分支采用了1*1的卷積支示,這也是NIN提出的一個(gè)重要結(jié)構(gòu)。1*1的卷積是一個(gè)非常好的結(jié)構(gòu)鄙才,它可以跨通道組織信息颂鸿,提高網(wǎng)絡(luò)的表達(dá)能力,同時(shí)可以對輸出通道升維和降維攒庵。②第二個(gè)分支先使用了1*1卷積嘴纺,然后連接3*3卷積,相當(dāng)于進(jìn)行了兩次特征變換浓冒。③第三個(gè)分支和第二個(gè)分支的作用類似栽渴,先是1*1卷積,然后連接5*5卷積稳懒。④第四個(gè)分支先是一個(gè)3*3最大池化闲擦,1*1卷積。inception model的4個(gè)分支在最后通過聚合操作合并(在輸出通道數(shù)這個(gè)維度上聚合)僚祷,其包含了3種不同尺寸的卷積和1個(gè)最大池化佛致,增加網(wǎng)絡(luò)對不同尺度的適應(yīng)性,這一部分和multi-scale的思想類似辙谜。也就是說稀疏結(jié)構(gòu)是非常適合神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)俺榆,尤其是對大而深的神經(jīng)網(wǎng)絡(luò),不僅可以減輕過擬合同時(shí)也可以降低計(jì)算量装哆。但是隨著網(wǎng)絡(luò)層次的加深罐脊,模型抽取出的特征也會(huì)更加抽象,使得模型最后忽略了數(shù)據(jù)中的細(xì)節(jié)信息蜕琴。并增加計(jì)算機(jī)的運(yùn)行成本萍桌,即耗時(shí)過長。因此凌简,CVPR2017年的Best Paper中出現(xiàn)了DenseNet來緩解網(wǎng)絡(luò)層數(shù)加深和變寬之后帶來的一系列問題上炎。DenseNet網(wǎng)絡(luò)脫離了原有的加深變寬思想,從特征角度去考慮。通過特征的重復(fù)使用和旁路設(shè)置(Bypass)設(shè)置,該網(wǎng)絡(luò)既大幅度減少了網(wǎng)絡(luò)的參數(shù)量,又在一定程度上緩解了gradient vanishing問題的產(chǎn)生.結(jié)合信息流和特征復(fù)用的假設(shè)藕施。具體網(wǎng)絡(luò)結(jié)構(gòu)如圖所示:
在同一個(gè)Denseblock中要求feature size保持相同大小,在不同Denseblock之間設(shè)置transition layers實(shí)現(xiàn)Down sampling, 在作者的實(shí)驗(yàn)中transition layer由BN + Conv(1×1) +2×2average-pooling組成寇损。在Denseblock中,假設(shè)每一個(gè)非線性變換H的輸出為K個(gè)feature map, 那么第i層網(wǎng)絡(luò)的輸入便為K0+(i-1)×K, 這里我們可以看到DenseNet和現(xiàn)有網(wǎng)絡(luò)的一個(gè)主要的不同點(diǎn):DenseNet可以接受較少的特征圖數(shù)量作為網(wǎng)絡(luò)層的輸出,如下圖所示:
原因就是在同一個(gè)Denseblock中的每一層都與之前所有層相關(guān)聯(lián),如果我們把feature看作是一個(gè)Denseblock的全局狀態(tài),那么每一層的訓(xùn)練目標(biāo)便是通過現(xiàn)有的全局狀態(tài),判斷需要添加給全局狀態(tài)的更新值.因而每個(gè)網(wǎng)絡(luò)層輸出的特征圖數(shù)量K又稱為Growthrate,同樣決定著每一層需要給全局狀態(tài)更新的信息的多少.我們之后會(huì)看到,在作者的實(shí)驗(yàn)中只需要較小的K便足以實(shí)現(xiàn)state-of-art的性能.雖然DenseNet接受較少的k,也就是feature map的數(shù)量作為輸出,但由于不同層featuremap之間由cat操作組合在一起,最終仍然會(huì)是feature map的channel較大而成為網(wǎng)絡(luò)的負(fù)擔(dān).作者在這里使用1×1Conv(Bottleneck)作為特征降維的方法來降低channel數(shù)量,以提高計(jì)算效率.經(jīng)過改善后的非線性變換變?yōu)锽N-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3),使用Bottlenecklayers的DenseNet被作者稱為DenseNet-B.在實(shí)驗(yàn)中,作者使用1×1卷積生成channel數(shù)量為4k的featuremap。為了進(jìn)一步優(yōu)化模型的簡潔性,我們同樣可以在transition layer中降低featuremap的數(shù)量.若一個(gè)Denseblock中包含m個(gè)feature maps,那么我們使其輸出連接的transitionlayer層生成?θm?個(gè)輸出feature map.其中θ為Compression factor, 當(dāng)θ=1時(shí),transitionlayer將保留原feature維度不變.作者將使用compression且θ=0.5的DenseNet命名為DenseNet-C, 將使用Bottleneck和compression且θ=0.5的DenseNet命名為DenseNet-BC裳食。
從圖中我們可以得出以下結(jié)論:a) 一些較早層提取出的特征仍可能被較深層直接使用矛市。b) 即使是Transition layer也會(huì)使用到之前Denseblock中所有層的特征。c) 第2-3個(gè)Denseblock中的層對之前Transition layer利用率很低,說明transition layer輸出大量冗余特征.這也為DenseNet-BC提供了證據(jù)支持,既Compression的必要性诲祸。d) 最后的分類層雖然使用了之前Denseblock中的多層信息,但更偏向于使用最后幾個(gè)feature map的特征,說明在網(wǎng)絡(luò)的最后幾層,某些high-level的特征可能被產(chǎn)生浊吏。
實(shí)驗(yàn)結(jié)果:
作者在多個(gè)benchmark數(shù)據(jù)集上訓(xùn)練了多種DenseNet模型,并與state-of-art的模型(主要是ResNet和其變種)進(jìn)行對比:
由上表我們可以看出,DenseNet只需要較小的Growth rate(12,24)便可以實(shí)現(xiàn)state-of-art的性能,結(jié)合了Bottleneck和Compression的DenseNet-BC具有遠(yuǎn)小于ResNet及其變種的參數(shù)數(shù)量,且無論DenseNet或者DenseNet-BC,都在原始數(shù)據(jù)集和增廣數(shù)據(jù)集上實(shí)現(xiàn)了超越ResNet的性能。
本文具體代碼和本人改進(jìn)代碼見:https://github.com/LLAYGDD/DenseNet.git