天天看點

EfficientNet-lite詳解:目前最強移動端輕量神經網絡概述 原理 使用 展望附錄

概述

3.17日谷歌在 GitHub 與 TFHub 上同步釋出了 EfficientNet-lite,EfficientNet的端側版本,運作在 TensorFlow Lite 上,針對端側 CPU、GPU 和 EdgeTPU 做了優化。EfficientNet-lite提供五個不同版本(EfficientNet-lite0~4),讓使用者能夠根據自己的應用場景和資源情況在延遲、參數量和精度之間做選擇。

EfficientNet-Lite4 是計算量最大的版本,在 ImageNet上的top-1準确率達到了80.4%,同時能夠以30ms/image的速度運作在 Pixel 4 的 CPU 上。EfficientNet-lite 具體的精度和延時、參數的關系如下圖所示。可見其已經把MobileNet V2,ResNet 50,Inception v4等模型遠遠甩在背後。

EfficientNet-lite詳解:目前最強移動端輕量神經網絡概述 原理 使用 展望附錄
EfficientNet-lite詳解:目前最強移動端輕量神經網絡概述 原理 使用 展望附錄

原理

EfficientNet-lite進行了一系列的優化:

量化。定點運算的速度要比浮點運算快很多,在移動裝置算力有限的場景下,量化必不可少。但量化使用了定點數,表示範圍相對于浮點數小很多,必然存在精度的損失。借助 TensorFlow Lite 中提供的訓練後量化流程來對模型進行量化處理,盡可能地降低了對準确率的影響。通過量化,模型大小減少為1/4,推理速度提升近2倍。

EfficientNet-lite0 浮點模型float32與int8量化版本在模型尺寸、精度及時延的對比:

EfficientNet-lite詳解:目前最強移動端輕量神經網絡概述 原理 使用 展望附錄

結構和算子優化。去除 squeeze-and-excitation 結構,因為目前在端側裝置上支援欠佳。

使用 Relu6替代swish 激活函數,swish激活複雜度高,并且對量化有不利影響。

放縮模型尺寸時固定 stem 與 head 子產品,減少放縮後模型的大小與計算量。

使用

對于使用者個性化的資料集,建議使用 TensorFlow Lite Model Maker,在已有 TensorFlow 模型上使用遷移學習。TensorFlow Lite Model Maker 支援很多模型結構,包括 MobileNetV2 和所有5個版本的 EfficientNet-Lite。以下為使用 EfficientNet-lite0 進行鮮花分類的代碼,隻要五行。

# Load your custom dataset

data = ImageClassifierDataLoader.from_folder(flower_path)

train_data, test_data = data.split(0.9)# Customize the pre-trained TensorFlow model

model = image_classifier.create(train_data, model_spec=efficienetnet_lite0_spec)# Evaluate the model

loss, accuracy = model.evaluate(test_data)# Export as TensorFlow Lite model.

model.export('image_classifier.tflite', 'image_labels.txt')

通過改變 model_spec 參數,可以嘗試不同的模型。模型建立好以後,可以将其建構為移動端 app,把自己個性化的模型存放在 asset 檔案夾。

展望

EfficientNet-lite是端側部署的福音,沒有特别複雜的算子,時延低,精度高,輕易打敗了MobileNet,大家可以把以前用的MobileNet替換掉了。

附錄

官方Github:

https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/lite

官方Blog:

https://blog.tensorflow.org/2020/03/higher-accuracy-on-vision-models-with-efficientnet-lite.html

EfficientNet論文連結:https://arxiv.org/abs/1905.11946