日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入浅出的模型压缩:你一定从未见过如此通俗易懂的Slimming操作

發布時間:2024/8/1 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出的模型压缩:你一定从未见过如此通俗易懂的Slimming操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“計算機視覺工坊”,選擇“星標”

干貨第一時間送達

作者丨科技猛獸

編輯丨極市平臺

導讀

?

本文首先介紹了模型壓縮領域的指標含義,并通過梳理文獻,介紹了模型壓縮領域常用的方法。隨后對Slimming這一模型壓縮方法進行了詳細介紹,并講解了Slimming操作壓縮GAN模型的細節。?

目錄

  • 如何衡量模型的復雜度?

論述參數量,計算量,運行占用內存,單位換算關系。

  • Literature Review for Model Compression

列舉剪枝,量化,蒸餾方法list。

  • Slimming

講解如何進行Slimming操作?

  • Slimming操作壓縮GAN模型

講解在GAN模型中如何去結合多種壓縮方法。

  • 參考文獻

如何衡量模型的復雜度?

在學習slimming操作之前的很重要一步是搞懂模型壓縮領域的指標的含義。很多優秀的CNN模型在部署到端側設備時會遇到困難,主要難在下面這3個方面。它們也是模型壓縮領域關注的3個參數:

  • model size

  • Runtime Memory

  • Number of computing operations

  • model size

就是模型的大小,我們一般使用參數量parameter來衡量,注意,它的單位是。但是由于很多模型參數量太大,所以一般取一個更方便的單位:兆(M)?來衡量。比如ResNet-152的參數量可以達到60 million = 0.0006M。

有些時候,model size在實際計算時除了包含參數量以外,還包括網絡架構信息和優化器信息等。比如存儲一個一般的CNN模型(ImageNet訓練)需要大于300MB。

這里你可能會有疑問:剛才的單位是M,怎么這里出來了個MB?是不是寫錯了?

肯定沒有,我們需要注意這里的M和MB的換算關系:

比如說我有一個模型參數量是1M,在一般的深度學習框架中(比如說PyTorch),一般是32位存儲。32位存儲的意思就是1個參數用32個bit來存儲。那么這個擁有1M參數量的模型所需要的存儲空間的大小即為:1M * 32 bit = 32Mb = 4MB。因為1 Byte = 8 bit。

所以讀到這里你應該明白說一個模型的model size,用M和MB其實是一樣的意思。

那你可能還會有疑問:是不是一定要用32位存儲?

這個問題很好,現在的quantization技術就是減少參數量所占的位數:比如我用8位存儲,那么:

所需要的存儲空間的大小即為:1M * 8 bit = 8Mb = 1MB。

更有甚者使用二值神經網絡進一步減小參數量所占的位數(權值被限制為{-1, 1}或{-1, 0, 1}),后文有論文的鏈接,有空再專門介紹這個方法吧。下面簡單介紹下參數量的計算方法:

卷積層參數量的計算方法:

如圖中第2行所示為卷積核:這些卷積核時權重共享的,所以參數量為:

全連接層參數量的計算方法:

  • Run time Memory

就是模型實際運行時所占的內存。注意這個指標與只存儲模型參數所占的存儲空間的大小是不一樣的,這個指標更大。這對于GPU來講不算是問題,但是對于硬件能力極為有限的端側設備來說就顯得無法承受了。它的單位是兆字節 (MB)

  • Number of computing operations

就是模型的計算量,有FLOPs和MACs兩種衡量的方式、簡而言之,前者指的是乘加的數量,而后者指運算量。比如ResNet-152在前向傳播一張256 * 256的圖片的運算量可以達到20 GFLOPs。下面簡單介紹下模型計算量的計算方法:

第1種:FLOPs:

卷積層FLOPs的計算方法:

只需在parameters的基礎上再乘以feature map的大小即可,即對于某個卷積層,它的FLOPs數量為:

如果計算?,則?

為?的運算量。

全連接層FLOPs的計算方法:

