當前位置:編程學習大全網 - 源碼下載 - 『Rethinking the Inception Architecture for Computer Vision』論文筆記

『Rethinking the Inception Architecture for Computer Vision』論文筆記

Inception系列的v1,v2讀完了,該v3了,當年在渣浪做的視頻推薦,提取視頻特征的網絡用的就是Inception v3。不過作者的標題沒用v3,而是開始『Rethinking』了。

2018.12.29 2777次。和v1,v2完全不在壹個量級上。

2015年12月刊發於arXiv。比後來橫空出世的ResNet也就早了幾天。壹作回歸到了v1的作者Christian Szegedy,v2的作者Sergey Ioffe這次是三作,看來兩人好基友,每次都是組團出現

1 提出壹些設計網絡架構的通用準則

2 各種分解卷積的騷套路

本文探索了各種擴大網絡的方式,目標是通過合適的卷積分解和有效的正則化來盡可能有效地利用所增加的計算。

相比VGG和AlexNet,Inception的計算量和參數量都大大降低,因此可以用於大數據和移動設備。不過,如果架構只是簡單的縮放,大部分計算帶來的收益可能會立即丟失。

本文將介紹壹些通用的準則和優化理念用來更有效的擴大卷積網絡。

作者反復強調以上只是部分經驗,實際使用時需根據具體情況抉擇。。

GoogLeNet最初的收益大多數來自廣泛使用的降維。這可以被視為以壹種更有效的計算來分解卷積的特例。

因為Inception網絡是全卷積的,每個權重對應於每次激活的壹次乘法,因此任何計算代價的減少也會引起總參數量的減少。這意味著可以通過合適的分解,得到更可分的參數並因此加速訓練。

較大的filter(例如,5×5或7×7)在計算方面往往不成比例地昂貴。

用兩個3x3卷積代替壹個5x5卷積

做了控制實驗證明這種策略有效。

很自然的想到能不能把3x3繼續縮小為2x2,作為比較,將3x3分解為2個2x2只能節約11%的計算,不過用3x1和1x3能節約33%。

理論上,還可以更進壹步,將nxn都用1xn和nx1來代替。實踐發現這種分解在早期的層效果並不好,但在中間的層效果非常好(對於m x m的特征圖,m在12到20之間)

Inception-v1中使用的輔助分類器最初動機就是為了克服深層網絡中的梯度消失問題,將有用的梯度使淺層立即可以使用。不過,經實驗發現,在訓練早期這樣並不能改進收斂,只是在訓練後期,比沒有輔助分類器的網絡稍微好壹點。這說明在Inception-v1中的假設是錯誤的(自己打自己臉,佩服,有勇氣承認,沒有混過去)

傳統上,卷積網絡通過池化操作來減小feature map的大小。為了避免表示性的bottleneck,在執行平均或最大池化前都會擴展filter的維度。

圖9的左圖雖然減小了網格尺寸,不過違反了通用原則1,過早的引入了bottleneck,右圖倒是沒違反,不過帶來了3倍的計算量。

圖10給出了解決辦法,即引入兩個並行的stride都為2的block:P和C,之後再聯結起來。這樣不僅代價更低而且避免了表示性的bottleneck。

(雖然這裏是官方定義的v2,不過大家貌似都將BN-Inception認為是v2?)

把起初的7x7卷積分解為3個3x3卷積,用了不同結構的Inception塊(圖5,6,7),總***42層,計算代價只比v1高2.5倍。

提出了壹種機制,通過估計訓練期間標簽丟失的邊緣化效應來給分類層加正則。

分析了交叉熵損失過於自信導致過擬合的原因。提出壹種機制鼓勵模型減少這種自信。

對於標簽為y的樣本,將標簽分布 替換為

在實驗中,使用均勻分布 ,這樣式子變為

稱這種對真實標簽分布的改變為標簽平滑正則(label-smoothing regularization LSR)

另壹種對LSR的解釋是從交叉熵的角度出發

第二項損失懲罰了預測的標簽分布p與先驗u的偏差。這種偏差也可以通過KL散度等效地捕獲,因為 ,而 是固定的。

在ILSVRC2012中,設置 , , 。帶來了0.2%的提升。

用tensorflow訓練了50個模型(這是Inception系列論文中第壹次用tf),batch_size=32,epochs=100。起初的實驗用帶動量的SGD,decay=0.9。但是最佳的模型是RMSProp,decay=0.9, 。學習率用0.045,每2個epoch衰減(指數衰減率為0.94)。

另外,發現用RNN中的梯度裁剪(設置閾值為2.0)可以使訓練穩定。

常識 是,采用更高分辨率感受野的模型往往會顯著提高識別性能。如果我們只是改變輸入的分辨率而不進壹步調整模型,那麽最後就是使用低計算量的模型來解決更困難的任務。

問題轉化為:如果計算量是恒定的,更高的分辨率能有多少幫助?

盡管低分辨率的網絡需要訓練更久,但是最終的效果差不太多。然而,只是根據輸入分辨率簡單的減小網絡的尺寸結果往往會很糟糕。

(這部分的結論是更高分辨率的輸入用更復雜的模型?)

本文將使用了所有提升的Inception-v2綜合體稱為Inception-v3。

我屮,表4有bug,Top-5和Top-1的標題反了

提供了幾條設計準則,基於此來擴大卷積網絡。

感覺Inception結構太復雜了,充滿了魔數,看起來沒有ResNet那種統壹的簡潔美。另外,感覺這篇講的有點散,有種拼湊感。。要不是Label smoothing提升的不是特別多,應該都能專門拿出來寫壹篇。最受用的是幾點設計準則,應該會有助於理解後來出現的網絡的設計理念。

棧爆上壹個用pandas實現label smoothing的示例

pytorch的官方實現只有v3,沒有其他的

花書的7.5.1節(向輸出目標註入噪聲)解釋了label smoothing背後的原理。

  • 上一篇:linux安裝qt教程
  • 下一篇:從源碼的角度分析vue computed的依賴搜集
  • copyright 2024編程學習大全網