YOLOv8源碼修改(5)- YOLO知識蒸餾(下)設置蒸餾超參數:以yolov8-pose為例

目錄

前言

1. 不同蒸餾算法資源占用

2. 不動態調整蒸餾損失

2.1? 訓練定量化結果

2.1 訓練結果可視化結果

3. 動態調整蒸餾損失權重及實驗分析

3.1 余弦衰減和指數衰減

3.2 CWD蒸餾損失

3.3 MGD蒸餾損失

3.4 AT蒸餾損失

3.5 SKD和PKD蒸餾損失

4. 調權重心得總結

5. 待驗證


前言

? ? ? ?YOLOv8源碼修改(5)- YOLO知識蒸餾(上)添加蒸餾代碼,以yolov8-pose為例進行知識蒸餾

????????接上文,我們已經加好了yolo蒸餾訓練的必要代碼,但并不意味著知識蒸餾就有用。我總結了以下一些可能有影響的因素:

(1)蒸餾算法的選擇。最常用的CWD、MGD等知識蒸餾算法,論文中MGD的性能就要好過CWD。

(2)蒸餾算法的超參設置。以MGD為例,alpha_mgd的權重設置,lambda_mgd的權重設置等等,不同的參數設置會取得不同效果,MGD的論文里也寫了,他的最佳經驗值,是夠能在我們自己的數據集上取得最好呢?

(3)蒸餾損失權重的設置。這點我認為是最重要的。因為所有蒸餾算法都繞不開,尤其對于yolo來說,yolo基于檢測最基本的loss有box_loss、cls_loss和dfl_loss,如果是obb、seg、pose等任務,還會引入其他的loss。如果蒸餾損失過大,勢必會導致其中一些較小的loss“失效”。

(4)數據集本身的質量。以COCO2017人體關鍵點為例,里面有些人需要預測出,有些人不需要預測出(我認為是標注錯誤、或者漏標)。但模型可能有別的“思考”,比如,只預測出屬于“前景”的人,而“背景”的人不預測。大模型(m號以上)可以區分這種細粒度的區別,但小模型不行,因此就表現為中間層顯著的特征差異,這時候知識蒸餾就明顯了。而我數據清洗后,幾乎沒有漏標和錯標,只要是人就預測出,這種特征可能相對簡單,小模型(s號,n號可能還是不行)已經足夠表示,所以再用知識蒸餾,這時效果就不明顯了。

(5)教師模型和學生模型的差異。這里的差異不僅表現為中間層維度的差異,還可能是架構的差異,比如用yolov11m去蒸餾yolov8s,從一個維度映射到另一個維度,這種特征映射真的能形成等效表達嗎?以及還有性能上的差異,教師模型比學生模型優秀多少,才能讓學生模型有一個穩定提升。

(6)蒸餾代碼實現的細節。我主要還是參考了paddleDetection中的yolo蒸餾實現,其中對特征用了均值歸一化,如果換成一個可學習的BN層是否會更好,還有中間相同維度特征的映射,是否還要再加入一個相同維度的1D卷積?

?經過大量調試訓練后,我得出的心得:

? ? ? ? 對于實際落地的yolo訓練而言(寫論文不在其中),一個好的蒸餾算法應該只有一個參數,就是“損失權重”,最多再加一個影響不大的可調節參數。

? ? ? ? 根據動態調整訓練過程中的損失權重,我發現:不同蒸餾算法的影響可能沒有那么大,只要損失權重調整的好,都可以取得一個不錯的訓練結果。

1. 不同蒸餾算法資源占用

? ? ? ? 下面是我訓練時候記錄的資源占用情況,可以看到MGD訓練時間比其他的多了1小時,這些算法大都要生成中間特征,以進行一系列操作,因此顯存占用大。

? ? ? ? 所以,經過我的調整測試,我一般選擇AT來做蒸餾,實現簡單,資源占用少,關鍵還有效。除非準確度有要求,才考慮其他的蒸餾算法。


2. 不動態調整蒸餾損失

2.1? 訓練定量化結果

????????首先,還是問問神奇的GPT,蒸餾損失大小怎么調整,他是這樣告訴我的:

? ? ? ? 可調節的占比范圍大概在0.1-0.8之間,然后如下圖綠色框中所示,觀察一下yolov8s-pose的幾類損失,發現box_loss和dfl_loss很小加起來才等于其他3個損失。所以,我就想蒸餾損失應該控制在20%~30%之間(絕對數值在1.0~2.0之間),這樣占比剛好取個平均值。

