1. 背景
- 現有的大部分模型都是在PC(帶有超級強大GPU)上進行的,所以在嵌入式設備上基本無法使用
- 實現方案:
- 優化模型:大大地減少參數
- 使用ARM中的GPU
1.1 獲取小型網絡的方法
- 收縮(shrinking),分解(factorizing)或壓縮(compressing)預訓練的網絡
- 壓縮:基於乘積量化(product quantization)、哈希(hashing)以及修剪(pruning)的壓縮,提出了向量量化和霍夫曼編碼
- 蒸餾:它使用較大的網絡來教授較小的網絡
1.2 判斷模型的指標
- 準確度(accuracy)
- 通過乘法加法(MAdd)度量的操作數(number of operations measured by multiply-adds (MAdd))
- 實際延遲(處理耗時: actual latency)
- 參數數量(number of parameters)
- MACs/MADDs:乘法和加法操作數量(the number of multiply-accumulates)
1.3 經典網絡結構
- 移動和嵌入式平臺
- ShuffleNet:利用分組卷積和通道打亂操作進一步減少MAdds
- SqueezeNet:廣泛使用1x1卷積與擠壓和擴展模塊,主要集中於減少參數的數量
- MobileNetV1:採用深度可分離卷積,大大提高了計算效率 ()
- MobileNetV2:避免丟失低維空間的特徵信息
- 在MobileNetV1基礎上引入了一個具有反向殘差和線性瓶頸的資源高效模塊
- MobileNetV3:減少操作的數量(MAdds)和實際測量的延遲
- CondenseNet:在訓練階段學習組卷積,以保持層與層之間有用的緊密連接,以便功能重用
- ShiftNet:提出了與點向卷積交織的移位操作,以取代昂貴的空間卷積
- 專業GPU/TPU平臺
- AlexNet
- VGGNet
- GoogLeNet
- ResNet
1.4 源碼
2.優化模型
2.1 MobileNet -V1 (2017 Google)
- 論文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- 目標
- 優化延遲
- 產生小型網絡
2.1.1 深度可分離卷積概念
- MobileNet模型:基於深度可分離卷積
- 深度可分離卷積
- (DSC:Depthwise Separable Convolution)
- 它是分解卷積的一種形式,可將標準卷積分解爲深度卷積和1×1卷積 (點式卷積)
- 使用DSC創建了一個輕量級神經網絡
- 使用兩個簡單的全局超參來控制性能(計算量)和準確性之間的平衡
- 標準卷積:一步實現以下兩個功能:
- 濾波器
- 將輸入合併爲一組新的輸出
- 深度可分離卷積(MobileNet):分步實現以下兩個功能:
- 深度卷積(depthwise convolution):將單個濾波器應用於每個輸入通道
- 逐點卷積 (pointwise convolution):使用1×1卷積合併深度卷積的輸出
- 深度可分離卷積把標準卷積分爲以下兩個獨立的層:
- 濾波器層(filtering)
- 合併層(combing)
- 這樣大大減小於模型的大小和計算量
2.1.2 深度可分離卷積流程
- 標準卷積流程:
- 把標準卷積分解爲深度卷積和逐點卷積的流程如下圖所示:
- 深度可分離卷積示意圖
2.1.3 深度可分離卷積計算成本
- 計算參數數量
- 參數說明:
- 輸入特徵圖(Input Feature Map)
- 輸出特徵圖(Output Feature Map)
- :輸入特徵圖的通道數(input channels / input depth)
- :輸出特徵圖的通道數(output channels / output depth)
- :特徵圖的寬度和高度
- 標準卷積
- 卷積Kernel 的參數數量:
- :方形Kernel的邊長
- :輸入特徵圖的通道數(深度)
- :輸出特徵圖的通道數(深度),也即卷積Kernel 的個數
- 輸出特徵圖(stride 1 and padding 1):
- 計算成本:
- 卷積Kernel 的參數數量:
- 深度可分離卷積
- 深度卷積Kernel (Kernel數量=輸入層的深度值)
- 參數數量**:
- :方形Kernel的邊長
- :輸入特徵圖的通道數(深度)
- 深度卷積Kernel 的第m個Filter應用於輸入特徵圖的第m個通道(channel),且生成輸出特徵圖的第m個通道
- 深度卷積計算成本:
- 逐點卷積 (Kernel數量=輸出層的深度值) :
- 通過卷積計算深度卷積輸出的線性組合,產生新的特徵圖
- 計算成本:
- 深度可分離卷積計算成本:
- 深度卷積Kernel (Kernel數量=輸入層的深度值)
- 參數說明:
- 計算成本之比(深度可分離卷積/標準卷積):
- 當使用卷積核(Kernel),深度可分離卷積的計算量是標準卷積計算量的
2.1.4 網絡結構
- 標準卷積與深度可分離卷積
- MobileNet網絡結構
- 不同類型層的資源消耗
2.1.5 超參
- 爲進一步減少計算量,引入以下兩個超參
- 寬度乘數(Width Multiplier):使模型更小
- 作用於輸入輸出通道數,即把輸入通道數變爲,把輸出通道數變爲,從而減少模型的參數數量及計算量
- ,其典型值爲0.25, 0.50, 0.75, 1.0
- 寬度乘數可以應用於任何模型結構,以合理的精度,等待時間和尺寸折衷來定義新的較小模型
- 它用於定義新的簡化結構,需要從頭開始進行訓練
- 新計算量爲原計算量的倍
- 分辨率乘數(Resolution Multiplier):簡化表示
- 其作用是減少輸入圖像的分辨率,即把輸入修改爲
- 新計算量爲原計算量的倍
2.1.6 實驗結果
2.1.7 侷限性
- 優點:使用深度可分享卷積,以在犧牲較小性能的前提下大大地減少參數數量
- 侷限:深度卷積的Kernel數量取決於輸入的Depth,且無法改變
2.2 MobileNetV2
- 論文:反向殘差和線形瓶頸 (MobileNetV2: Inverted Residuals and Linear Bottlenecks) Google Inc. (2019)
- 目標:
- 減少計算量的同時避免特徵損失(線性瓶頸)
- 減少內存消耗
- 提高AP (線性瓶頸和反向殘差)
- 主要貢獻:
- 一個創新的層模塊:具有線性瓶頸的反向殘差(the inverted residual with linear bottleneck)
- 通過使用【反向殘差和線形瓶頸】的結構,解決了MobileNetV1在深度卷積中存在的輸入層Kernel數據固定的瓶頸
- 在準度性與性能間最得最佳平衡(strike an optimal balance between accuracy and performance)
- 測試數據集
- ImageNet classification
- COCO objection detection
- VOC image segmentation
- 概念
- 感興趣的信息:manifold of interest
2.2.1 深度可分離卷積
- Depthwise Separable Convolutions
- 與MobileNetV1中的一樣,在MobileNetV2中繼續使用
2.2.2 線性瓶頸 (Linear Bottlenecks)
- 起因:
- 在MobileNetV1中引入了超參Width Multiplier參數縮減模型的輸入和輸出通道(channels),其結果爲特徵信息就更加集中在縮減後的通道中,如果在縮減後的特徵圖上使用非線性激活層(如ReLU),就會有較大的信息丟失。爲了減少信息丟失,就引入了本文中的“線性瓶頸 (Linear Bottlenecks)”
- 深度網絡僅在輸出域的非零體積部分具有線性分類器的能力,因爲ReLU留下的非0體積內的點都是通過線性變換得來的,其它的值被丟掉了
- ReLU變換保留哪些信息?
- 1)如果感興趣的信息在ReLU變換後仍保持非零體積內,則它對應於線性變換 (即ReLU的作用就是一個線性變換)
- 2)ReLU能夠保留有關輸入信息的完整信息,但前提是輸入信息位於輸入空間的低維子空間中
- 上圖的實驗表明:
- 把初始信號嵌入到n維空間中,然後通過ReLU變換之後,再進行逆變換,最後恢復出原始信號
- 若n=2或3,恢復的信息相比原始信息損失較多
- 若n=15或30,恢復的信息相比原始信息損失較少
- 結論:低維經過ReLU之後信息(特徵)損失最大
- 什麼是瓶頸(Bottlenects)?
- 輸出維度(深度)減少的層就是一個Bottleneck,類似一個沙漏
- 什麼是線性瓶頸(Linear Bottleneck)?
- Bottleneck層不接非線性激活函數 (如ReLU),就是一個Linear Bottleneck
- 實驗證據表明,使用線性層至關重要,因爲它可以防止非線性破壞過多的信息。
2.2.3 卷積塊的變體
2.2.4 反向殘差(Inverted residuals)
- 傳統殘差:維度變化規則:先縮小後增加
- 反向殘差:維度變化規則:先增加後縮小
- 思路:瓶頸實際上包含所有必要的信息,而擴展層僅充當張量的非線性轉換的實現細節,我們直接在瓶頸之間使用短路連接,以實現殘差學習
2.2.5 網絡結構
- ReLU6
- 定義:
- 用途:在低精度計算時能壓縮動態範圍,算法更穩健
2.2.5.1 線性瓶頸深度可分離卷積結構 (bottleneck depth-separable convolution)
- 在深度卷積之前增加了一層逐點卷積,如下圖所示
- 深度卷積輸入的通道數由逐點卷積的Kernel個數決定,從而可任意設置深度卷積Kernel的個數
2.2.5.2 不同架構的卷積塊比較
2.2.5.3 最大的通道數/內存比較
- channels/memory (in Kb)
2.2.6 實驗結果
2.2.6.1 不同網絡的性能曲線
2.2.6.2 線性瓶頸和反向殘差對Top 1 Accuracy的影響
2.2.6.3 性能比較(基於COCO數據集)
2.2.6.4 性能比較(基於ImageNet數據集)
2.3 MobileNetV3
- 論文:Searching for MobileNetV3 Google AI, Google Brain (2019)
- 目標:
- 在移動手機CPU上達到實時性能
- 將關注點從減少參數轉移到減少操作的數量(MAdds)和實際測量的延遲
- 主要貢獻
- 探索自動化網絡搜索和人工設計如何協同互補
- 網絡搜索
- 網絡架構搜索:Network Architecture Search (NAS)
- 通過NAS優化每個網絡塊,以搜索全局最優網絡架構
- NetAdapt算法:NetAdapt Algorithm
- 用NetAdapt算法搜索每層濾波器(Filter)的數量
- 網絡架構搜索:Network Architecture Search (NAS)
- 人式設計
- 新的SE模塊
- 新的H-Swish激活函數
- 更改末端計算量大的層,將増維的1x1層移到平均池化之後
- 更改初始端爲16個卷積核
- 應用場景
- MobileNetV3-Large:用於高端手機
- MobileNetV3-Small:用於低端手機
2.3.1 在Pexel 1手機上的性能
2.3.2 NAS搜索全局結構 (Block-wise Search)
2.3.3 NetAdapt搜索層結構(Layer-wise Search)
參考:
- 論文及代碼:基於RGB
- 論文及代碼:基於Depth
- Efficient Human Pose Estimation from Single Depth Images 2012 MSRA
- 3D Human Pose Estimation in RGBD Images for Robotic Task Learning
- A2J: Anchor-to-Joint Regression Network for 3D Articulated Pose Estimation from a Single Depth Image : 使用ITOP數據集
- V2V-PoseNet: Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from a Single Depth Map
- 人體姿態估計Depth數據集
- 邁向視點不變的3D人類姿勢估計 (ITOP: Towards Viewpoint Invariant 3D Human Pose Estimation) - Fei-Fei Li
Stanford University
- 邁向視點不變的3D人類姿勢估計 (ITOP: Towards Viewpoint Invariant 3D Human Pose Estimation) - Fei-Fei Li