對于全連接層,由于不存在權值共享,它的FLOPs數目即是該層參數數目:

為乘法的運算量,?為加法的運算量。

第2種:MACs:

MACs與FLOPs的關系:

設有全連接層為:

y = w[0]*x[0] + w[1]*x[1] + w[2]*x[2] + ... + w[n8]*x[8]

對于上式而言共有9次乘加,即9MACs(實際上,9次相乘、9-1次相加,但為了方便統計,將計算量近似記為9MACs。所以近似來看?。(需要指出的是,現有很多硬件都將乘加運算作為一個單獨的指令)。

全連接層MACs的計算:

激活層MACs的計算:

激活層不計算MAC,計算FLOPs。假設激活函數為:

則計算量為?FLOPs。

假設激活函數為:

則計算量為?FLOPs(乘法,指數,加法,除法)。

在計算FLOPS時,我們通常將加,減,乘,除,求冪,平方根等計為單個FLOP。

但是,實際上,我們通常不計這些操作,因為它們只占總時間的一小部分。通常只計算矩陣乘法和點積(dot product),忽略激活函數的計算量

卷積層MACC的計算:

關于這些指標,更詳細的解讀以及對應的代碼實現可以參考:

科技猛獸:PyTorch 63.Coding for FLOPs, Params and Latency
https://zhuanlan.zhihu.com/p/268816646


Literature Review for Model Compression:

學會計算模型的復雜度之后,下面的任務就是壓縮這個模型。在模型壓縮領域,有一些常用的方法,比如:剪枝,量化,蒸餾,輕量化模塊設計,低秩分解,加法網絡等等。因為方法類別太豐富,這里就簡單做個文獻綜述:

1 剪枝就是通過去除網絡中冗余的channels,filters, neurons, or layers以得到一個更輕量級的網絡,同時不影響性能。?代表性的工作有:

奇異值分解SVD(NIPS 2014):?Exploiting linear structure within convolutional networks for efficient evaluation
韓松(ICLR 2016):?Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding
(NIPS 2015):?Learning both weights and connections for efficient neural network
頻域壓縮(NIPS 2016):?Packing convolutional neural networks in the frequency domain
剪Filter Reconstruction Error(ICCV 2017):?Thinet: A filter level pruning method for deep neural network compression
LASSO regression(ICCV 2017):?Channel pruning for accelerating very deep neural networks
Discriminative channels(NIPS 2018):?Discrimination-aware channel pruning for deep neural networks
剪枝(ICCV 2017):?Channel pruning for accelerating very deep neural networks
neuron level sparsity(ECCV 2017):?Less is more: Towards compact cnns
Structured Sparsity Learning(NIPS 2016):?Learning structured sparsity in deep neural networks

2 輕量化模塊設計就是設計一些計算效率高,適合在端側設備上部署的模塊。?代表性的工作有:

Bottleneck(ICLR 2017):?Squeezenet: Alexnet-level accuracy with 50x fewer parameters and 0.5 mb model size
MobileNet(CVPR 2017):?Mobilenets: Efficient convolutional neural networks for mobile vision applications
ShuffleNet(CVPR 2018):?Shufflenet: An extremely efficient convolutional neural network for mobile devices
SE模塊(CVPR 2018):?Squeeze-and-excitation networks
無參數的Shift操作(CVPR 2018):?Shift: A zero flop, zero parameter alternative to spatial convolutions
Shift操作填坑(Arxiv):?Shift-based primitives for efficientconvolutional neural networks
多用卷積核(NIPS 2018):?Learning versatile filters for efficient convolutional neural networks
GhostNet(CVPR 2020):?GhostNet: More features from cheap operations

3 蒸餾就是過模仿教師網絡生成的軟標簽將知識從大的,預訓練過的教師模型轉移到輕量級的學生模型。?代表性的工作有:

Hinton(NIPS 2015):?Distilling the knowledge in a neural network
中間層的特征作為提示(ICLR 2015):?Fitnets: Hints for thin deep nets
多個Teacher(SIGKDD 2017):?Learning from multiple teacher networks
兩個特征得新知識再transfer(CVPR 2017):?A gift from knowledge distillation: Fast optimization, network minimization and transfer learning

4 量化就是減少權重等的表示的位數,比如原來網絡權值用32 bit存儲,現在我只用8 bit來存儲,以減少模型的Memory為原來的?;更有甚者使用二值神經網絡。?代表性的工作有:

量化:
(ICML 2015):?Compressing neural networks with the hashing trick
(NIPS 2015):?Learning both weights and connections for efficient neural network
(CVPR 2018):?Quantization and training of neural networks for efficient integer-arithmetic-only inference
(CVPR 2016):?Quantized convolutional neural networks for mobile devices
(ICML 2018):?Deep k-means: Re-training and parameter sharing with harder cluster assignments for compressing deep convolutions
(CVPR 2019):?Learning to quantize deep networks by optimizing quantization intervals with task loss
(CVPR 2019):?HAQ: Hardware-Aware automated quantization with mixed precision.

二值神經網絡:
Binarized weights(NIPS 2015):?BinaryConnect: Training deep neural networks with binary weights during propagations
Binarized activations(NIPS 2016):?Binarized neural networks
XNOR(ECCV 2016):?Xnor-net: Imagenet classification using binary convolutional neural networks
more weight and activation(NIPS 2017):?Towards accurate binary convolutional neural network
(ECCV 2020):?Learning Architectures for Binary Networks
(ECCV 2020):?BATS: Binary ArchitecTure Search

5 低秩分解就是將原來大的權重矩陣分解成多個小的矩陣,而小矩陣的計算量都比原來大矩陣的計算量要小。?代表性的工作有:

低秩分解(ICCV 2017):?On compressing deep models by low rank and sparse decomposition
樂高網絡(ICML 2019):?Legonet: Efficient convolutional neural networks with lego filters
奇異值分解(NIPS 2014):?Exploiting Linear Structure Within Convolutional Networks for Efficient Evaluation

6 加法網絡就是:利用卷積所計算的互相關性其實就是一種“相似性的度量方法”,所以在神經網絡中用加法代替乘法,在減少運算量的同時獲得相同的性能。?代表性的工作有:

(CVPR 20):?AdderNet: Do We Really Need Multiplications in Deep Learning?
(NIPS 20):?Kernel Based Progressive Distillation for Adder Neural Networks
(Arxiv):?AdderSR: Towards Energy Efficient Image Super-Resolution

7 Slimming:

(ICCV 2017):清華張長水,黃高團隊:?Learning Efficient Convolutional Networks through Network Slimming
(ECCV 2020):得克薩斯大學奧斯汀分校團隊:?GAN Slimming: All-in-One GAN Compression by A Unified Optimization Framework


Slimming:

而本文要講的方法名字叫做slimming,它相比于上面這些方法,優點是什么?

答:?上面這些方法(1-6)有2個缺點:

  • 只能解決上面講的3個指標(model size, runtime memory, number of computation numbers)中的1-2個,即比如剪枝減少了模型參數量,可是運行時占得內存空間仍舊很大因為許多Memory花在了activation map上面,而不是weights上面,另外有的pruning方法需要專門的硬件電路;或是比如量化可以減少model size,可是運行時占得內存空間仍舊很大,Latency也沒有下降,因為你得把權重還原回去。這是第一個缺點。

  • 許多技術依賴于specially designed software/hardware accelerators,即如果我想用這個方法,丫還得專門去買你們設計的硬件電路芯片或者對應的軟件[○・`Д′・ ○]。有一個組的很多文章都是這樣。換句話說,以上這些壓縮方法不夠general-purpose

  • 而Slimming這個模型壓縮方法,就是為了解決這兩個問題而生的。

    具體是咋做的呢?

    總體思路:實現一種channel-level的sparsity,就是在通道數上面稀疏化。本質是識別并剪掉那些不重要的通道(identify and prune unimportant channels)。

    模型壓縮可以在weight-level, kernel-level, channel-level 或者 layer-level上進行,為什么要在channel-level上面著手?

    weight-level往往需要特殊的硬件加速器或軟件來實現fast inference。

    layer-level只適用于一些特別深的模型,比如超過50層的模型,但是不是很靈活。

    相比之下,channel-level 取得了靈活性和實現方便程度的折中。

    具體的做法可以用下面這幅圖來表示:

    slimming的具體做法

    首先我們可以給每個channel定義一個scaling factor?,這個值在前向傳播時要和這個channel的輸出值乘在一起。在訓練網絡時,這個scaling factor與其他的權重一起訓練,目標函數如下式:

    只是為這個scaling factor?加上了sparsity regularization的罰項。其中?代表正常的訓練數據,?代表權重。在實驗中取?,即使用?范數。

    訓練完后。把scaling factor比較小的channel視為是unimportant channel,剪掉。

    剩下的部分網絡(上圖右)就是壓縮后的網絡,即compact model。

    所以,這個scaling factor?的作用相當于是 an agent for channel selection。重要的是因為它們與網絡聯合優化,使得模型可以自動識別unimportant channel,可以安全地剪掉,而不影響性能。

    所以,有了這個scaling factor,就可以實現模型channel的壓縮。

    現在的問題是:scaling factor如何得到?

    我們將它與Batch Normalization聯系起來,在BN中:

    這里的?和?是trainable affine transformation parameters (scale and shift)。

    所以,可以直接使用BN中的?參數作為我們要找的scaling factor?。這樣,網絡就不用做出任何的修改而直接訓練。

    而且,使用這種方式得到scaling factor?是最便捷的方式了,相比下面這幾種實現方式:

  • 如果我們放棄BN而給模型每一層加上一個scaling層:那么這個scaling層的參數將會是無意義的。因為convolution層和scaling層都是線性變換(Linear Transformation),你用這個scaling層,和把卷積層的weights調大一點結果是一樣的。

  • 如果我們在BN層之前加上一個scaling層:那么?帶來的scaling的效應將會被BN層的normalization的作用抹去。

  • 如果我們在BN層之后加上一個scaling層:那么每個channel將會有2個scaling factor,沒有必要。

  • 以這樣的方式進行訓練,有的channel的scaling factor就會是接近0的,那么就剪掉這些channel。那么scaling factor的閾值如何設計呢?比如我想剪掉70%的channel,那么閾值就設定在scaling factor排名70%左右的位置。

    還有一個要解決的問題就是accuracy loss的問題,當剪枝率較大的時候,可能會帶來精度的下降,此時我們通過fine-tune來補償。

    更有趣的是,這一過程還可以重復進行,如下圖所示:

    Slimming操作流程圖,Slimming一時爽,一直Slimming一直爽。

    就是sliming一次,得到小模型之后再次slimming,得到更小的模型。slimming一時爽,一直slimming一直爽。

    最后一個要解決的問題就是存在跨層連接的問題:有的網絡(比如VGG, AlexNet)不存在跨層連接,但是像ResNet和DenseNet這種存在跨層連接的,就需要做一些調整。

    作者在下面的數據集上展示了這種方法的效果:

    Slimming操作的實驗結果

    表中60% pruned的含義是剪掉了60%的channel數。

    Baseline是指不使用sparsity regularization進行訓練。

    壓縮后的評價指標參數量計算量分別在Parameter和FLOPs這2列展示。

    對比結果可得:Slimming操作使參數量計算量都有下降,且模型的精度提升了。

    消融實驗1:

    接下來我們評估下剪枝率對模型的影響的大小:

    如果剪枝率設的比較低,則對于壓縮模型意義不大;可如果設置的太高,又會很影響模型的精度。所以通過在CIFAR-10上面訓練DenseNet-40,取超參數?,得到下面的結果:

    剪枝率的影響

    可以得到下面的結論:

    • 當剪枝率超過一定的閾值時,精度會大大降低。

    • Finetuning過程可以補償精度的下降。

    • 當使用sparsity罰項時,即使不fine-tuning,性能也會優于baseline。

    消融實驗2:

    接下來我們評估關于sparsity罰項的超參數?對結果的影響:

    Distributions of scaling factors in a trained VGGNet under various degree of sparsity regularization

    超參數?的作用是驅使scaling factor?的距離拉大,以使得剪枝對模型的影響減少。

    當超參數?越來越大時,scaling factor?之間的距離將越拉越大。有的channel將會變得越來越不重要,以極小化剪掉它們給模型帶來的影響。

    Slimming操作壓縮GAN模型

    問:蒸餾,剪枝,量化?都是模型壓縮的技巧,它們可以結合在一起使用嗎?

    答:可以。?在普通的深度學習分類模型上,已有很多成功的把三者結合起來的例子,比如:

    ICLR 2016 Best Paper:?韓松老師的Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding

    問:?既然如此,相同的做法可以復制到GAN模型上嗎?

    答:?并不容易。因為GAN模型存在眾所周知的training instability,即訓練不穩定的問題。

    問:?那這個問題可以克服嗎?

    答:GAN Slimming?就是用來解決這個問題,它的特點有:

    • end-to-end:端到端

    • unified:統一的框架

    • combining multiple compression means:包含多種壓縮方法


    具體是怎么做的?

    答:channel pruning + quantization

    這步channel pruning的過程就相當于是上一節介紹的slimming操作

    我們從GAN的訓練過程說起:

    首先GAN模型的訓練是一個minmax optimization的問題:

    因為實際部署時只需要Generator而不需要Discriminator,所以我們只需要壓縮G即可。

    要對Generator進行壓縮,我們定義小的Generator為?,預訓練一個原模型?。通過蒸餾操作,即下面的目標函數來減少二者的距離:

    下面的問題是:如何定義?的結構?

    按照蒸餾distillation的辦法,直接減少的channel數即可。可是實驗發現這樣做對性能影響較大。

    按照我們的slimming的操作,我們為trainable scaling parameter?增加一個罰項?,這個scale factor就來自于 normalization layers。

    定義生成器?的參數為?,我們把目標函數重寫為:

    式中?是超參數。

    量化方面,我們針對activations和weights進行量化,使用2個量化器?和?(這個量化器是什么先別著急,下面會詳細講解~)。量化后的weights可以表示為?,我們使用?代表經過量化器?和?量化之后的小生成器?。最終包含蒸餾,剪枝,量化的目標函數為:

    式中代表小生成器?的參數,?代表判別器?的參數。

    藍色代表蒸餾部分。

    綠色代表剪枝部分。

    紅色代表量化部分。

    訓練方式依舊是minmax方法:

    這樣的一套流程可以視作是一種特殊的NAS過程,其中,student generator由teacher generator經剪枝,量化而來。它的特點是:

  • 每一步操作可解釋。

  • 輕量化,穩定。

  • 不需要NAS方法耗費大量的計算資源與精心設計搜索空間。

  • 端到端優化策略

    要優化19式,我們需要解決3個問題:

    • minmax優化本身就是不穩定的。

    • 更新?的權重會遇到不可微分的量化參數,如何應用梯度下降?

    • 更新罰項參數?,罰項是?范數,也是不可微的,如何應用梯度下降?

    首先看更新?的問題:

    19式中包含?的只有前兩項,因此這個問題可以被等效為:

    要使用梯度下降更新?,就必須先求出這個東西:?。

    但由于和?的不可微分性,無法直接求梯度。

    現在開始著手解決這個問題:

    首先觀察到和?屬于元素級操作,專業術語叫做element-wise operation。

    所以,我們只需要解決標量scalar的不可求導問題,那么向量,矩陣的問題也就解決了。

    無法對梯度求導的根本原因是和?在經過量化以后,變成了不可微分的值。

    我們定義?和?分別為activation和weight中的一個標量。

    要解決量化的不可導問題,那就首先要了解量化的過程是個啥。

    量化 (Quantization)?一詞,如果你學過數字電路或者控制理論的話應該并不陌生,看一副圖片吧~

    采樣-保持電路及其輸出

    數字電路的A/D轉換器通常要經過4個步驟:采樣,保持,量化和編碼。

    采樣就是:?對連續變化的模擬信號定時地測量,抽取其樣值,采樣結束后,再將此取樣信號保持一段時間,使A/D 轉換器有充足的時間進行A/D轉換。采樣-保持電路就是完成該任務的。其中,采樣頻率越高,采樣越密,采樣值就越多,采樣-保持電路的輸出就越接近于輸入信號。因此對采樣頻率提出了一定的要求,必須滿足采樣定理。

    量化就是:?如果要把變化范圍在?的模擬電壓轉換為3位二進制代碼的數字信號,由于3位二進制代碼只有?即8個數值,因此就必須將模擬電壓平分為8個等級。每個等級規定一個基準值,例如?為一個等級,基準值為0V,二進制代碼為000;?為一個等級,基準值為7V,二進制代碼為111。凡屬于某一等級范圍內的模擬電壓值,就用該級電壓的基準值去表示。例如?,它在?之間,就用該級的基準值3V來表示,代碼是011。顯然,相鄰兩級間的差值是?。

    所謂量化,在數電里面,就是把采樣電壓轉換為某個最小電壓整數倍的過程,編碼就是用二進制代碼來表示量化后的量化電平。

    有點扯遠了,說這么一段的目的就是為了使你看懂:量化在深度學習里面,就是把權重weights看作是模擬電壓,把它轉換為一個編碼,這個編碼可以是二進制的。你比如說我想量化為3位,3 bit,那么這個二進制代碼就是000-111,如下圖所示。你再比如說我想量化為1位,1 bit,那么這個二進制代碼就是{-1, 1}。

    量化為3位

    還回到我們的GAN Slimming里面,現在的任務是量化和?:

    量化?:把?clamp到一個范圍里面:?,假設量化到?位。那么一共就有?種編碼。每個編碼占的長度就是?。所以量化器?可以寫作是:

    你細品一下,這個公式是不是和上面模擬電壓?的量化過程一模一樣?

    量化?:?這個參數有正有負,所以我們先取絕對值,每個編碼占的長度就是?,假設量化到?位(?),那么一共就有?種編碼。量化器?可以寫作是:

    接下來就是最棘手的不可微分問題(non-differentiable),使用pseudo gradient代指梯度,對于activation quantization,我們有:

    對于weight quantization,我們有:

    就是量化之后,對?或者?求導都不改變梯度,即量化后的值對量化前的值得導數認為是1。

    這樣我們就能計算?了,也就可以使用梯度下降更新?了。

    接下來看更新?的問題:

    19式中包含?的項保留,因此這個問題可以被等效為:

    因為?范數這一項無法直接求導,所以我們采用近似梯度下降更新:

    這一步其實也很好理解:因為?由標量組成,我們考慮它的一個分量(標量),所以?范數無非也就2種情況:當?時為?;當?時為?。所以當?時梯度應當多減掉一個?;當?時梯度應當多加上一個?。上式的意思就是這樣。

    要細究深層次的詳細原因,就不得不從近端梯度下降開始說起,由于這部分內容很長,所以不在本文中詳細展開,具體可以閱讀下文:

    科技猛獸:機器學習中的數學理論2:近端梯度下降
    https://zhuanlan.zhihu.com/p/277041051

    最后看更新?的問題:

    19式中包含?的項保留,因此這個問題可以被等效為:

    注意這里更新遵循的是gradient ascend的方法。

    接下來就是按照GAN的訓練方式去迭代更新?和?了,在更新?時,更新里面的權重?和?,更新?時,更新里面的權重?即可。

    最后一個問題是蒸餾的距離度量函數?該如何選擇?

    傳統的蒸餾辦法使用一些soft label + KL divergence的方法。

    這里我們使用perceptual loss。所以最終的算法流程為:

    GAN Slimming算法流程

    其中,4,5兩步更新?的參數;6這一步更新?的參數,交替進行。

    實驗部分:

    我們先把這種方法應用在CycleGAN上面,得到如下結果:

    CycleGAN原模型

    CycleGAN壓縮模型

    表中?代表的含義是:

    它們分別代表model size的壓縮比,計算量的壓縮比,結果FID的優化度。

    GS-32就是不進行量化的32位存儲。GS-8就是Slimming操作完成的8位存儲的結果。

    我們發現:GS-8與GS-32相比在結果差不多的前提下,多壓縮了4倍。

    在winter-to-summer這個數據集上,GS-8可以壓縮31倍之多。下圖展示了一些可視化實驗結果:

    GAN Slimming可視化實驗結果

    消融實驗:

    作者又做了其他一些方法1的實驗作為對比:

    D:Distillation:只使用蒸餾技術,來自1的方法。

    CEC:來自2的方法。

    D+CP:Distillation與channel pruning一起用。

    CP+D:channel pruning與Distillation一起用。

    GS-8 (MSE):GS-8 換成MSE Loss。

    PostQ:GS-32+Quantization:先使用GS-32,再使用8 bit量化和fin-tune。

    不同方法消融實驗對比結果

    參考文獻:

    [1] Distilling portable Generative Adversarial Networks for Image Translation
    [2] Co-Evolutionary Compression for Unpaired Image Translation
    [3] Convex Optimization, Lecture 7, CMU
    [4] Learning Efficient Convolutional Networks through Network Slimming
    [5] GAN Slimming: All-in-One GAN Compression by A Unified Optimization Framework
    [6] Proximal Gradient Descent (by Ryan Tibshirani from CMU):http://stat.cmu.edu/~ryantibs/

    本文僅做學術分享,如有侵權,請聯系刪文。

    重磅!計算機視覺工坊-學習交流群已成立

    掃碼添加小助手微信,可申請加入3D視覺工坊-學術論文寫作與投稿?微信交流群,旨在交流頂會、頂刊、SCI、EI等寫作與投稿事宜。

    同時也可申請加入我們的細分方向交流群,目前主要有ORB-SLAM系列源碼學習、3D視覺CV&深度學習SLAM三維重建點云后處理自動駕駛、CV入門、三維測量、VR/AR、3D人臉識別、醫療影像、缺陷檢測、行人重識別、目標跟蹤、視覺產品落地、視覺競賽、車牌識別、硬件選型、深度估計、學術交流、求職交流等微信群,請掃描下面微信號加群,備注:”研究方向+學校/公司+昵稱“,例如:”3D視覺?+ 上海交大 + 靜靜“。請按照格式備注,否則不予通過。添加成功后會根據研究方向邀請進去相關微信群。原創投稿也請聯系。

    ▲長按加微信群或投稿

    ▲長按關注公眾號

    3D視覺從入門到精通知識星球:針對3D視覺領域的視頻課程(三維重建系列三維點云系列結構光系列手眼標定相機標定、激光/視覺SLAM、自動駕駛等)、知識點匯總、入門進階學習路線、最新paper分享、疑問解答五個方面進行深耕,更有各類大廠的算法工程人員進行技術指導。與此同時,星球將聯合知名企業發布3D視覺相關算法開發崗位以及項目對接信息,打造成集技術與就業為一體的鐵桿粉絲聚集區,近4000星球成員為創造更好的AI世界共同進步,知識星球入口:

    學習3D視覺核心技術,掃描查看介紹,3天內無條件退款

    ?圈里有高質量教程資料、可答疑解惑、助你高效解決問題

    覺得有用,麻煩給個贊和在看~

    總結

    以上是生活随笔為你收集整理的深入浅出的模型压缩:你一定从未见过如此通俗易懂的Slimming操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。