0. 前言
- 論文包括:
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- 提出使用 Depth Seperable Convolution 替代普通卷積操作。
- MobileNetV2: Inverted Residuals and Linear Bottlenecks
- MobileNetV3: Searching for MobileNetV3
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
1. MobileNet V1
- arxiv
- 本節配圖如無說明都是來自 這篇文章。
- 這配圖真的好
- 要解決什麼問題?
- 當時的模型都比較大,輕量化網絡的工作並不太多。
- 用什麼方法解決?
- 引入了 Depthwise Separable Convolution 來替代普通卷積。
- 論文的配圖沒有下面這幾張好。
- 普通卷積:
- 輸入尺寸是
[in_height, in_width, in_channels]
- 輸出尺寸是
[out_height, out_width, out_channels]
- 卷積核尺寸是
[kernel_height, kernel_width, in_channels, out_channels]
- 輸入尺寸是
- Depthwise Convolution
- 特點:
- 卷積核的尺寸是三維的。
- 一層輸入對應一層卷積核,因此輸入與輸出通道數相同。
- 輸入尺寸是
[in_height, in_width, in_channels]
- 輸出尺寸是
[out_height, out_width, in_channels]
- 卷積核尺寸是
[kernel_height, kernel_width, in_channels]
- 特點:
- Pointwise Convolution
- 特點:
- 感覺就是卷積核爲
1 * 1
的普通卷積。 - 輸入與輸出的卷積核長寬保持不變,改變的只有通道數量。
- 感覺就是卷積核爲
- 輸入尺寸是
[in_height, in_width, in_channels]
- 輸出尺寸是
[in_height, in_width, out_channels]
- 卷積核尺寸是
[1, 1, in_channels, out_channels]
- 特點:
- Depth Separable Convolution
- 其實就是用一次 Depthwise Convolution 與一次 Pointwise Convolution 來替代普通卷積。
- 假設
- 輸入特徵圖尺寸爲
[in_height, in_width, in_channels]
- 輸出特徵圖尺寸爲
[out_height, out_wdith, out_channels]
- 普通卷積核的尺寸爲
[kernel_height, kernel_width, in_channels, out_channels]
- 輸入特徵圖尺寸爲
- 參數對比:
- 普通卷積參數數量爲
kernel_height * kernel_width * in_channels * out_channels
- Depth Separable Convlution的參數數量是
- Depthwise Convolution:
kernel_height * kernel_width * in_channels
- Pointwise Convolution:
1 * 1 * in_channels * out_channels
- Depthwise Convolution:
- 所以兩者的比值就是
1/out_channels + 1/kernel_height*kernel_width
- 普通卷積參數數量爲
- 網絡結構還引入了幾個超參數,從而控制網絡的大小。這一點在後面幾代中也會用到。
- 引入了 Depthwise Separable Convolution 來替代普通卷積。
- 效果如何?
- 基本上不用了,也就不提了。
- 還存在什麼問題?
- Depthwise Convolution 雖然能夠減少參數數量與計算量,但不一定能夠真正的減少模型運行時間。
- 按照作者的說法,這篇論文相關內容其實在論文發表前1年就有了,是看沒人佔坑才發出來的。
- MobileNetV1的總體結構並沒有什麼大不了的,也沒有引入residual,後面也基本上不用了,所以就不介紹了。
2. MobileNet V2
- arxiv
- 知乎討論,參考筆記
- 要解決什麼問題?
- MobileNetV1的結構中引入了Depthwise Separable Convolution,但其中的 Depthwise Convolution 可能會導致kernel訓練廢掉(這個是別人的說法,感覺意思就是特徵退化,也就是得到的大量特徵都是0,啥都沒學到)。
- 另外,MobileNetV1的總體結構太一般了,類似於VGG的結構,而沒有引入resnet densenet這些的新研。
- 用什麼方法解決?
- MobileNetV2主要用到的技術包括:
- Depthwise Separable Convolutions:這個與MobileNetV1相同,所以就不詳細說明了。
- Linear Bottlenecks
- Inverted residuals
- Linear Bottlenecks
- 意思是在Bottlenecks中,不使用Relu而使用Linear。
- 在卷積神經網絡中有一個假設:
- "manifold of interest"可以通過一個更低緯度的子空間表示。
- 關於 manifold of interest 我不知道確切含義,也不知道該怎麼翻譯,可能是“關鍵信息”的意思?
- 猜測整體意思就是,神經網絡中流轉的信息可以通過更低緯度的特徵圖來表示(比如resnet中的bottleneck結構,就會先對特徵圖進行降維然後升維,那降維也不會導致信息丟失太多),但低緯度信息在訓練過程中不容易保存,所以通過高緯度來表示。
- 通過上面的假設,雖然低緯度可以保存信息,但通過Relu後保存的信息會有很大部分丟失,所以就不使用Relu而使用Linear。
- 論文的這個配圖要好好說道說道,開始看得我要哭了
- A圖是普通的卷積操作,注意,單次卷積操作是同時對所有channel進行操作的,所以紅色的立方體包含了所有的輸入channel。
- B圖是Depthwise Separable Convolution,包括一次 depthwise convolution 和一次 pointwise convolution。對於depthwise,其實是對每個channel單獨做了一次
3*3*1*1
的卷積操作,所以輸入數據中的紅色只有一層,表示爲一個平面(而不是A圖中所有channel,表示爲一個長方體)。pointwise convolution本質就是一次普通的1*1
卷積,輸入數據是對所有 channel 進行操作的,所以圖中顯示的是一個細長的長方體。 - C圖是bottleneck結構的separable convolution with linear,大概意思就是先進行depthwise convolution(包含relu),再進行pointwise convolution(包含relu),最後在進行一次
1*1
卷積(不包含relu,而是使用linear)進行升維。整體結構就是一個bottleneck,即channel數量先減少再增加。 - D圖的本質與C圖一樣,如果有多個C圖結構連接起來,那中間截取一段就如圖D一樣。這個在後面介紹
- Inverted residuals
- 意思就是不是普通的bottleneck結構(channel數量先減少再增加),而是 inverted residual(channel數量先增加再減少)。
- 細節就如下圖,channel數量先增加再減少。
- channel數量增加多少就通過一個參數
expansion
決定。
- 這篇筆記裏有幾個很不錯的圖,推薦大家看看。
- 整體模型結構
- 論文本身還提供了結構對比
- MobileNetV2主要用到的技術包括:
- 效果如何?
- 後來一直都在使用,應該屬於應用比較多的輕量化網絡了,說明效果肯定不錯。
- 當時的準確率啥的沒有啥代表性了,所以也就不放了
- 還存在什麼問題?
- 不過也屬於兩年前的東西,最新的一些技術還沒有融合進去。
- 手工設計的網絡,跟NAS比可能還是稍微差一點。
3. MobileNet V3
-
要解決什麼問題?
- MobileNet系列都是爲了在邊緣端設備上運行爲而實際的。MobileNetV3突出了自己是爲了在手機CPU上運行的。
- 模型能在手機上運行解決隱私權的問題,畢竟數據沒有流轉,都是在用戶自己手上。
- 模型小了,不僅能夠運行速度快、在更多型號上運行,而且還能降低電池消耗。
- MobileNetV2的提出是在18年1月,到MobileNetV3提出(19.5)已經過了很長時間,所以有很多新技術出現,MobilNetV3就融合了很多新技術。
- MobileNet系列都是爲了在邊緣端設備上運行爲而實際的。MobileNetV3突出了自己是爲了在手機CPU上運行的。
-
用什麼方法解決?
- 簡單說,MobileNetV3就是在MobileNetV2的基礎上融合新技術而成。MobileNetV2在上面介紹了,這裏就不多說了。下面就羅列下用到的新技術。
- NASNet不瞭解,不管了。
- Squeeze-and-Excite
- h-swish
- 網絡結構的優化:
- 總體結構
-
效果如何?
-
還存在什麼問題?
- 不知道在CPU上性能如何。
- 論文本身感覺不是特別出彩,但結果就是很好。