朱俊彥團隊提出GAN壓縮算法:計算量減少20倍,GPU、CPU統統能加速

2020-12-06 量子位

邊策 魚羊 發自 凹非寺量子位 報導 | 公眾號 QbitAI

現如今,GAN的效果已經越來越出神入化。

比如英偉達的GauGAN,就如神筆馬良,能夠憑空造物:

不過,從無化有背後,計算量也相當驚人。

以GauGAN為例,與MobileNet-v3這樣的識別CNN相比,參數只相差1個數量級(4.2 : 93)計算強度卻高出了2個數量級(0.5 : 281)。

如此一來,交互式部署就變得很困難。

更直白來說,想要把模型部署到手機、平板這樣的終端,換裝變臉轉性別,這些邊緣設備——吃不太消。

為了解決這一問題,來自MIT、Adobe研究院和上海交通大學的團隊琢磨出了一個通用壓縮框架。

有多強?

一舉將CycleGAN的計算量減少了20倍以上,將GauGAN的計算量減少了9倍,簡筆畫到實物圖的pix2pix也能駕馭,效果卻未差分毫。

值得一提的是。論文已入選CVPR 2020,代碼也已開源。

作者團隊也星光璀璨,一作是來自上海交通大學ACM班的本科生李沐陽,CycleGAN的作者朱俊彥則親身參與、指導。

GAN壓縮算法

壓縮GAN,並不像壓縮其他CNN模型那樣容易。

主要原因:GAN的訓練動力學高度不穩定,生成器與鑑別器之間存在巨大的結構差異,讓我們很難使用現有的CNN壓縮算法。

為了解決這個問題,作者提出了針對有效生成模型量身定製的訓練方案,並通過神經架構搜索(NAS)進一步提高壓縮率。

GAN壓縮的框架如下圖所示,主要分為3個部分:

1、給定一個預訓練的teacher生成器G』,通過蒸餾的方法獲取一個較小的「once-for-all」的student生成器G,其中包括通過權重共享的所有可能通道數。在每個訓練步驟中選擇不同的通道數ck。

2、從「once-for-all」生成器中提取許多子生成器,並評估其性能,無需重新訓練,這也是被叫做once-for-all(一勞永逸)的原因。

3、最後,根據給定的壓縮率目標和性能目標,選擇最佳子生成器,進行微調,並獲得最終的壓縮模型。

構造合適的損失函數

因為GAN壓縮算法要面對CycleGAN、pix2pix還有GauGAN,這些模型的損失函數都不盡相同,所以需要構造一個新的損失函數。

統一未配對和配對學習

有些GAN是通過配對數據集學習的,有些則是非配對數據集。因此要在損失函數中加入第二項,統一非配對和配對學習的損失:

繼承teacher鑑別器

儘管目標是壓縮生成器,但是鑑別器會存儲學習到GAN知識,因為它會發現當前生成器的缺點。

因此,我們採用相同的鑑別器架構,使用teacher預訓練的權重,並與我們的壓縮生成器一起對鑑別器進行微調。預訓練的鑑別器可以指導student生成器的訓練。

初始化的student鑑別器D使用來自teacher鑑別器D』的權重。

中間特徵蒸餾

蒸餾是CNN中廣泛使用的模型壓縮方法。

CNN模型壓縮的一種廣泛使用的方法是知識蒸餾。通過匹配輸出層的logits,可以將知識從teacher模型轉移到student模型,從而提高後者的表現。

最後完整的損失函數為:

其中超參數λrecon和λdistill控制後兩項的權重。

高效的生成器設計空間

選擇設計良好的student體系結構對於最終進行知識蒸餾至關重要。

簡單地縮小teacher模型的通道數並不能產生緊湊的student模型,一旦計算量的壓縮比超過4倍,性能就會開始顯著下降。

預測可能的原因之一是,現有的生成器採用的圖像識別模型,可能不是圖像合成任務的最佳選擇。

下面,作者展示了如何從現有的cGAN生成器中獲得更好的架構設計空間,並在該空間內執行神經架構搜索(NAS)。

卷積分解和層敏感性

近來高效的CNN設計,廣泛採用了卷積分解的方法,證明了在性能與計算之間的權衡取捨。作者發現使用分解的卷積,也有利於cGAN中的生成器設計。

然而實驗表明,將分解直接應用於所有卷積層,將大大降低圖像質量。但是可以只有某些層分解會降低性能,而某些層則更魯棒。

在ResNet生成器中,resBlock層消耗了大部分模型參數和計算成本,而幾乎不受分解的影響。相反,上採樣層的參數要少得多,但是對模型壓縮相當敏感,適度的壓縮也會導致FID大幅下降。

