稀疏訓(xùn)練的Slimming剪枝方法即插即用實(shí)現(xiàn)與模型壓縮)
050、YOLOv11輕量化稀疏——BN層γ系數(shù)稀疏訓(xùn)練的Slimming剪枝方法即插即用實(shí)現(xiàn)與模型壓縮一個(gè)讓我失眠的部署問題去年有個(gè)項(xiàng)目,客戶要求目標(biāo)檢測模型在Jetson Nano上跑到30FPS。YOLOv11n跑起來勉強(qiáng)25FPS,差那么一口氣。試了TensorRT、INT8量化,精度掉得我頭皮發(fā)麻。后來翻到一篇2017年的老文章——Network Slimming,思路簡單粗暴:對BN層的γ系數(shù)加L1正則,訓(xùn)練完把γ接近0的通道直接砍掉。試了一把,模型體積砍了40%,推理速度提升35%,精度只掉了0.3個(gè)點(diǎn)。那晚睡得特別香。BN層γ系數(shù)到底在干什么Batch Normalization的公式大家都會背:y = γ * (x - μ)/σ + β。γ和β是可學(xué)習(xí)參數(shù),每個(gè)通道對應(yīng)一個(gè)γ。γ的大小直接反映了這個(gè)通道對輸出的貢獻(xiàn)程度——γ接近0的通道,輸出基本就是β,相當(dāng)于這個(gè)通道在“摸魚”。Slimming的核心思想:訓(xùn)練時(shí)對γ施加L1稀疏約束,讓不重要的通道γ自動趨近于0。剪枝時(shí)設(shè)定一個(gè)閾值,把γ小于閾值的通道連同對應(yīng)的卷積核一起干掉。模型變小了,但結(jié)構(gòu)還是完整的,不需要特殊硬件支持。代碼實(shí)現(xiàn):從訓(xùn)練到剪枝的完整鏈路第一步:在YOLOv11中注入稀疏訓(xùn)練YOLOv11的BN層藏在Conv模塊里。我們需要在訓(xùn)練時(shí)對γ系數(shù)施加額外的L1懲罰。這里踩過坑——不能直接改BN層的forward,那樣會