Inception-v3的設計思路小結
一、網絡更深、更寬帶來的問題
- 參數太多,若訓練資料集有限,容易過拟合;
- 網絡越大計算複雜度越大,難以應用;(記憶體和計算資源)
- 網絡越深,梯度越往後穿越容易消失,難以優化模型。
解決:
- 如何減少參數(且保證性能):使用更小的核,比如5x5 換成 2個3*3;使用Asymmetric方式,比如3x3 換成 1x3和3x1兩種;
- 如何減少computational cost:Inception結構,将全連接配接甚至一般的卷積都轉化為稀疏連接配接;
- 如何解決“梯度消失”:BN層
是以,Inception系列的網絡是“很窄很深”的結構。
二、設計原則
- 2.1避免特征表示瓶頸,尤其是在網絡的前面。要避免嚴重壓縮導緻的瓶頸。特征表示尺寸應該溫和的減少,從輸入端到輸出端。特征表示的次元隻是一個粗淺的資訊量表示,它丢掉了一些重要的因素如相關性結構。
- 2.2高緯資訊更适合在網絡的局部處理。在卷積網絡中逐漸增加非線性激活響應可以解耦合更多的特征,那麼網絡就會訓練的更快。
- 2.3空間聚合可以通過低緯嵌入,不會導緻網絡表示能力的降低。例如在進行大尺寸的卷積(如3*3)之前,我們可以在空間聚合前先對輸入資訊進行降維處理,如果這些信号是容易壓縮的,那麼降維甚至可以加快學習速度。
- 2.4平衡好網絡的深度和寬度。通過平衡網絡每層濾波器的個數和網絡的層數可以是網絡達到最佳性能。增加網絡的寬度和深度都會提升網絡的性能,但是兩者并行增加獲得的性能提升是最大的。
模型結構
Inception-v2把7x7卷積替換為3個3x3卷積。包含3個Inception部分。第一部分是35x35x288,使用了2個3x3卷積代替了傳統的5x5;第二部分減小了feature map,增多了filters,為17x17x768,使用了nx1->1xn結構;第三部分增多了filter,使用了卷積池化并行結構。網絡有42層,但是計算量隻有GoogLeNet的2.5倍。

功能
設計功能:最後兩層之前模型完成 299x299x3 到 1x1x2048的特征映射,把input映射成2048維的特征向量,完成自動特征提取的工作;
其中,前面的conv和pool完成提取特征,中間Inception結構可以自動學習出濾波器的類型:
- 第一部分是35x35x288,使用了2個3x3卷積代替了傳統的5x5;
- 第二部分減小了feature map,增多了filters,為17x17x768,使用了nx1->1xn結構;
- 第三部分增多了filter,使用了卷積池化并行結構。;
最後兩層是一個全連接配接層,起到使用特征向量進行分類的功能。
三、Inception Module
Inception的作用:代替人工确定卷積層中的過濾器類型或者确定是否需要建立卷積層和池化層,即:不需要人為決定使用哪個過濾器,是否需要池化層等,
由網絡自行決定這些參數,可以給網絡添加所有可能值,将輸出連接配接起來,網絡自己學習它需要什麼樣的參數。
原理
Inception架構的主要思想是找出如何用密內建分來近似最優的局部稀疏結。
1 . 采用不同大小的卷積核意味着不同大小的感受野,最後拼接意味着不同尺度特征的融合;
2 . 之是以卷積核大小采用1x1、3x3和5x5,主要是為了友善對齊。設定卷積步長stride=1之後,隻要分别設定padding = 0、1、2,采用same卷積可以得到相同次元的特征,然後這些特征直接拼接在一起;
3 . 文章說很多地方都表明pooling挺有效,是以Inception裡面也嵌入了pooling。
4 . 網絡越到後面特征越抽象,且每個特征涉及的感受野也更大,随着層數的增加,3x3和5x5卷積的比例也要增加。
最終版inception,加入了1x1 conv來降低feature map厚度:
四、CNN結構演進
參考
1簡介: https://www.cnblogs.com/vincentqliu/p/7467298.html
2 inception-v3子產品詳解:https://blog.csdn.net/loveliuzz/article/details/79135583
3 版本演化、各版論文:https://blog.csdn.net/u010402786/article/details/52433324