Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning,原文鏈接:https://arxiv.org/pdf/1602.07261.pdf
微軟亞洲研究院的何愷明在2015年提出了震驚業(yè)界的ResNet結(jié)構(gòu),這種結(jié)構(gòu)和以往的Inception結(jié)構(gòu)走了兩條不同的道路:前者主要關(guān)注加大網(wǎng)絡(luò)深度后的收斂問題,而Inception更關(guān)注特征維度上的利用。如果把這兩種方法結(jié)合起來會有什么效果呢?Szegedy在2016年就試驗(yàn)了一把,把這兩種 最頂尖的結(jié)構(gòu)混合到一起提出了Inception-ResNet,它的收斂速度更快但在錯誤率上和同層次的Inception相同;Szegedy還對自己以前提出的Inception-v3進(jìn)行了一番改良,提出了Inception-v4。Inception-v4與Inception-ResNet集成的結(jié)構(gòu)在ImageNet競賽上達(dá)到了3.08%的top5錯誤率,也算當(dāng)時的state-of-art performance了。下面分別來看看著兩種結(jié)構(gòu)是怎么優(yōu)化的:
一、Inception-v4
Szegedy在2015年提出了Inception-v3的結(jié)構(gòu),Inception-v3的大部分結(jié)構(gòu)仍是copy之前的v2、v1的,這主要是為分片訓(xùn)練考慮。2015年還沒有tensorflow,如果整個結(jié)構(gòu)在一臺機(jī)器上訓(xùn)練就會占用較多的內(nèi)存,所以需要把整個結(jié)構(gòu)copy多臺機(jī)器上跑,每臺機(jī)器跑其中的一部分結(jié)構(gòu)。分片訓(xùn)練時需要考慮各個機(jī)器上計算量的平衡來縮短總的訓(xùn)練時間,所以結(jié)構(gòu)設(shè)計時會有很多限制。但到了2016年,Tensorflow開始廣泛使用,Tensorflow對內(nèi)存的占用做了很多優(yōu)化,這時就不需要將整個結(jié)構(gòu)分片來訓(xùn)練了,在這樣的前提下Szegedy就開始了大刀闊斧的優(yōu)化,有了Inception-v4。
圖1左側(cè)是Inception-v4的整體結(jié)構(gòu),圖1右側(cè)是其中的stem部分,用于對進(jìn)入Inception模塊前的數(shù)據(jù)進(jìn)行預(yù)處理。stem部分其實(shí)就是多次卷積+2次pooling,pooling采用了Inception-v3論文里提到的卷積+pooling并行的結(jié)構(gòu),來防止bottleneck問題。stem后用了3種共14個Inception模塊(圖2),三種Inception模塊具體是怎么取舍參數(shù)的論文沒有過多解釋,估計還是靠經(jīng)驗(yàn)判斷吧。三種Inception模塊間的Reduction模塊(圖3)起到pooling作用,同樣使用了并行的結(jié)構(gòu)來防止bottleneck問題。



二、Inception-ResNet
Szegedy把Inception和ResNet混合,設(shè)計了多種Inception-ResNet結(jié)構(gòu),在論文中Szegedy重點(diǎn)描述了Inception-ResNet-v1(在Inception-v3上加入ResNet)和Inception-ResNet-v2(在Inception-v4上加入ResNet),具體結(jié)構(gòu)見圖4和圖5


性能測試結(jié)果我就不貼了,詳細(xì)數(shù)據(jù)請看原文鏈接。