文章目錄
- 1.摘要和背景
- 1.1 摘要
- 1.2 背景
- 2.方法和貢獻
- 2.1 方法
- 2.1.1 訓練過程
- 2.1.2 loss介紹
- 2.2 貢獻
- 3.實驗和結果
- 3.1 實驗
- 3.2 結果
- 4.總結和展望
- 4.1 總結
- 4.2 展望
主要貢獻:基于網絡蒸餾方法,提出了一種提升裁剪后模型的精度的方法!將訓練時間大大縮短!
推薦指數:4顆星(5顆星滿)
本系列是在閱讀深度神經網絡模型小型化方面論文時的筆記!內容大部分從論文中摘取,也會有部分自己理解,有錯誤的地方還望大家批評指出!
論文鏈接:Be Your Own Teacher: Improve the Performance of Convolutional Neural
Networks via Self Distillation
代碼鏈接:github代碼
1.摘要和背景
1.1 摘要
原文摘要:
Convolutional neural networks have been widely deployed in various application scenarios. In order to extend the applications’ boundaries to some accuracy-crucial domains,researchers have been investigating approaches to boost accuracy through either deeper or wider network structures, which brings with them the exponential increment of the computational and storage cost, delaying the responding time.
卷積網絡被用于很多地方,其中很多人為了提高卷積網絡的精度,對模型的深度和寬度進行增加,但是雖然模型的精度有所增加,但是模型的大小和模型的flops急劇增加,這是得不償失的。
In this paper, we propose a general training framework named self distillation, which notably enhances the performance (accuracy) of convolutional neural networks through shrinking the size of the network rather than aggrandizing it. Different from traditional knowledge distillation - a knowledge transformation methodology among networks, which forces student neural networks to approximate the softmax layer outputs of pre-trained teacher neural networks, the proposed self distillation framework distills knowledge within network itself. The networks are firstly divided into several sections. Then the knowledge in the deeper portion of the networks is squeezed into the shallow ones. Experiments further prove the generalization of the proposed self distillation framework: enhancement of accuracy at average level is 2.65%, varying from 0.61% in ResNeXt as minimum to 4.07% in VGG19 as maximum. In addition, it can also provide flexibility of depth-wise scalable inference on resource-limited edge devices. Our codes will be released on github soon.
在本文中,提出了一種通用的訓練框架,使用該框架,模型可以在不增加深度和寬度的基礎上,提高模型的精度。提出的自蒸餾框架是一種網絡間的知識轉換方法,它要求學生神經網絡近似于預先訓練好的教師神經網絡的softmax層的輸出。該方法主要步驟為:1)將原始網絡按照網絡結構的特點分成幾個淺層的網絡;2)對分出來的淺層的網絡分別使用網絡蒸餾的方法(與傳統的蒸餾方法還不一樣,具體請看下面)。最后得出的結果發現使用提出的框架對網絡進行訓練比fine_turn效果好!
1.2 背景
- 卷積網絡由已經在圖像分類,目標檢測和語義分割方面取得了非常好的結果;一般提升網絡精度的方法是度網絡的深度和寬度增加,但是常常得到的結果是增加的精度與增加的計算量是不對等的,所以該方法有弊端。
- 為了能夠讓網絡在計算資源受限的平臺上運行,則需要優化的目標是在滿足資源限制的基礎上,盡可能的降低裁剪后模型的精度;常用的方法包括:1)輕量級的網絡設計;2)網絡剪枝;3)網絡量化等;但是如何提高裁剪后模型的精度是模型后優化問題。
- 知識蒸餾是網絡模型壓縮中常用的方法,但是傳統的知識蒸餾方法需要先預先訓練一個大的強的老師網絡,然后在指導不同結構的學生網絡進行訓練,從而達到將大網絡(老師網絡)的知識壓縮到小網絡(學生網絡)。其中,大網絡的訓練和小網絡結構的尋找是非常耗時的。
- 本文提出一個方法,不需要訓練老師網絡也不需要尋找學生網絡,老師網絡和學生網絡使用相同的結構,然后只需要一步就可以使用知識蒸餾的方法對網絡精度進行提升。
2.方法和貢獻
2.1 方法
上圖是本文提出的自蒸餾訓練框架圖。從圖中可以看出,論文首先將原始網絡分成了4個淺層的網絡,然后在每個淺層的網絡的輸出加上一個瓶頸卷積,全連接層和softmax層,并能夠輸出預測的類別的概率。網絡的前傳播過程主要分為4個,其中前面3個為淺層網絡的前向通道,最后一個為老師網絡的前向通道。網絡中的loss也分為3類。下面將詳細介紹。
2.1.1 訓練過程
- 根據初始網絡的深度和結構,將初始網絡分為幾個淺層網絡。其中初始網絡作為老師網絡,淺層網絡和深層網絡作為學生網絡(如果我們選擇的學生網絡的結構是和老師網絡一樣的,那么深層網絡就是學生網絡,否則淺層網絡是學生網絡。)
- 在每一個淺層網絡的后面加上一個瓶頸層,全連接層和softmax層,構成一個學生分類器。其中使用瓶頸卷積的目的是減少每個淺層分類器之間的影響。
- 在訓連教師網絡的基礎上,使用知識蒸餾方法對學生網絡進行訓練,最終訓練好學生網絡。
2.1.2 loss介紹
- loss Source1:Cross entropy loss from labels to not only the deepest classifier, but also all the shallow classifiers;衡量的是深層網絡和淺層網絡的輸出與真實標簽之間的差異。
- loss Source2:KL (Kullback-Leibler) divergence loss under teacher’s guidance;衡量的是老師網絡和學生網絡的分布差異性。
- loss Source3:L2 loss from hints;衡量的是學生網絡和老師網絡特征之間的差異性;
2.2 貢獻
- 提出了自蒸餾的訓練框架,使得模型在不增加大小,flops和時間的基礎上,提高模型的精度。
- 自蒸餾提供了一個可在不同深度執行的單一神經網絡,允許在資源有限的邊緣設備上進行自適應的精度-效率權衡。即:我們可以在原始網絡的基礎上,根據資源的要求在進行網絡的裁剪(分成很多淺層網絡)。
- 在常用的5種卷積模型和2種數據集上進行了實驗,發現使用本文所提出的的方法得到的結果都比自學習的方法要好。
3.實驗和結果
3.1 實驗
- 5個常用的模型:ResNet,WideResNet,Pyramid ResNet,ResNeXt,VGG
- 兩個數據集:cifar100 和ImageNet
3.2 結果
- 不同模型在cifar100上,使用本文方法和不使用本文方法的結果對比:
1.從實驗的結果可以看出,無論是哪種模型,使用本文方法訓練后的模型精度都會比直接訓練的模型精度高。
2.針對大部分模型,當網絡截取0.75 的時候,得到模型的精度已經比基準模型要好了。
3.集成的結果比使用本文方法訓練后全部網絡效果要好。
- 不同模型在ImageNet上,使用本文方法和不使用本文方法的結果對比:
1.從實驗的結果可以看出,實驗結果和cifar100上的結果類似。
- 不同方法在cifar100和不同模型上的結果對比,其中baseline是不采用蒸餾方法得到的結果,其余的都采用了蒸餾的方法。
1.從表中的結果可以看出,使用蒸餾方法訓練得到的模型精度比不使用蒸餾得到的要高。
2.本文所提方法得到的精度都要比其他蒸餾方法的結果要高。
- 本文方法與使用深度監督方法在cifar100和不同模型上的結果對比。
1.通過表中你的結果可以看出,無論哪種模型,本文所提出的的方法相比于只是用深度監督方法的結果要好。
- 本文方法在模型速度和精度方面的權衡結果。
1.初始網絡的層數越深,則加速效果會更加明顯!
2.從實驗的結果來看,在幾乎相同的裁剪率下,legr算法得到的模型的精度比本文提出的方法要高一些!
3.是否可以將網絡拆分的更多,使得速度的增加粒度更細
4.總結和展望
4.1 總結
- 提出的自蒸餾訓練框架能夠大大的增加訓練后模型的精度。
- 相比于傳統的蒸餾方法,提出了一段式的蒸餾方法,將模型的訓練時間縮短。
- 相比于其他改進的蒸餾方法,模型的精度得到提升
- 不僅可以提升模型的精度,還可以在一定精度的要求下,對模型的結構進行裁剪。
4.2 展望
- Automatic adjustment of newly introduced hyperparameters