? ? ? ? 基于上面這樣設置參數,本文直接進行了實驗,得到了以下結果:

? ? ? ? 如上圖,僅CWD取得比較明顯的效果,MGD僅次于CWD。于是,我們就有疑問:這和論文中的結果不對啊。MGD是后發的論文,里面明明還寫了自己效果比CWD好的。

? ? ? ? 此外,我們還容易發難:這個AT是什么鬼,不僅沒正面作用,還產生負面效果了,難道是這個蒸餾算法實現不對,或者就是個rubbish算法,打著“attention”的旗號水論文,根本沒有普適性?

????????而經過我對訓練過程分析,發現恰恰相反,AT是所有算法中收斂最快的,尤其在前50輪的訓練,基本要比正常訓練高1~2%的點。那就又有疑問了:假設我們從50輪起訓練,不加任何蒸餾損失,我AT訓練得到的模型,應該有一個更好的起點(各項指標都高),那么最終獲取的模型,至少不應該比其他蒸餾算法訓練得到的差吧?

? ? ? ? 因此,我也做了一些可視化分析。

2.1 訓練結果可視化結果

? ? ? ? 每10輪,記錄一下驗證的結果(B表示檢測框,P表示關鍵點):

? ? ? ? 根據上面的圖表,我很很如看到AT在開始是瑤瑤領先的,收斂速度很快。但是在50輪之后就不行了。那只有一個原因,訓練后期,AT的蒸餾損失對模型優化是負面影響。

? ? ? ? 因此,我用余弦衰減來對AT蒸餾損失進行加權,最終得到以下變化:

? ? ? ? 根據上圖,很容易發現,進行衰減加權后,整個訓練過程中,取得的性能都要優于直接使用的性能。最終,pose的mAP50:95取得66.8(超正常訓練的66.5),也說明知識蒸餾產生了一些效果。


3. 動態調整蒸餾損失權重及實驗分析

? ? ? ? 使用余弦衰減、指數衰減后損失權重的可視化分析。這里沒有使用“溫度”這個參數來調整損失大小,是因為相比分類,檢測、關鍵點等損失調整要困難很多,直接用權重加權會簡單很多。

3.1 余弦衰減和指數衰減

? ? ? ? 也可以引入warmup,因為前期損失過大,不過用了以后,似乎沒啥用。

????????這兩種衰減方式的選擇,主要是看損失需不需要快速衰減,比如AT后期沒用,可能需要衰減快一點,就用指數衰減,其他可以用余弦衰減。具體還是要根據自己的訓練過程中,蒸餾損失下降的特性以及產生的影響去調整。

指數衰減:

余弦衰減:

????????衰減的預設參數的代碼寫在了distillation.py中YOLOv8DistillationLoss類的get_kd_weight方法中:

3.2 CWD蒸餾損失

? ? ? ? 如下圖,最初用BN來歸一化的版本的,下井很快,20輪后比例就穩定在0.11,總統而言,該算法損失下降速度和yolov8-pose的一致,可能不需要加權重,只需要調整比例。

? ? ? ? 加權后下降,如下圖,精度反而掉了0.3%,參數還需要調整一下。

3.3 MGD蒸餾損失

? ? ? ? MGD的蒸餾損失在后期占比還提升了,說明下降過慢,對應后期性能增加也變慢了。

? ? ? ? 我設置最終權重衰減到0.1,不過訓練結果好像也沒有提升,也沒有下降。經過多次實驗,我發現只要權重不是設置太高或者太低,該方法都能產生效果,是魯棒性比較好的一個方法

3.4 AT蒸餾損失

? ? ? ? AT的下降趨勢看起和CWD類似,但是比例卻不同,損失占比一致在20%左右,可能太高了,但是前期收斂快也是真的快,是唯一一個能在20輪的時候就讓原始損失到6.5的,比其他算法快了10輪。

? ? ? ? 加權后,衰減到0,衰減好像過快了,導致后期就是沒進行知識蒸餾的訓練。所以這部分參數還得再調試。

3.5 SKD和PKD蒸餾損失

????????這兩種算法不會實際用,僅做實驗參考。

SKD:2.1中訓練效果變差,有原因,就是這個損失在后期占比越來越高,影響原始損失的下降了。

PKD:中規中矩,沒啥特點,類似CWD,要用估計也優先用CWD。


4. 調權重心得總結

? ? ? ? 我會優先選擇AT,因為實現簡單,資源消耗少,訓練時間也不會變長。實際訓練的想法就是但求無錯,最好有功。

