1. 程式人生 > >Inception-v4與Inception-ResNet結構詳解(原創)

Inception-v4與Inception-ResNet結構詳解(原創)

Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning,原文連結:https://arxiv.org/pdf/1602.07261.pdf

微軟亞洲研究院的何愷明在2015年提出了震驚業界的ResNet結構,這種結構和以往的Inception結構走了兩條不同的道路:前者主要關注加大網路深度後的收斂問題,而Inception更關注特徵維度上的利用。如果把這兩種方法結合起來會有什麼效果呢?Szegedy在2016年就試驗了一把,把這兩種 最頂尖的結構混合到一起提出了Inception-ResNet,它的收斂速度更快但在錯誤率上和同層次的Inception相同;Szegedy還對自己以前提出的Inception-v3進行了一番改良,提出了Inception-v4。Inception-v4與Inception-ResNet整合的結構在ImageNet競賽上達到了3.08%的top5錯誤率,也算當時的state-of-art performance了。下面分別來看看著兩種結構是怎麼優化的:

一、Inception-v4

Szegedy在2015年提出了Inception-v3的結構,Inception-v3的大部分結構仍是copy之前的v2、v1的,這主要是為分片訓練考慮。2015年還沒有tensorflow,如果整個結構在一臺機器上訓練就會佔用較多的記憶體,所以需要把整個結構copy多臺機器上跑,每臺機器跑其中的一部分結構。分片訓練時需要考慮各個機器上計算量的平衡來縮短總的訓練時間,所以結構設計時會有很多限制。但到了2016年,Tensorflow開始廣泛使用,Tensorflow對記憶體的佔用做了很多優化,這時就不需要將整個結構分片來訓練了,在這樣的前提下Szegedy就開始了大刀闊斧的優化,有了Inception-v4。

圖1左側是Inception-v4的整體結構,圖1右側是其中的stem部分,用於對進入Inception模組前的資料進行預處理。stem部分其實就是多次卷積+2次pooling,pooling採用了Inception-v3論文裡提到的卷積+pooling並行的結構,來防止bottleneck問題。stem後用了3種共14個Inception模組(圖2),三種Inception模組具體是怎麼取捨引數的論文沒有過多解釋,估計還是靠經驗判斷吧。三種Inception模組間的Reduction模組(圖3)起到pooling作用,同樣使用了並行的結構來防止bottleneck問題。

圖1: Inception-v4結構
圖2:從左到右分別為Inception-v4中的 Inception A、 Inception B、 Inception C模組 圖3: Inception-v4中的 Reduction模組

二、Inception-ResNet

Szegedy把Inception和ResNet混合,設計了多種Inception-ResNet結構,在論文中Szegedy重點描述了Inception-ResNet-v1(在Inception-v3上加入ResNet)和Inception-ResNet-v2(在Inception-v4上加入ResNet),具體結構見圖4和圖5

圖4: Inception-ResNet-v1 整體結構圖4: Inception-ResNet-v1 整體結構 圖5: Inception-ResNet-v1 的三種 Inception 結構

效能測試結果我就不貼了,詳細資料請看原文連結。