當前位置:
首頁 > 科技 > 大小僅17KB!這個微型風格遷移模型太好玩了

大小僅17KB!這個微型風格遷移模型太好玩了

銅靈 編譯整理

量子位 出品 | 公眾號 QbitAI

一個風格遷移模型可以有多小?

17KB足矣。

事實證明,你可以用1.7M的參數訓練出風格遷移模型,然後只留下11868個參數,生成遷移圖像。將模型量化後,原本7M的模型壓縮到只有17KB,而遷移效果和原本模型差別不大:

遷移效果對比 | 從左到右分別為原圖,小模型效果,大模型效果

17KB是什麼概念?一個模糊得不行的小頭像,word中的10個文字,迅雷0.01秒內下載的文件……

整波操作效果明顯——

原始模型

大小:7M

權重數量:1.7M

iPhoneX上的運行速度:18 FPS

縮減後的模型

大小:17KB

權重數量:11868

iPhoneX上的運行速度:29 FPS

這到底怎麼做到的?

只需兩步

這項研究的作者、AI部署解決方案Fritz的聯合創始人Jameson Toole在博客中表示,縮小模型真的「pretty easy」,只要你:

一是要毫不留情地修剪層數和權重,二是要通過量化的方式,將32位的浮點權重轉換成8位整數。下面分別細講。


修剪策略

神經網路的訓練期間需要調整數百萬甚至數億個權重,一般來講更多的權重意味著更高的準確性,但非常低效。

假設一個神經網路可以大多數權重都沒那麼有用,可以刪除,應該在什麼層面去刪?Toole認為主要有三種選擇:修剪單個權重、層和模塊等。

權重方面:指一些網路中絕大多數(可能會>95%)訓練過的權重對結果沒有幫助,確定哪些權重能提升網路準確性,將無用權重刪去。

層級方面:每個層中都有權重,2D的卷積層具有的權重張量被稱為一個卷積核(kernel),包含寬度、高度和深度信息,縮小卷積核也是縮小模型的一種方法。

模塊方面:層通常會被組合在一起,形成可重複使用的子圖,也就是一個模塊。在這個層面的修剪會一次刪除多個層,從而減小模型體積。

具體操作

作者引入了寬度乘數(width multiplier)當作超參數,這種方法是谷歌首次在論文MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications中提出的。

論文地址:

https://arxiv.org/abs/1704.04861

寬度乘數能調整每個卷積層中濾波器的數量。如果層和寬度乘數alpha已經給定,那將濾波器的數量F改成F×alpha即可。

通過這個超參數,我們能夠利用李飛飛團隊曾經發表的方法,生成架構相同但權重數量不同的連續網路,就像下面這樣:

李飛飛論文Perceptual Losses for Real-Time Style Transfer and Super-Resolution:

https://arxiv.org/abs/1603.08155

當alpha=1.0時,生成網路的權重為1.7M,當alpha=0.5時,得到權重數量為424102個的一個網路。

此時可以使用低寬度乘數製作構建一些小網路,但裡面也有很多重複模塊。

作者發現,沒有辦法大刀闊斧地修剪這些重複模塊,參數數量固定時,更深的網路產生的結果更好。作者最終將五個殘差塊中刪去了兩個,並將每層的默認濾波器減少到32個。

看起來是這樣的:

用上述架構,作者在反覆試驗後將寬度乘數調整到了0.3,每層中有9個濾波器,最終生成一個只有11868個權重的神經網路。


量化

神經網路訓練完成後進入最後的壓縮環節。

通常大家會將網路權重存儲成64位或32位的浮點數,所謂量化,就是將每一個浮點權重映射成位寬較低的整數。

從32位到8位的映射能將存儲空間減少4倍,並且目前每個主流移動端框架都支持量化,包括TensorFlow Mobile、TensorFlow Lite、Core ML和Caffe2Go。

結果展示

最終,用11868個參數構建的這個微型網路架構原始大小為1.7M,當用Google的移動端框架CoreML量化後,最終大小為17KB,僅為原始大小的0.25%。

這個超小型的遷移模型,可以將所見場景轉化成梵高名畫《星空》的風格。

作者還發現,儘管模型大小縮小了400倍,但在iPhoneX上的運行速度只提高了50%,原因尚不明確。

用簡單兩步操作將風格遷移模型大小減少99.75%的方法,這次你學會了嗎?

傳送門

可進一步閱讀博客原文:

https://heartbeat.fritz.ai/creating-a-17kb-style-transfer-model-with-layer-pruning-and-quantization-864d7cc53693

GitHub上可下載模型的代碼+Demo:

https://github.com/fritzlabs/fritz-style-transfer

年度評選申請

加入社群

量子位AI社群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話界面回復關鍵字「交流群」,獲取入群方式;

此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。

進專業群請在量子位公眾號(QbitAI)對話界面回復關鍵字「專業群」,獲取入群方式。(專業群審核較嚴,敬請諒解)

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 量子位 的精彩文章:

機器學習經典教材PRML《模式識別與機器學習》官方開放免費下載
機器學習和AI的區別是什麼?

TAG:量子位 |