Densely Connected Convolutional Networks
前言
在計(jì)算機(jī)視覺(jué)領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)(CNN)已經(jīng)成為最主流的方法债鸡,比如GoogLenet,VGG-19等模型。CNN史上的一個(gè)里程碑事件是ResNet模型的出現(xiàn),ResNet可以訓(xùn)練出更深的CNN模型枝哄,從而實(shí)現(xiàn)更高的準(zhǔn)確度。ResNet模型的核心是通過(guò)建立前面層與后面層之間的“短路連接”(shortcuts闰非,skip connection)膘格,這有助于訓(xùn)練過(guò)程中梯度的反向傳播堕绩,從而能訓(xùn)練出更深的CNN網(wǎng)絡(luò)腔剂。今天我們要介紹的是DenseNet模型痴脾,它的基本思路與ResNet一致,但是它建立的是前面所有層與后面層的密集連接(dense connection)辆毡,它的名稱(chēng)也是由此而來(lái)。DenseNet的另一大特色是通過(guò)特征在channel上的連接來(lái)實(shí)現(xiàn)特征重用(feature reuse)甜害。這些特點(diǎn)讓DenseNet在參數(shù)和計(jì)算成本更少的情形下實(shí)現(xiàn)比ResNet更優(yōu)的性能舶掖。
如上所述,DenseNet網(wǎng)絡(luò)架構(gòu)中尔店,每?jī)蓚€(gè)層之間都有直接的連接眨攘,因此該網(wǎng)絡(luò)的直接連接個(gè)數(shù)為L(L+1)/2,對(duì)于每一層嚣州,使用前面所有的層的特征映射作為輸入鲫售,并且使其自身的特征映射作為所有后續(xù)層的輸入。
DenseNet的優(yōu)點(diǎn):
(1)緩解了消失梯度問(wèn)題
(2)實(shí)現(xiàn)特征重用该肴,加強(qiáng)了特征傳播
(3)模型大大減少了參數(shù)的數(shù)量
示例:(一個(gè)5層的密集塊)
設(shè)計(jì)理念
相比ResNet情竹,DenseNet提出了一個(gè)更激進(jìn)的密集連接機(jī)制:即互相連接所有的層,具體來(lái)說(shuō)就是每個(gè)層都會(huì)接受其前面所有層作為其額外的輸入匀哄。圖1為ResNet網(wǎng)絡(luò)的連接機(jī)制秦效,作為對(duì)比,圖2為DenseNet的密集連接機(jī)制涎嚼≮逯荩可以看到,ResNet是模塊化(Residual Block)的法梯,每個(gè)模塊的最后一層與前面的某層(一般是2~3層)短路連接在一起苔货,連接方式是通過(guò)元素級(jí)相加。而在DenseNet中,每個(gè)層都會(huì)與前面所有層在channel維度上連接(concat)在一起(這里各個(gè)層的特征圖大小是相同的蒲赂,后面會(huì)有說(shuō)明)阱冶,并作為下一層的輸入。對(duì)于一個(gè)L層的網(wǎng)絡(luò)DenseNet共包含
如果用公式表示的話(huà)晦譬,傳統(tǒng)的網(wǎng)絡(luò)在L層的輸出為:
而對(duì)于ResNet,會(huì)增加了一個(gè)前面的輸入:
在DenseNet中互广,會(huì)連接前面所有層作為輸入:
代表是非線性轉(zhuǎn)化函數(shù)(non-liear transformation),它是一個(gè)組合操作惫皱,其可能包括一系列的BN(Batch Normalization)像樊,ReLU,Pooling及Conv操作旅敷。注意這里L(fēng)層與 L-1 層之間可能實(shí)際上包含多個(gè)卷積層生棍。
DenseNet的前向過(guò)程如圖3所示,可以更直觀地理解其密集連接方式:
CNN網(wǎng)絡(luò)一般要經(jīng)過(guò)Pooling或者stride>1的Conv來(lái)降低特征圖的大小媳谁,而DenseNet的密集連接方式需要前后特征圖大小保持一致涂滴。為了解決這個(gè)問(wèn)題,DenseNet網(wǎng)絡(luò)中使用DenseBlock+Transition的結(jié)構(gòu)晴音,其中DenseBlock是包含很多層的模塊柔纵,每個(gè)層的特征圖大小相同,層與層之間采用密集連接方式段多。而Transition模塊是連接兩個(gè)相鄰的DenseBlock首量,并且通過(guò)Pooling使特征圖大小降低。圖4給出了DenseNet的網(wǎng)路結(jié)構(gòu)进苍,它共包含4個(gè)DenseBlock加缘,各個(gè)DenseBlock之間通過(guò)Transition連接在一起。
網(wǎng)絡(luò)結(jié)構(gòu)
如前所示觉啊,DenseNet的網(wǎng)絡(luò)結(jié)構(gòu)主要由DenseBlock和Transition組成拣宏,如圖5所示。下面具體介紹網(wǎng)絡(luò)的具體實(shí)現(xiàn)細(xì)節(jié)杠人。
一.DenseBlock
在DenseBlock中勋乾,各個(gè)層的特征圖大小一致宋下,可以在channel維度上連接。DenseBlock中的非線性組合函數(shù)H(.)采用的是BN+ReLU+3x3 Conv的結(jié)構(gòu)辑莫,如圖6所示学歧。另外值得注意的一點(diǎn)是,與ResNet不同各吨,所有DenseBlock中各個(gè)層卷積之后均輸出 K個(gè)特征圖枝笨,即得到的特征圖的channel數(shù)為K ,或者說(shuō)采用K個(gè)卷積核揭蜒。 K在DenseNet稱(chēng)為growth rate横浑,這是一個(gè)超參數(shù)。一般情況下使用較小的K(比如12)屉更,就可以得到較佳的性能徙融。假定輸入層的特征圖的channel數(shù)為 K0,那么 L層輸入的channel數(shù)為 K0+K(L-1)瑰谜,因此隨著層數(shù)增加欺冀,盡管K設(shè)定得較小,DenseBlock的輸入會(huì)非常多萨脑,不過(guò)這是由于特征重用所造成的脚猾,每個(gè)層僅有K特征是自己獨(dú)有的。
由于后面層的輸入會(huì)非常大砚哗,DenseBlock內(nèi)部可以采用bottleneck層來(lái)減少計(jì)算量,主要是原有的結(jié)構(gòu)中增加1x1 Conv砰奕,如圖7所示蛛芥,即BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,稱(chēng)為DenseNet-B結(jié)構(gòu)军援。其中1x1 Conv得到4K個(gè)特征圖它起到的作用是降低特征數(shù)量仅淑,從而提升計(jì)算效率。
二.Transition
對(duì)于Transition層胸哥,它主要是連接兩個(gè)相鄰的DenseBlock涯竟,并且降低特征圖大小。Transition層包括一個(gè)1x1的卷積和2x2的AvgPooling空厌,結(jié)構(gòu)為BN+ReLU+1x1 Conv+2x2 AvgPooling庐船。另外,Transition層可以起到壓縮模型的作用嘲更。假定Transition的上接DenseBlock得到的特征圖channels數(shù)為m筐钟,Transition層可以產(chǎn)生tm個(gè)特征(通過(guò)卷積層),其中t是壓縮系數(shù)(compression rate),范圍是(0,1]赋朦。當(dāng) t=1 時(shí)篓冲,特征個(gè)數(shù)經(jīng)過(guò)Transition層沒(méi)有變化李破,即無(wú)壓縮;而當(dāng)壓縮系數(shù)小于1時(shí),這種結(jié)構(gòu)稱(chēng)為DenseNet-C壹将,文中使用t=0.5 嗤攻。對(duì)于使用bottleneck層的DenseBlock結(jié)構(gòu)和壓縮系數(shù)小于1的Transition組合結(jié)構(gòu)稱(chēng)為DenseNet-BC。