? ? ? ? 求魯棒性選擇MGD,算法對參數設置(用論文中的就行)沒那么敏感,多多少少會有些效果。

? ? ? ? 求結果選擇CWD,只要參數調的好,效果比MGD還好。

? ? ? ? 初始權重調整:將蒸餾損失與原始損失的初始比例調整到15%~25%,最終比例調整到5%~15%,可能是一個比較好的設置。

? ? ? ? 如果教師模型性能遠超學生模型(比如yolov8m-pose蒸餾yolov8n-pose),那么參數設置可以沒那么嚴格,因為我在做m蒸n時,參數直接用的m蒸s的,根本沒調,結果也能提升2.5%~2.8%。


5. 待驗證

? ? ? ? 優于時間有限,目前驗證的結論如上。大家可以多嘗試,分享下調參經驗。

? ? ? ? 還可以采用多種/多階段的知識蒸餾方式,比如AT+MGD,開始設置9:1權重,最后設置1:9權重,因為AT開始效果好,MGD后期效果好一些,可以多嘗試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84443.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

歷年華東師范大學保研上機真題

2025華東師范大學保研上機真題 2024華東師范大學保研上機真題 2023華東師范大學保研上機真題 在線測評鏈接:https://pgcode.cn/school?classification1 簡單一位數代數式計算 題目描述 給一個小學生都會算的1位數與1位數運算的代數式,請你求出這個表…

Oracle 中 SHRINK 與 MOVE 操作的比較

Oracle 中 SHRINK 與 MOVE 操作的比較 在 Oracle 數據庫中,SHRINK 和 MOVE 都是用于重組表和索引以減少空間碎片的重要操作,但它們在實現方式和適用場景上有顯著區別。 SHRINK 操作 基本語法 ALTER TABLE table_name SHRINK SPACE [COMPACT] [CASCAD…

展銳 Android 15 鎖定某個App版本的實現

Android 15 系統鎖定Antutu版本的實現方法 在Android系統開發中,有時需要鎖定特定應用的版本以確保系統穩定性或測試一致性。本文將介紹如何通過修改Android源碼來鎖定Antutu跑分軟件的版本。 修改概述 這次修改主要涉及以下幾個方面: 禁用產品復制文件的檢查添加指定版本…

視頻剪輯SDK定制開發技術方案與報價書優雅草卓伊凡

視頻剪輯SDK定制開發技術方案與報價書-優雅草卓伊凡 一、項目概述 客戶需求:開發一套跨平臺(Android/iOS/Uni-App)視頻剪輯SDK,包含AI字幕提取、轉場特效、文字疊加、背景音樂、濾鏡、背景替換、動態貼紙等功能。 報價范圍&#…

BGP為什么要配置對等IP?

本文由deepseek生成,特此聲明 一、為什么要配置對等體IP? 1. 明確標識鄰居身份 路由協議需求:動態路由協議(如BGP、OSPF、RIP)需要路由器之間建立鄰居關系以交換路由信息。配置對等體IP是為了唯一標識鄰居路由器&…

Qt中配置文件讀寫

1. 保存分組數據到配置文件 #include <QSettings>void saveNetworkConfig() {QSettings settings("network.ini", QSettings::IniFormat);// 網絡配置分組settings.beginGroup("Network");// 源地址配置settings.beginGroup("Source");se…

Linux 的編輯器--vim

1.Linux編輯器-vim使? vi/vim的區別簡單點來說&#xff0c;它們都是多模式編輯器&#xff0c;不同的是vim是vi的升級版本&#xff0c;它不僅兼容vi的所有指令&#xff0c;?且還有?些新的特性在??。例如語法加亮&#xff0c;可視化操作不僅可以在終端運?&#xff0c;也可以…

SAP Commerce(Hybris)開發實戰(二):登陸生成token問題

問題簡述 最近處理Hybris框架標準的登陸功能&#xff0c;遇到一個問題&#xff1a;用兩個不同的瀏覽器&#xff0c;同時登陸一個賬號&#xff0c;會同時生成兩個不同的token和refreshToken。 問題原因 解決了其實非常簡單&#xff0c;就是Hybris的Employee表中&#xff0c;有一…

c/c++的opencv椒鹽噪聲

在 C/C 中實現椒鹽噪聲 椒鹽噪聲&#xff08;Salt-and-Pepper Noise&#xff09;&#xff0c;也稱為脈沖噪聲&#xff08;Impulse Noise&#xff09;&#xff0c;是數字圖像中常見的一種噪聲類型。它的特點是在圖像中隨機出現純白色&#xff08;鹽&#xff09;或純黑色&#x…

LIEDNet: A Lightweight Network for Low-light Enhancement and Deblurring論文閱讀

摘要 夜間拍攝的圖像常常面臨諸如低光和模糊等挑戰&#xff0c;這些問題主要是由于昏暗環境和長時間曝光的頻繁使用所導致。現有方法要么獨立處理這兩種退化問題&#xff0c;要么依賴于通過復雜機制生成的精心設計的先驗知識&#xff0c;這導致了較差的泛化能力和較高的模型復…

談談worldquant中設置的幾個意思

Decay 是一個設置&#xff0c;用于確定要反映多少過去的位置。正如我們之前詳細介紹的那樣&#xff0c;Decay 值越高&#xff0c;Alpha 周轉率越低。但是&#xff0c;請注意&#xff0c;Alpha 的夏普比率可能會隨著信息延遲而降低。 創建 Alpha 時&#xff0c;頭寸可能會集中在…

大模型和AI工具匯總(一)

一、國內可免費使用的大模型&#xff08;持續更新&#xff09; DeepSeek 模型介紹&#xff1a;DeepSeek 系列包括 DeepSeek V3&#xff08;通用場景&#xff09;、DeepSeek R1&#xff08;推理模型&#xff09;&#xff0c;支持高達 64K 上下文長度&#xff0c;中文場景表現優…

HarmonyOS NEXT 技術特性:分布式軟總線技術架構

HarmonyOS NEXT 技術特性&#xff1a;分布式軟總線技術架構 隨著物聯網發展&#xff0c;2030 預計全球聯網設備達 2000 億&#xff0c;異構設備互聯難題凸顯&#xff0c;分布式軟總線作為 HarmonyOS 生態核心&#xff0c;以軟件虛擬總線打破物理局限&#xff0c;讓跨品牌設備即…

什么是VR展館?VR展館的實用價值有哪些?

VR展館&#xff0c;重塑展覽體驗。在數字化時代浪潮的推動下&#xff0c;傳統的實體展館經歷前所未有的變革。作為變革的先鋒&#xff0c;VR展館以無限的潛力&#xff0c;成為展覽行業的新寵。 VR展館&#xff0c;即虛擬現實展館&#xff0c;是基于VR&#xff08;Virtual Real…

VLA模型:自動駕駛與機器人行業的革命性躍遷,端到端智能如何重塑未來?

當AI開始操控方向盤和機械臂&#xff0c;人類正在見證一場靜默的產業革命。 2023年7月&#xff0c;谷歌DeepMind拋出一枚技術核彈——全球首個視覺語言動作模型&#xff08;VLA&#xff09;RT-2橫空出世。這個能將“把咖啡遞給穿紅衣服的阿姨”這類自然語言指令直接轉化為機器人…

華為OD機試真題——出租車計費/靠譜的車 (2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

40 歲 Windows 開啟 AI 轉型:從系統到生態的智能重構

在科技快速發展的當下&#xff0c;人工智能成為驅動各領域變革的核心力量&#xff0c;擁有 40 年歷史的 Windows 也開啟了向 AI 的全面轉型。2025 年 5 月 19-22 日西雅圖 Build 2025 開發者大會上&#xff0c;微軟展示了 Windows 11 向 AI 智能體核心平臺轉型的戰略&#xff0…

Python實例題:Python3實現可控制肉雞的反向Shell

目錄 Python實例題 題目 代碼實現 reverse_shell_client.py reverse_shell_server.py 實現原理 反向連接機制&#xff1a; 命令執行與傳輸&#xff1a; 功能特點&#xff1a; 關鍵代碼解析 服務端命令處理 客戶端命令執行 客戶端持久化連接 使用說明 啟動服務端…

AWS EC2 使用Splunk DB connect 連接 RDS mysql

1: 先創建 RDS mysql: 我們選擇free: 選擇free 過后,自動生成single instance, 沒有垮AZ 的db 設置。 選擇密碼登入: 注意:上面設置密碼的時候,特別提示:不能有特殊字符,我就設置了: mypassword 下面可以選擇通過EC2 連接,當然也可以不選:

SAP重塑云ERP應用套件

在2025年Sapphire大會上&#xff0c;SAP正式發布了其云ERP產品的重塑計劃&#xff0c;推出全新“Business Suite”應用套件&#xff0c;并對供應鏈相關應用進行AI增強升級。這一變革旨在簡化新客戶進入SAP生態系統的流程&#xff0c;同時為現有客戶提供更加統一、智能和高效的業…