NAS自動裁剪通道

現在的生成器在所有層上都使用手動設計,因此通道數會有冗餘。為了進一步壓縮模型,作者使用通道修剪自動選擇生成器的通道寬度減少冗餘,可以二次減少計算量。

對於每個卷積層,可以從8的倍數中選擇通道數,可以平衡MAC和硬體並行性。

解耦訓練和結構搜索

為了解決該問題,作者遵循one-shot神經體系結構搜索方法的最新工作,將模型訓練與體系結構搜索分離 。

先訓練一個支持所有通道的「once-for-all」網絡,具有不同數量通道的每個子網絡都經過同等訓練,可以獨立運行,子網絡與「once-for-all」網絡共享權重。

在訓練了「once-for-all」網絡後,通過直接在驗證集上評估每個候選子網絡的性能來找到最佳子網。由於「once-for-all」網絡經過權重共享的全面訓練,因此無需進行微調。

通過這種方式,我們可以將訓練和搜索生成器體系結構分離開來:只需要訓練一次,在無需進一步訓練的情況下評估所有可能的通道配置,並選擇最佳的作為搜索結果。

實驗結果

最終實驗結果如下:

GAN壓縮將乘法累加運算(MAC)的數量減了9~21倍。

這種方法將CycleGAN的計算量減少了20倍以上,將pix2pix的計算量減少了9倍,將GauGAN的計算量減少了9倍。

而且不僅能在GPU上加速,在各種各種各樣的CPU上也可以實現加速,而且加速效果在CPU上更明顯。

代碼開源

現在,這一GAN壓縮框架已經開源,數據集和預訓練模型均可下載。

如果想要上手親測,需要的環境是:

LinuxPython 3CPU or NVIDIA GPU + CUDA CuDNN同時,研究團隊也準備了CycleGAN和pix2pix兩個版本的PyTorch Colab,在線即可體驗。

試試用CycleGAN把普通馬變斑馬的效果。

首先把GAN Compression這個項目克隆下來:

!git clone https://github.com/mit-han-lab/gan-compression.git

下載測試數據集:

!bash datasets/download_cyclegan_dataset.sh horse2zebra

下載預訓練模型:

python scripts/download_model.py —model pix2pix —task edges2shoes-r —stage full

python scripts/download_model.py —model pix2pix —task edges2shoes-r —stage compressed

下面,就是見證換皮的時刻:

效果差距大不大,肉眼看了不算,還是要計算一下FID(用於評估GAN生成圖像的質量,分數越低代表與真實圖像越相似)。

該項目提供了幾個數據集的真實統計信息:

bash ./datasets/download_real_stat.sh horse2zebra A

bash ./datasets/download_real_stat.sh horse2zebra B

測試的結果顯示,原始CycleGAN的FID是65.687,壓縮後,模型的FID是65.312,兩者差距不大。

但在MAC、參數規模和延遲方面,壓縮模型都要遠遠小於原始模型。

上海交大本科生一作,朱俊彥&韓松加持

論文一作,是上海交通大學ACM班大四本科生李沐陽。

2019年7月-今年1月,李沐陽師從MIT韓松教授和朱俊彥教授,在MIT Han Lab擔任研究助理,這篇CVPR 2020論文就是在此期間產出。

目前,李沐陽的研究興趣在於機器學習、系統以及計算機圖形學等領域,他計劃在今年畢業之後繼續讀博深造。

科研之餘,李沐陽同學的一大愛好是唱歌。在他的個人主頁上,他還分享了自己的唱吧連結,以及個人MV。

論文的另外幾位作者,分別是:

Ji Lin,本科畢業於清華大學,現於MIT就讀博士。

丁堯堯,同樣是來自上海交大ACM班的本科生,和李沐陽同在MIT Han Lab擔任研究助理,受韓松教授指導。

Zhijian Liu,本科畢業於上海交大,現於韓松教授門下就讀博士。

朱俊彥,李沐陽的指導者之一。這位青年大牛無需多介紹,CycleGAN作者,國際頂會ACM SIGGRAPH 2018最佳博士論文獎獲得者。現為Adobe研究科學家,今年秋天將回歸母校CMU擔任助理教授。

韓松,MIT EECS助理教授,同樣是AI業界大牛。博士畢業於史丹福大學,曾斬獲ICLR 2016最佳論文、FPGA 2017最佳論文。

傳送門

論文地址:https://arxiv.org/abs/2003.08936

GitHub:https://github.com/mit-han-lab/gan-compression

