數十億次數學運算消耗幾毫瓦電力,谷歌開源Pixel4背後的視覺模型

機器之心pro 發佈 2020-01-13T04:05:06+00:00

致研究員與開發者MobileNetV3和 MobileNetEdgeTPU 的代碼,以及用於 ImageNet 分類的浮點和量化的檢查點,都可以在 MobileNet 的 github 主頁上找到:https://github.com/tensorflow/models/tree

選自Google AI Blog

作者:Andrew Howard

機器之心編譯

參與:王子嘉、Geek AI

說到今年最熱門的智慧型手機,一定繞不開谷歌重磅推出的 Pixel 4。而 Pixel 4 的強大性能表現在很大程度上還要歸功於其背後用到的黑科技——基於終端設備的機器學習。前段時間,谷歌發布了 MobileNetV3 和 MobileNetEdgeTPU 的原始碼,讓我們一探究竟吧!


基於終端設備的機器學習(On-device machine learning)是實現具有隱私保護功能、能夠時刻運轉、快速響應的智能的重要組成部分。這就要求我們將基於終端的機器學習部署在算力有限的設備上,從而推動了從算法意義上來說高效的神經網絡模型的研究,以及每秒可執行數十億次數學運算卻只需要消耗幾毫瓦電力的硬體的發展。最近發布的「Google Pixel 4」就是這一發展趨勢的代表。
「Google Pixel 4」搭載了 Pixel 神經核心,它包含了 Edge TPU 架構的實例和 Google 用於邊緣計算設備的機器學習加速器,這增強了 Pixel 4 的用戶體驗,比如更好的面部解鎖功能,更快的 Google 助手以及獨特的相機功能。同時,MobileNet 之類的算法為移動視覺應用程式提供了緊湊而高效的神經網絡模型,是基於終端的機器學習成功的重要因素。

去年 11 月,谷歌發布了 MobileNetV3 和進行了 Pixel 4 Edge TPU 優化後的 MobileNetEdgeTPU 模型的原始碼及檢查點(checkpoint)。這些模型是最新的可感知硬體(hardware-aware)的自動機器學習(AutoML)技術與一些新型架構設計的結晶。
在移動版 CPU 上,MobileNetV3 的速度是 MobileNetV2 的兩倍(準確率相同的情況下),它也刷新了移動計算機視覺網絡目前最佳的性能。在 Pixel 4 Edge TPU 硬體加速器上,MobileNetEdgeTPU 模型在提高模型準確性的同時減少了運行時間和功耗,這個進展進一步突破了這一領域的極限。
構建 MobileNetV3
與之前手動設計的 MobileNet 相比,MobileNetV3 的搜索空間是適用於移動計算機視覺任務的,它在搜索空間中通過 AutoML 技術找到可能的最佳架構。為了最有效地利用搜索空間,谷歌依次部署了兩種技術:MnasNet 和 NetAdapt。首先,MnasNet 使用強化學習從一組離散的選項中選擇出最優配置,從而找到一個粗糙的架構。然後,谷歌使用 NetAdapt 對體系結構進行微調,NetAdapt 是一種補充性技術,可以對未充分利用的激活通道進行微調。為了得到在不同條件下的最佳性能,谷歌分別生成了大型模型和小型模型。

使用 Google Pixel 4 CPU 在 ImageNet 分類任務上對於移動模型的準確性和延遲的比較。
MobileNetV3 的搜索空間
谷歌在適應移動環境的架構設計上取得了多項進展,MobileNetV3 的搜索空間就建立在這些進展的基礎之上。首先,谷歌引入了一種基於 Swish 非線性函數的、被稱為 hard-swish(h-swish)的新激活函數。Swish 函數的主要缺點是其在移動硬體上的計算效率很低。因此,谷歌使用了一種可以由兩個分段線性函數的乘積表示的近似方案。


接下來將介紹適用於移動設備的擠壓激勵塊(squeeze-and-excitation),該塊利用分段線性近似代替了傳統的 sigmoid 函數。
在 h-swish 的基礎上加上適用於移動設備的擠壓激勵塊,並與改進後的 MobileNetV2 中的倒瓶頸結構相結合,就形成了 MobileNetV3 的一個新的構建塊。

MobileNetV3 通過添加 h-swish 和適用於移動設備的擠壓激勵塊擴展了 MobileNetV2 的倒瓶頸結構,並以此作為可搜索的選項。
以下參數定義了構造 MobileNetV3 時使用的搜索空間:

  • 擴展層大小
  • 擠壓激勵塊壓縮度
  • 激活函數的選擇:h-swish 或 ReLU
  • 每個解析度塊的層數


谷歌還在網絡末端引入了一個新的高效的最後階段,可將延遲進一步降低 15%。


