移動和嵌入式人體姿態估計(Mobile and Embedded Human Pose Estimation)

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:採用深度可分離卷積,大大提高了計算效率 (1K2\frac {1}{K^2}
    • MobileNetV2:避免丟失低維空間的特徵信息
      • 在MobileNetV1基礎上引入了一個具有反向殘差和線性瓶頸的資源高效模塊
    • MobileNetV3:減少操作的數量(MAdds)和實際測量的延遲
    • CondenseNet:在訓練階段學習組卷積,以保持層與層之間有用的緊密連接,以便功能重用
    • ShiftNet:提出了與點向卷積交織的移位操作,以取代昂貴的空間卷積
  • 專業GPU/TPU平臺
    • AlexNet
    • VGGNet
    • GoogLeNet
    • ResNet

1.4 源碼

2.優化模型

2.1 MobileNet -V1 (2017 Google)

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)FDF×DF×MF:D_F \times D_F \times M
      • 輸出特徵圖(Output Feature Map)GDF×DF×NG:D_F \times D_F \times N
      • MM:輸入特徵圖的通道數(input channels / input depth)
      • NN:輸出特徵圖的通道數(output channels / output depth)
      • DFD_F:特徵圖的寬度和高度
    • 標準卷積
      • 卷積Kernel KK的參數數量DKDKMND_K \cdot D_K \cdot M \cdot N
        • DKD_K:方形Kernel的邊長
        • MM:輸入特徵圖的通道數(深度)
        • NN:輸出特徵圖的通道數(深度),也即卷積Kernel DKDKMD_K \cdot D_K\cdot M 的個數
      • 輸出特徵圖(stride 1 and padding 1):
        Gk,l,n=i,j,mKi,j,m,nFk+i1,l+j1,mG_{k,l,n} = \sum_{i,j,m}K_{i,j,m,n} \cdot F_{k+i-1, l+j-1,m}
      • 計算成本cost=DKDKMDFDFN標準卷積計算成本cost = D_K\cdot D_K \cdot M \cdot D_F\cdot D_F \cdot N
    • 深度可分離卷積
      • 深度卷積Kernel K^\hat{K} (Kernel數量=輸入層的深度值)
        • 參數數量**:DKDKMD_K\cdot D_K \cdot M
        • DKD_K:方形Kernel的邊長
        • MM:輸入特徵圖的通道數(深度)
        • 深度卷積Kernel K^\hat{K}的第m個Filter應用於輸入特徵圖FF的第m個通道(channel),且生成輸出特徵圖G^\hat{G}的第m個通道
      • 深度卷積計算成本cost1=DKDKMDFDFcost_1 = D_K \cdot D_K \cdot M \cdot D_F \cdot D_F
      • 逐點卷積 (Kernel數量=輸出層的深度值)
        • 通過1×11 \times1卷積計算深度卷積輸出的線性組合,產生新的特徵圖GG
        • 計算成本cost2=MDFDFNcost_2 = M \cdot D_F\cdot D_F\cdot N
      • 深度可分離卷積計算成本cost=DKDKMDFDF+MDFDFN深度可分離卷積計算成本cost = D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot D_F\cdot D_F\cdot N
  • 計算成本之比(深度可分離卷積/標準卷積)ratio=DKDKMDFDF+MDFDFNDKDKMDFDFN=1N+1DK2ratio = \frac {D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot D_F\cdot D_F\cdot N} {D_K\cdot D_K \cdot M \cdot D_F\cdot D_F \cdot N} = \frac {1}{N} + \frac{1}{D_K^2}
  • 當使用3×33 \times 3卷積核(Kernel),深度可分離卷積的計算量是標準卷積計算量的18\frac{1}{8}

2.1.4 網絡結構

  • 標準卷積與深度可分離卷積
    在這裏插入圖片描述
  • MobileNet網絡結構
    在這裏插入圖片描述
  • 不同類型層的資源消耗
    在這裏插入圖片描述

2.1.5 超參

  • 爲進一步減少計算量,引入以下兩個超參
  • 寬度乘數α\alpha(Width Multiplier):使模型更小
    • 作用於輸入輸出通道數,即把輸入通道數MM變爲αM\alpha M,把輸出通道數NN變爲αN\alpha N,從而減少模型的參數數量及計算量
    • α(0,1]\alpha \in (0,1],其典型值爲0.25, 0.50, 0.75, 1.0
    • 寬度乘數可以應用於任何模型結構,以合理的精度,等待時間和尺寸折衷來定義新的較小模型
    • 它用於定義新的簡化結構,需要從頭開始進行訓練
    • 新計算量爲原計算量的α2\alpha^2
  • 分辨率乘數ρ\rho(Resolution Multiplier):簡化表示
    • 其作用是減少輸入圖像的分辨率,即把輸入DFD_F修改爲ρDF\rho D_F
    • 新計算量爲原計算量的ρ2\rho^2
      在這裏插入圖片描述

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
    • 定義f(x)=min(max(x,0),6)f(x) = min(max(x,0),6)
    • 用途:在低精度計算時能壓縮動態範圍,算法更穩健

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)的數量
    • 人式設計
      • 新的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)

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章