蕭簫 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
一頓操作后,需要實時模糊背景的視頻,看起來流暢了不少:
實時目標檢測的延遲也更低了。
這是谷歌特意為移動設備和Web端開發的一系列新工具,可以在幾乎不影響AI模型推理準確性的同時,“修剪”模型大小,以提升模型推理速度。
最好的情況下,能將AI模型的推理速度提升2倍,模型大小“縮水”一半。
這是怎么做到的?
“抽掉”部分網絡權重
這一過程,利用了AI、機器學習模型的稀疏性。
稀疏性,指在神經網絡模型中,可以將部分網絡的權重設置為0,以加快推理速度。
它的實現過程,有點像是玩只抽走積木的疊疊樂游戲。
用戶要在保證模型不會“坍塌”的同時,抽走部分參數(將參數設置為0)。
這是因為,AI模型在進行推理任務時,往往涉及大量矩陣乘法運算。
如果能在不影響推理結果的同時,將矩陣中的部分參數設置成0,就能極大地加快矩陣運算速度,縮短推理時間。
目前,許多移動端的輕量級神經網絡架構,如MobileNet和EfficientNetLite,主要由深度可分離卷積和1×1卷積組成。
其中1×1卷積耗費的推理時間最多,占總計算量的65%以上。
在MobileNet中,1×1卷積的計算量甚至占模型總推理時間的85%。
因此,1×1卷積層成為了稀疏化的最優選擇。
TensofFlow Lite可用
此前,這種利用稀疏性加速推理的方法,應用范圍并不廣泛。
一個原因,是神經網絡本身難以解釋,導致稀疏化的過程也不好解釋,以至于缺乏稀疏化的工具。
另一個原因,則是相應設備如手機,缺乏對稀疏化操作的支持。
現在,谷歌特意為移動設備和Web端,發布了一系列針對TensorFlow Lite、和XNNPACK浮點加速庫的稀疏化新工具。
利用這些稀疏化工具,神經網絡就能變得更高效,用戶也能快速上手。
其中,XNNPACK庫包含了能檢測模型是否稀疏的方法,TF Lite工具包中則包含基于幅度的修剪、或RigL等讓模型“縮水”的方法。
整體稀疏化的過程如下:
首先,從原始模型開始訓練,在過程中逐漸將網絡中的部分權重設置為0,即“修剪”模型。
然后,通過適當增加訓練時間,提升模型準確度(不會比修剪前的模型差太多)。
最后,獲得的稀疏AI推理模型,可以以壓縮格式有效存儲,比原始模型要更小。
這個工具支持一系列感知算法模型,包括MediaPipe的手部跟蹤模型,以及Google Meet中的背景替換模型:
當然,除了谷歌自帶的AI模型以外,這些稀疏化工具也可以用在自己設計的AI模型中。
具體效果如何呢?
推理速度快2倍
下圖是原始模型和稀疏模型的對比。
其中,藍色和黃色,分別對應原始模型的32幀/秒、和16幀/秒的模型大小,紅色和綠色則是稀疏模型對應的大小。
從圖中可以看見,經過“修剪”的AI模型,無論是“手部跟蹤”、還是“背景替換”,模型大小都降低了接近一半以上。
而且,隨著稀疏程度的提高,推理時間也幾乎呈直線下降趨勢。
但也要注意,不能一味地稀疏化模型,因為當模型的稀疏化程度高于70%的時候,模型的精度就會出現明顯的下降。
因此,模型的實際稀疏效果,還是會和理論上有所出入。
在實際應用上,Google Meet推理時間只降低了30%,但也已經非常不錯了。
還在發愁自己的AI模型太大,在移動設備中運行效果不好的小伙伴,可以試著將自己的模型“縮縮水”了~