MobileNetV3 的目標檢測和語義分割
除了分類模型之外,谷歌還引入了 MobileNetV3 目標檢測模型,該模型在 COCO 數據集上比 MobileNetV2 減少了 25% 的檢測延遲(準確率相同的情況下)。
為了優化 MobileNetV3 以進行有效的語義分割,谷歌引入了一個低延遲分割解碼器,將其稱之為「Lite reduce Atrous Spatial Pyramid Pooling」(LR-SPP)。這個新的解碼器包含三個分支,一個分支用於低解析度語義特徵,一個用於高解析度細節,一個用於輕量級注意力機制。LR-SPP 和 MobileNetV3 的組合在高解析度的 Cityscapes 數據集上減少了超過 35% 的延遲。

用於 Edge TPUs 的 MobileNet
Pixel 4 中的 Edge TPU 在結構上與 Coral 產品線中的 Edge TPU 相似,但經過定製後,可以滿足 Pixel 4 中相機的關鍵功能的要求。可感知加速器的 AutoML 方法大大減少了為硬體加速器設計和優化神經網絡的手工過程。構建神經架構搜索空間是這種方法的重要一環,它以已知可以提高硬體利用率的神經網絡操作為中心。儘管諸如「擠壓-激勵塊」和「swish 非線性」等操作已被證明是構建緊湊而快速的 CPU 模型的關鍵,但這些操作在 Edge TPU 上的執行效果往往欠佳,因此被排除在搜索空間之外。為了能夠更容易地移植到其它各種硬體加速器上(如 DSP 和 GPU),簡化版的 MobileNetV3 變種也放棄了對這些操作的使用(例如,擠壓-激勵、swish、以及 5x5 卷積)。
谷歌鼓勵神經網絡架構搜索算法同時優化模型的準確率和 EdgeTPU 延遲,從而生成了 MobileNetEdgeTPU 模型,該模型與現有的移動版模型(如 MobileNetV2 和簡化版的 MobileNetV3)相比,可以在準確率相當的情況下具有更低的延遲(或在同等延遲的基礎上達到更高的準確率)。與 EfficientNet-EdgeTPU 模型(針對 Coral 中的 Edge TPU 進行了優化)相比,這些模型在 Pixel 4 上的運行延遲要低得多(儘管會損失一部分準確率)。
雖然降低模型的功耗不是搜索目標的一部分,但 MobileNetEdgeTPU 模型的低延遲也有助於降低 Edge TPU 的平均功耗。在準確率相當的情況下,MobileNetEdgeTPU 模型消耗的能量不到簡化版的 MobileNetV3 模型的 50%。

左圖:在 Pixel4 EdgeTPU 上運行時,MobileNetEdgeTPU 與其它為移動設備設計的圖像分類網絡在 ImageNet 分類任務上的準確率比較。與其它模型相比,MobileNetEdgeTPU 具有更高的準確率和更低的延遲。右圖:每秒運行 30 幀(fps)的不同分類模型的在 Edge TPU 上的平均功率(瓦特)。
使用 MobileNetEdgeTPU 進行目標檢測
在目標檢測任務中,MobileNetEdgeTPU 分類模型也可以看作一個有效的特徵提取器。與基於 MobileNetV2 的檢測模型相比,在 Edge TPU 上可比較的運行時上,MobileNetEdgeTPU 模型大大提高了在「COCO14 minival」數據集上的模型質量(通過平均精度均值(mean average precision,mAP)衡量)。MobileNetEdgeTPU 檢測模型的延遲為 6.6ms, mAP 評分為 24.3,而基於 mobilenetv2 的檢測模型 mAP 為 22,每次推理需要 6.8ms。
對於可感知硬體的模型的需求
雖然上面提到的結果突出了 MobileNetEdgeTPU 模型在功率、性能和質量方面的優勢,但是需要注意的是,之所以有這些進步,是由於這些模型專門為 EdgeTPU 加速器定製。
在移動版 CPU 上運行時,MobileNetEdgeTPU 的性能要低於專門針對移動版 CPU 進行調優的模型(MobileNetV3)。MobileNetEdgeTPU 模型執行的操作要多得多,因此,它們在移動版 CPU 上運行得更慢也就不足為奇了,移動版 CPU 在模型的計算需求和運行時之間有更線性的關係。

當部署目標是移動版 CPU 時,MobileNetV3 依舊是最好的模型。
致研究員與開發者
MobileNetV3 和 MobileNetEdgeTPU 的代碼,以及用於 ImageNet 分類的浮點和量化的檢查點,都可以在 MobileNet 的 github 主頁上找到:https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet。
在 Tensorflow 目標檢測 API 中提供了 MobileNetV3 和 MobileNetEdgeTPU 目標檢測的開源實現:https://github.com/tensorflow/models/tree/master/research/object_detection。
MobileNetV3 語義分割的 TensorFlow 版開源實現可以在 DeepLab 中找到:https://github.com/tensorflow/models/tree/master/research/object_detection。
原文連結:http://ai.googleblog.com/2019/11/introducing-next-generation-on-device.html

關鍵字: