【我們為什麼挑選這篇文章】你的 AI 模型太大,導致實際跑起來速度慢、成效不盡理想嗎?Google 發布了一系列針對 TensorFlow Lite 和 XNNPACK 浮點加速庫的稀疏化新工具,在行動設備或 Web 上皆可執行,據說能在不影響 AI 模型運算準確性的同時,「修剪」模型大小,提升模型的運算速度!(責任編輯:賴佩萱)

本文經 AI 新媒體量子位(公眾號 ID:QbitAI)授權轉載,轉載請連繫出處
作者:量子位

一頓操作後,需要實時模糊背景的影片,看起來流暢了不少:

即時目標檢測的延遲也更低了:

這是 Google 特意為行動設備和 Web 端開發的一系列新工具,可以在幾乎不影響 AI 模型運算準確性的同時,「修剪」模型大小,以提升模型運算速度。

最好的情況下,能將 AI 模型的運算速度提升 2 倍,模型大小「縮水」一半。

這是怎麼做到的?

利用機器學習的「稀疏性」,抽掉部分網路權重

這一過程,利用了 AI、機器學習模型的稀疏性。

稀疏性:指在神經網路模型中,可以將部分網路的權重設置為 0,以加快運算速度。

它的實現過程,有點像是玩只抽走積木的疊疊樂遊戲,使用者要在保證模型不會「坍塌」的同時,抽走部分參數(將參數設置為 0)。

這是因為,AI 模型在進行運算任務時,往往涉及大量矩陣乘法運算。

如果能在不影響運算結果的同時,將矩陣中的部分參數設置成 0,就能極大地加快矩陣運算速度,縮短運算時間。

捲積層是多少?

目前,許多行動端的輕量級神經網路架構,如 MobileNet 和 EfficientNetLite,主要由深度可分離卷積和 1×1 卷積組成。

其中 1×1 卷積耗費的運算時間最多,佔總計算量的 65% 以上。

在 MobileNet 中,1×1 卷積的計算量甚至佔模型總運算時間的 85%。

因此,1×1 卷積層成為了稀疏化的最優選擇。

Google 發布 TensofFlow Lite 新工具,能直接讓模型變稀疏

此前,這種利用稀疏性加速運算的方法,應用範圍並不廣泛。

一個原因,是神經網路本身難以解釋,導致稀疏化的過程也不好解釋,以至於缺乏稀疏化的工具;另一個原因,則是相應設備如手機,缺乏對稀疏化操作的支持。

現在,Gppgle 特意為行動設備和 Web 端,發布了一系列針對 TensorFlow Lite,和 XNNPACK 浮點加速庫的稀疏化新工具。

利用這些稀疏化工具,神經網路就能變得更高效,用戶也能快速上手。

其中,XNNPACK 庫包含了能檢測模型是否稀疏的方法,TF Lite 工具包中則包含基於幅度的修剪,或 RigL 等讓模型「縮水」的方法。

整體稀疏化的過程如下:

首先,從原始模型開始訓練,在過程中逐漸將網絡中的部分權重設置為 0,即「修剪」模型;然後,透過適當增加訓練時間,提升模型準確度(不會比修剪前的模型差太多);最後,獲得的稀疏 AI 運算模型,可以以壓縮格式有效儲存,比原始模型要更小。

這個工具支持一系列感知算法模型,包括 MediaPipe 的手部追蹤模型:

以及 Google Meet 中的背景替換模型:

當然,除了 Google 自帶的 AI 模型以外,這些稀疏化工具也可以用在自己設計的 AI 模型中。

具體效果如何呢?

運算速度比原始模型快 2 倍

下圖是原始模型和稀疏模型的對比。

其中,藍色和黃色,分別對應原始模型的 32 幀/秒、和 16 幀/秒的模型大小,紅色和綠色則是稀疏模型對應的大小。

從圖中可以看見,經過「修剪」的 AI 模型,無論是「手部追蹤」、還是「背景替換」,模型大小都降低了接近一半以上。

而且,隨著稀疏程度的提高,運算時間也幾乎呈直線下降趨勢。

但也要注意,不能一味地稀疏化模型,因為當模型的稀疏化程度高於 70% 的時候,模型的精度就會出現明顯的下降。

因此,模型的實際稀疏效果,還是會和理論上有所出入。

在實際應用上,Google Meet 運算時間只降低了 30%,但也已經非常不錯了。

還在發愁自己的 AI 模型太大,在行動設備中運行效果不好的小伙伴,可以試著將自己的模型「縮縮水」了~

專案網址

Github

參考資料

Google Blog

(本文經 AI 新媒體量子位 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈谷歌發布 TF 新工具:計算速度提升 2 倍,減少無效參數〉。)

你可能會有興趣