在最近的科技發展和機器學習的世界中,這些技術不再僅限於微雲端,而是進入了行動裝置。大家都知道,TensorFlow Lite 和 PyTorch Mobile 是兩個最常用於直接在手機和平板電腦上部署模型的商業工具。雖然 TensorFlow Lite 和 PyTorch Mobile 都是為了在行動裝置上運作而開發,但它們在優缺點上各有不同。本文將介紹 TensorFlow Lite 是什麼、PyTorch Mobile 是什麼、它們的應用以及兩者之間的差異。
學習成果
- 了解設備上的機器學習及其相對於雲端系統的好處。
- 學習如何使用 TensorFlow Lite 和 PyTorch Mobile 部署行動應用程式。
- 了解如何將訓練好的模型轉換為可部署的格式,使用 TensorFlow Lite 和 PyTorch Mobile。
- 比較 TensorFlow Lite 和 PyTorch Mobile 的性能、易用性和平台相容性。
- 實現使用 TensorFlow Lite 和 PyTorch Mobile 的實際應用案例。
這篇文章是數據科學博客活動的一部分。
什麼是設備上的機器學習?
我們可以在行動裝置上進行人工智慧(AI)運算,包括智慧型手機、平板電腦或其他設備,這就是設備上的機器學習。我們不需要依賴雲端服務。這樣的好處包括快速反應、保護敏感資訊的安全性,以及應用程式可以在有或沒有網路連接的情況下運行,這在即時影像辨識、機器翻譯和擴增實境等多種應用中都非常重要。
探索 TensorFlow Lite
TensorFlow Lite 是 TensorFlow 的一個版本,通常用於功能受限的設備。它可以在 Android 和 iPhone 等其他作業系統上運行並相容。TensorFlow Lite 主要專注於提供低延遲和高效能執行。對於 TensorFlow Lite,還有一個模型優化器,可以幫助應用某些方法,例如量化,讓模型在行動部署時更快且更小,這對於提升效率是非常重要的。
TensorFlow Lite 的特點
以下是 TensorFlow Lite 的一些重要特點:
- 小型二進位檔:TensorFlow Lite 的二進位檔可以非常小,最小可達 300KB。
- 硬體加速:TFLite 支援透過代理的 GPU 和其他硬體加速器,例如 Android 的 NNAPI 和 iOS 的 CoreML。
- 模型量化:TFLite 提供多種量化方法,以優化性能並減少模型大小,而不會過多犧牲準確性。
PyTorch Mobile 實作
PyTorch Mobile 是 PyTorch 的行動擴展。它通常以其在研究和生產中的靈活性而聞名。PyTorch Mobile 使得將訓練好的模型從桌面環境轉移到行動裝置上變得簡單,幾乎不需要修改。它更注重開發者的易用性,支援動態計算圖,並使除錯變得更簡單。
PyTorch Mobile 的特點
以下是 PyTorch Mobile 的一些重要特點:
- 預建模型:PyTorch Mobile 提供大量預訓練模型,可以轉換為在行動裝置上運行。
- 動態圖:這是 PyTorch 的動態計算圖之一,允許在開發過程中靈活調整。
- 自定義運算子:PyTorch Mobile 允許我們創建自定義運算子,這對於進階使用案例非常有用。
性能比較:TensorFlow Lite vs PyTorch Mobile
在討論性能時,這兩個框架都是為行動裝置優化的,但 TensorFlow Lite 的執行速度和資源效率較高。
- 執行速度:TensorFlow Lite 通常較快,因為它進行了積極的優化,例如量化和基於代理的加速,例如 NNAPI 和 GPU。
- 二進位檔大小:TensorFlow Lite 的佔用空間較小,最小構建的二進位檔大小可低至 300KB。PyTorch Mobile 的二進位檔通常較大,並需要更多的微調以實現輕量級部署。
易用性和開發者體驗
開發者通常更喜歡 PyTorch Mobile,因為它的靈活性和易於除錯。這是因為動態計算圖的特性,這使得我們可以在運行時修改模型,這對於原型設計非常好。另一方面,TensorFlow Lite 需要在部署之前將模型轉換為靜態格式,這可能會增加複雜性,但卻能為行動裝置提供更優化的模型。
- 模型轉換:PyTorch Mobile 允許我們直接導出 PyTorch 模型,而 TensorFlow Lite 則需要使用 TFLite 轉換器將 TensorFlow 模型轉換。
- 除錯:PyTorch 的動態圖使得在運行時除錯變得更容易,這對於快速發現問題非常有幫助。雖然 TensorFlow Lite 的靜態圖在除錯上可能會有些困難,但 TensorFlow 提供了像 Model Analyzer 這樣的工具來幫助我們。
支援的平台和設備相容性
我們可以在兩個主要的行動平台上使用 TensorFlow Lite 和 PyTorch Mobile,分別是 Android 和 iOS。
TensorFlow Lite
在選擇支援哪些硬體時,TFLite 更加靈活。由於代理系統,它不僅支援 CPU 和 GPU,還支援數位信號處理器(DSP)和其他被認為比基本 CPU 更高效的晶片。
PyTorch Mobile
雖然 PyTorch Mobile 也支援 CPU 和 GPU,例如 iOS 的 Metal 和 Android 的 Vulkan,但它在硬體加速方面的選擇較少。這意味著當我們需要更廣泛的硬體相容性時,TFLite 可能會更具優勢,特別是對於具有專用處理器的設備。
模型轉換:從訓練到部署
TensorFlow Lite 和 PyTorch Mobile 之間的主要區別在於模型如何從訓練階段轉移到行動裝置的部署。
TensorFlow Lite
如果我們想在行動裝置上部署 TensorFlow 模型,則需要使用 TFLite 轉換器進行轉換。這個過程可以進行優化,例如量化,這將使模型在行動目標上更快且更有效率。
PyTorch Mobile
對於 PyTorch Mobile,我們可以使用 TorchScript 保存模型。這個過程非常簡單易行,但不提供與 TFLite 相同級別的高級優化選項。
TensorFlow Lite 和 PyTorch Mobile 的使用案例
探索 TensorFlow Lite 和 PyTorch Mobile 的實際應用,展示這些框架如何在不同產業中提供智能解決方案。
TensorFlow Lite
TFLite 是一個更適合需要快速反應的應用平台,例如即時影像分類或物體偵測。如果我們在使用具有專用硬體的設備,例如 GPU 或神經處理單元,TFLite 的硬體加速功能可以幫助模型更快且更有效率地運行。
PyTorch Mobile
PyTorch Mobile 非常適合仍在發展中的專案,例如研究或原型應用。它的靈活性使得實驗和迭代變得簡單,這讓開發者可以快速進行變更。當我們需要經常實驗並以最小修改部署新模型時,PyTorch Mobile 是理想的選擇。
TensorFlow Lite 實作
我們將使用一個預訓練模型(MobileNetV2)並將其轉換為 TensorFlow Lite。
加載和保存模型
我們首先導入 TensorFlow 並加載一個預訓練的 MobileNetV2 模型。這個模型已經準備好用於在 ImageNet 數據集上進行預訓練。model.export(’mobilenet_model’)會將模型以 TensorFlow 的 SavedModel 格式寫入。這是轉換為行動裝置使用的 TensorFlow Lite 模型(TFLite)所需的格式。
# 第一步:設置環境並加載預訓練的 MobileNetV2 模型
import tensorflow as tf
# 加載預訓練的 MobileNetV2 模型
model = tf.keras.applications.MobileNetV2(weights="imagenet", input_shape=(224, 224, 3))
# 將模型保存為 TFLite 轉換的 SavedModel
model.export('mobilenet_model')
將模型轉換為 TensorFlow Lite
模型從保存的模型(mobilenet_model 目錄)中加載,使用 TFLiteConverter。轉換器將模型轉換為更輕量的 .tflite 格式。最後,將 TFLite 模型保存為 mobilenet_v2.tflite,以便在行動或邊緣應用中使用。
# 第二步:將模型轉換為 TensorFlow Lite
converter = tf.lite.TFLiteConverter.from_saved_model('mobilenet_model')
tflite_model = converter.convert()
# 將轉換的模型保存為 TFLite 檔案
with open('mobilenet_v2.tflite', 'wb') as f:
f.write(tflite_model)
加載 TFLite 模型以進行推理
現在,我們導入進行數值運算所需的庫(numpy)和圖像處理(PIL.Image)。使用 tf.lite.Interpreter 加載 TFLite 模型,並為輸入/輸出張量分配內存。我們檢索有關輸入/輸出張量的詳細信息,例如形狀和數據類型,這在我們預處理輸入圖像和檢索輸出時會非常有用。
import numpy as np
from PIL import Image
# 加載 TFLite 模型並分配張量
interpreter = tf.lite.Interpreter(model_path="mobilenet_v2.tflite")
interpreter.allocate_tensors()
# 獲取輸入和輸出張量
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
預處理輸入、運行推理和解碼輸出
我們加載圖像(cat.jpg),將其調整為所需的(224, 224)像素,並使用 MobileNetV2 的預處理方法進行預處理。預處理後的圖像通過設置輸入張量使用 interpreter.set_tensor() 輸入到 TFLite 模型中,然後使用 interpreter.invoke() 運行推理。推理後,我們檢索模型的預測,並使用 decode_predictions() 將其解碼為人類可讀的類別名稱和概率。最後,我們打印預測結果。
# 加載並預處理輸入圖像
image = Image.open('cat.jpg').resize((224, 224)) # 替換為您的圖像路徑
input_data = np.expand_dims(np.array(image), axis=0)
input_data = tf.keras.applications.mobilenet_v2.preprocess_input(input_data)
# 設置輸入張量並運行模型
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
# 獲取輸出並解碼預測
output_data = interpreter.get_tensor(output_details[0]['index'])
predictions = tf.keras.applications.mobilenet_v2.decode_predictions(output_data)
print(predictions)
使用下面的貓圖像:
輸出:
[ (‘n02123045’, ‘tabby’, 0.85), (‘n02124075’, ‘Egyptian_cat’, 0.07), (‘n02123159’, ‘tiger_cat’, 0.05)]
這意味著模型有 85% 的信心認為這張圖片是一隻虎斑貓。
PyTorch Mobile 實作
現在,我們將實作 PyTorch Mobile。我們將使用一個簡單的預訓練模型,如 ResNet18,將其轉換為 TorchScript,並運行推理。
設置環境並加載 ResNet18 模型
# 第一步:設置環境
import torch
import torchvision.models as models
# 加載預訓練的 ResNet18 模型
model = models.resnet18(pretrained=True)
# 將模型設置為評估模式
model.eval()
將模型轉換為 TorchScript
在這裡,我們定義一個 example_input,這是一個大小為 [1, 3, 224, 224] 的隨機張量。這模擬了一批 1 張圖像,具有 3 個顏色通道(RGB),並且大小為 224×224 像素。它用於追蹤模型的操作。torch.jit.trace() 是一個將 PyTorch 模型轉換為 TorchScript 模組的方法。TorchScript 允許您序列化並在 Python 之外運行模型,例如在 C++ 或行動裝置上。轉換後的 TorchScript 模型保存為 “resnet18_scripted.pt”,以便稍後加載和使用。
# 第二步:轉換為 TorchScript
example_input = torch.randn(1, 3, 224, 224) # 用於追蹤的示例輸入
traced_script_module = torch.jit.trace(model, example_input)
# 保存 TorchScript 模型
traced_script_module.save("resnet18_scripted.pt")
加載腳本模型並進行預測
我們使用 torch.jit.load() 從文件 “resnet18_scripted.pt” 加載之前保存的 TorchScript 模型。我們創建一個新的隨機張量 input_data,再次模擬大小為 [1, 3, 224, 224] 的圖像輸入。然後使用 loaded_model(input_data) 在此輸入上運行模型。這將返回每個類別的原始分數(logits)。要獲得預測的類別,我們使用 torch.max(output, 1),這將給出具有最高分數的類別索引。我們使用 predicted.item() 打印預測的類別。
# 第三步:加載並運行腳本模型
loaded_model = torch.jit.load("resnet18_scripted.pt")
# 模擬輸入數據(隨機圖像張量)
input_data = torch.randn(1, 3, 224, 224)
# 運行模型並獲取預測
output = loaded_model(input_data)
_, predicted = torch.max(output, 1)
print(f'預測類別: {predicted.item()}')
輸出:
預測類別: 107
因此,模型預測輸入數據屬於類別索引 107。
結論
TensorFlow Lite 更加專注於行動裝置,而 PyTorch Mobile 提供了一個更通用的 CPU/GPU 部署解決方案,兩者都針對行動和邊緣設備的不同 AI 應用進行了優化。與 TensorFlow Lite 相比,PyTorch Mobile 提供了更大的可攜性,同時比 TensorFlow Lite 更輕,並與 Google 緊密集成。這兩個框架使開發者能夠在手持設備上實現高功能的即時人工智慧應用。這些框架賦予用戶在本地機器上運行複雜模型的能力,從而改寫了行動應用如何與世界互動的規則。
關鍵要點
- TensorFlow Lite 和 PyTorch Mobile 使開發者能夠有效地在邊緣設備上部署 AI 模型。
- 這兩個框架都支援跨平台相容性,增強了行動 AI 應用的覆蓋範圍。
- TensorFlow Lite 以性能優化著稱,而 PyTorch Mobile 在靈活性方面表現出色。
- 易於整合和開發者友好的工具使這兩個框架適合各種 AI 使用案例。
- 實際應用涵蓋醫療、零售和娛樂等行業,展示了它們的多樣性。
常見問題
Q1. TensorFlow Lite 和 PyTorch Mobile 有什麼區別?
A. TensorFlow Lite 用於需要在行動裝置上高性能的情況,而 PyTorch Mobile 用於需要靈活性和與 PyTorch 現有生態系統的整合的情況。
Q2. TensorFlow Lite 和 PyTorch Mobile 可以在 Android 和 iOS 上運行嗎?
A. 是的,TensorFlow Lite 和 PyTorch Mobile 都可以在 Android 和 iOS 上運行。
Q3. 列出一些 PyTorch Mobile 的使用案例。
A. PyTorch Mobile 適用於執行圖像、面部和視頻分類、即時物體偵測、語音轉文字等任務的應用。
Q4. 列出一些 TensorFlow Lite Mobile 的使用案例。
A. TensorFlow Lite Mobile 適用於機器人技術、物聯網設備、擴增實境(AR)、虛擬實境(VR)、自然語言處理(NLP)等應用。
本文中顯示的媒體不屬於 Analytics Vidhya,使用時由作者自行決定。
新聞來源
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的
AI TAIWAN 台灣人工智慧中心
FB 社團,隨時掌握最新 AI 動態與實用資訊!