李沐陽個人主頁:https://lmxyy.me

Colab:https://colab.research.google.com/github/mit-han-lab/gan-compression/blob/master/cycle_gan.ipynbhttps://colab.research.google.com/github/mit-han-lab/gan-compression/blob/master/pix2pix.ipynb

— 完 —

相關焦點

  • 韓松、朱俊彥等人提出GAN壓縮法:算力消耗不到1/9,現已開源
    因此,基於 GAN 和 cGAN 在圖像合成領域存在的這些問題,韓松團隊提出了 GAN 壓縮,這是一種通用壓縮方法,用於減少 GAN 的推理時間以及計算成本。同時,壓縮生成模型面臨兩個基本困難:GAN 訓練不穩定,尤其是在未配對的情況下;生成器與 CNN 不同,因此很難使用現有的 CNN 設計。
  • 大型強子對撞機,再加上機器學習算法,能否加速破解暗物質之謎?
    挑戰更多的數據,更強的計算能力這是對機器學習服務如何支持一個已經有大量數據只會變得更大領域有希望的一瞥。研究人員目前正在升級大型強子對撞機,使其能以目前速度的五倍粉碎質子。到2026年,歐洲核子研究中心(CERN)的27千米環形地下機器將產生比現在多20倍的數據。
  • ResNet壓縮20倍,Facebook提出新型無監督模型壓縮量化方法
    機器之心原創 作者:立早 怎樣用量化方法解決模型壓縮問題?Facebook 近日提出了一個基於向量的量化方法,無需標註數據即可對 ResNet 模型進行20倍壓縮,還能夠獲得很高的準確率。
  • CVPR 2019Oral論文解讀|百度提出關於網絡壓縮和加速的新剪枝算法
    雷鋒網(公眾號:雷鋒網) AI 科技評論按:百度關於網絡壓縮和加速的論文《 Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration》被 CCF A 類學術會議 CVPR 2019 收錄為 Oral 論文,這篇論文提出了新的基於濾波器的幾何中心(geometric
  • 如何將Numpy加速700倍?用 CuPy 呀
    Numpy 創建一個具有 10 億 1』s 的數組用了 1.68 秒,而 CuPy 僅用了 0.16 秒,實現了 10.5 倍的加速。但 CuPy 能做到的還不止於此。比如在數組中做一些數學運算。這次將整個數組乘以 5,並再次檢查 Numpy 和 CuPy 的速度。
  • 後量子密碼硬體加速:計算速度提升2.5倍,ATP減小4.9倍
    但問題在於,後量子密碼算法的運算量通常非常巨大,想要真正應用和推廣,就對專用後量子密碼晶片提出了高要求:必須要依靠高效的硬體架構,從而能以較低資源開銷獲得滿足應用需求的執行速度。現在,針對這一問題,清華大學魏少軍、劉雷波教授團隊提出了一種低計算複雜度數論轉換與逆轉換方法,以及一種高效的後量子密碼硬體架構。
  • 清華魏少軍、劉雷波團隊提出後量子密碼硬體加速技術,登上頂會
    為應對該類挑戰,學術界和工業界早已開始著手研究能抵禦量子計算攻擊的後量子密碼算法。現在,針對這一問題,清華大學魏少軍、劉雷波教授團隊提出了一種低計算複雜度數論轉換與逆轉換方法,以及一種高效的後量子密碼硬體架構。
  • 後量子密碼硬體加速:計算速度提升2.5倍,ATP減小4.9倍
    為應對該類挑戰,學術界和工業界早已開始著手研究能抵禦量子計算攻擊的後量子密碼算法。現在,針對這一問題,清華大學魏少軍、劉雷波教授團隊提出了一種低計算複雜度數論轉換與逆轉換方法,以及一種高效的後量子密碼硬體架構。
  • 亞馬遜加持,英偉達A100 GPU將無人匹敵?
    在今年的MLPerf中,A100在數據中心推斷方面的表現超過cpu達237x。單個NVIDIA DGX A100系統(帶有8個A100 gpu)在某些AI應用上可以提供與近1000臺雙插槽CPU伺服器相同的性能。
  • 解密NVIDIA GPU加速宇宙學N體模擬計算 | 公開課預告
    CUBE採用定點壓縮技術,極大的降低了內存消耗,結合雙層PM+PP算法,能將每個N-body粒子的內存消耗減少到僅6個字節,比傳統PM算法低一個數量級。並使用包括混合精度計算、通信優化在內的方法對CUBE進行了性能優化,可以在較低的內存消耗下實現較高的計算效率和可擴展性。
  • GPU上的隨機森林:比Apache Spark快2000倍
    隨機森林是一種機器學習算法,以其魯棒性、準確性和可擴展性而受到許多數據科學家的信賴。該算法通過bootstrap聚合訓練出多棵決策樹,然後通過集成對輸出進行預測。由於其集成特徵的特點,隨機森林是一種可以在分布式計算環境中實現的算法。樹可以在集群中跨進程和機器並行訓練,結果比使用單個進程的訓練時間快得多。
  • CVPR 2019:北郵提出新AI模型壓縮算法,顯著降低計算複雜度
    新智元專欄 作者:王敬宇【新智元導讀】來自北京郵電大學的研究人員開發了一種AI模型壓縮算法,可以讓深度學習的運算不再依賴高昂的計算和存儲設備人工智慧在眾多計算機視覺領域都取得了很大的成功,然而深度學習(Deep Learning)因其計算複雜度或參數冗餘,在一些場景和設備上限制了相應的模型部署,需要藉助模型壓縮、優化加速、異構計算等方法突破瓶頸。
  • 谷歌大腦提出「洗髮水」二階優化算法,Transformer訓練時間減少40%
    無論是SGD還是Adam,此類優化算法在都是計算損失函數的一階導數——梯度,然後按照某種規定的方式讓權重隨梯度下滑方向迭代。其實二階梯度會有更好的特性,因為它是計算梯度的導數,能夠更快地找到最合適的下降方向和速度。然而出於計算量和存儲成本的考慮,二階優化算法很少用到。
  • 研究發現:數據壓縮算法可以改變物理和生物學的計算
    在複雜的物理系統中,內部元素的相互作用是不可避免的,這使得熵的計算成為一項計算量大且通常難以解決。有人可能會感到奇怪,上面提到的數據壓縮算法和熵這兩個不同概念,兩者看起來毫不相干,怎麼就連到了一起來了呢?
  • 快手將GPU推理在商業化場景全量落地,機器成本優化超20%
    機器之心發布 機器之心編輯部 快手商業化進程開始加速,這對底層計算能力提出挑戰。快手決定將 GPU 推理在商業化場景全量落地。
  • 暴力解剖GAN!MIT、港中文團隊GANpaint,一筆成畫不是夢
    先奉上傳送門:http://gandissect.res.ibm.com/ganpaint.html?project=churchoutdoor&layer=layer4首先,在界面下方選擇底圖;其次,在左側選擇一個對象,如「草」、「門」、「天空」等等;然後選擇要進行的操作,例如「繪畫」、「刪除」等;最後,只需要在圖片中想要更改的區域塗抹幾筆即可。
  • CPU、GPU、TPU、NPU等到底是什麼?
    每個核擁有的緩存大小相對小,數字邏輯運算單元也少而簡單(GPU初始時在浮點計算上一直弱於CPU),面對的則是類型高度統一的、相互無依賴的大規模數據和不需要被打斷的純淨的計算環境。  TPU是一款為機器學習而定製的晶片,經過了專門深度機器學習方面的訓練,它有更高效能(每瓦計算能力)。
  • 盤點:GPU加速的神經網絡與JavaScript的交叉
    與此同時,GPU加速的使用已經遠遠超出了計算機圖形領域,現在已經成為機器學習的一個必需組成部分。訓練神經網絡與深層架構是一個計算密集型過程,在機器智能領域帶來了許多重要的先進結果。Propel是一個提供自動微分的科學計算的庫。Gpu.js提供了一種方便的方式來運行GPU上的JavaScript函數。Brain.js是舊的神經網絡庫的延續,並使用Gpu.js硬體加速。
  • 「一文看懂」深度神經網絡加速和壓縮新進展年度報告
    然而隨著深度學習的崛起,在計算設備上可集成算法的能力邊界也在不斷拓展,我們仍然面臨著巨大計算量和資源消耗的壓力。深度神經網絡,作為目前人工智慧的基石之一,其複雜性及可移植性將直接影響人工智慧在生活中的應用。因此,在學術界誕生了深度網絡加速與壓縮領域的研究。今天,來自中國科學院自動化研究所的程健研究員,將向大家介紹過去一年中,深度神經網絡加速和壓縮方面所取得的進展。
  • CVPR2017精彩論文解讀:效果更顯著的模型壓縮算法和泛化優化算法
    基於低秩稀疏分解的深度模型壓縮算法——On Compressing Deep Models by Low Rank and Sparse Decomposition深度學習極大地促進了人工智慧的發展,同時也帶來了新的挑戰:深度神經網絡往往需要消耗巨大的存儲和計算資源。