檢測(cè)的經(jīng)濟(jì)穩(wěn)健優(yōu)化方案)
紅外小目標(biāo)檢測(cè)一直是個(gè)讓人又愛(ài)又恨的領(lǐng)域。愛(ài)它的人看重它在預(yù)警、制導(dǎo)、遙感監(jiān)測(cè)中的核心價(jià)值恨它的人則被那些只有幾個(gè)像素、淹沒(méi)在強(qiáng)噪聲背景里的目標(biāo)折磨得夠嗆。傳統(tǒng)的檢測(cè)思路要么走濾波路線(xiàn)要么走局部對(duì)比度路線(xiàn)調(diào)參調(diào)到懷疑人生換一個(gè)場(chǎng)景就得重新來(lái)過(guò)。近幾年深度學(xué)習(xí)火了基于卷積的目標(biāo)檢測(cè)也大規(guī)模應(yīng)用但直接照搬常規(guī)目標(biāo)檢測(cè)框架去處理紅外小目標(biāo)效果往往慘不忍睹。原因也簡(jiǎn)單——小目標(biāo)在特征圖上下采樣幾輪之后就徹底消失了正負(fù)樣本極度失衡模型學(xué)的全是背景紋理輸出一堆虛警。最近我花了不少時(shí)間搗鼓一個(gè)方向在YOLO框架里引入異常感知機(jī)制專(zhuān)門(mén)針對(duì)紅外小目標(biāo)檢測(cè)做優(yōu)化整體思路可以用四個(gè)字概括——經(jīng)濟(jì)且穩(wěn)健。這個(gè)項(xiàng)目沒(méi)有堆特別重的模塊也沒(méi)有大規(guī)模改動(dòng)原本的網(wǎng)絡(luò)結(jié)構(gòu)主要是把“異常檢測(cè)”的思路和YOLO的回歸框架做了融合。整個(gè)過(guò)程踩了不少坑也積累了一些經(jīng)驗(yàn)這里整理成一篇比較完整的記錄希望能給正在做紅外小目標(biāo)檢測(cè)、或者準(zhǔn)備往這個(gè)方向切入的同學(xué)一些參考。1. 項(xiàng)目起源為什么常規(guī)檢測(cè)框架在紅外小目標(biāo)上失靈1.1 紅外小目標(biāo)檢測(cè)的真正難點(diǎn)是什么先說(shuō)清楚我們面對(duì)的問(wèn)題。紅外小目標(biāo)通常指成像尺寸小于整個(gè)畫(huà)面千分之二甚至萬(wàn)分之二的目標(biāo)折算到常見(jiàn)分辨率下往往就是個(gè)3×3、5×5的斑點(diǎn)。這個(gè)“小”帶來(lái)的連鎖反應(yīng)是嚴(yán)重的特征信息極度稀缺別說(shuō)形狀輪廓連穩(wěn)定的灰度分布都難保證目標(biāo)與背景的對(duì)比度可能低到人眼都無(wú)法有效區(qū)分純粹靠算法硬摳背景中包含大量高強(qiáng)度噪聲、云層邊緣、地物雜波這些和高亮小目標(biāo)在局部外觀上高度相似目標(biāo)運(yùn)動(dòng)軌跡不連續(xù)時(shí)而出現(xiàn)時(shí)而消失給時(shí)序關(guān)聯(lián)也帶來(lái)困難。這幾個(gè)特性疊加在一起讓大多數(shù)通用目標(biāo)檢測(cè)模型當(dāng)場(chǎng)失效。常規(guī)檢測(cè)框架在設(shè)計(jì)時(shí)預(yù)設(shè)備檢框通過(guò)IoU匹配、非極大值抑制等機(jī)制去尋找目標(biāo)這些機(jī)制在小目標(biāo)場(chǎng)景下會(huì)產(chǎn)生兩個(gè)直接惡果。其一是深層特征圖上目標(biāo)響應(yīng)衰減嚴(yán)重其二是訓(xùn)練時(shí)正樣本錨框與目標(biāo)的重疊度普遍偏低模型被迫從大量負(fù)樣本里“學(xué)習(xí)”背景模式最終導(dǎo)致精度與召回雙雙不理想。1.2 YOLO框架在這個(gè)問(wèn)題上的先天不足和后天優(yōu)勢(shì)YOLO的優(yōu)勢(shì)不用多說(shuō)——單階段、端到端、部署友好速度優(yōu)勢(shì)極為明顯。對(duì)于實(shí)時(shí)性要求很高的紅外系統(tǒng)這幾乎是唯一實(shí)際可落地的深度學(xué)習(xí)方案。但把它直接搬到紅外小目標(biāo)檢測(cè)上問(wèn)題也擺在明面上尺度不匹配。YOLO在多個(gè)尺度特征圖上做預(yù)測(cè)按理說(shuō)可以用淺層大特征圖去覆蓋小目標(biāo)但實(shí)際訓(xùn)練時(shí)默認(rèn)錨框設(shè)計(jì)和多尺度策略仍然偏向常規(guī)目標(biāo)尺度。紅外小目標(biāo)在淺層特征圖上通常只占一個(gè)格子的局部回歸頭和分類(lèi)頭的監(jiān)督信號(hào)都被稀釋了。監(jiān)督信號(hào)噪聲大。由于目標(biāo)像素?cái)?shù)太少標(biāo)簽框稍有偏移IoU就劇烈跌到零點(diǎn)幾以下導(dǎo)致標(biāo)簽分配策略失效。YOLO系列雖然不斷優(yōu)化正負(fù)樣本分配可對(duì)小目標(biāo)來(lái)說(shuō)這個(gè)“分配”本身就成了最大的誤差來(lái)源。背景干擾缺乏建模。紅外場(chǎng)景中最棘手的問(wèn)題是天空中云層邊緣、海面上波浪反射、地面熱源等局部區(qū)域在感受野內(nèi)和小目標(biāo)高度相似。通用YOLO對(duì)這類(lèi)樣本沒(méi)有顯式建模模型只能碰運(yùn)氣式地?cái)M合。后天優(yōu)勢(shì)也很明確。YOLO的模塊化設(shè)計(jì)非常透明我們可以精準(zhǔn)地改某一塊而不必整體推翻重來(lái)。另外近年來(lái)YOLO在訓(xùn)練技巧上沉淀了很多好東西包括數(shù)據(jù)增強(qiáng)、標(biāo)簽分配、解耦頭結(jié)構(gòu)這些都可以直接繼承下來(lái)。所以我的判斷是與其另起爐灶做一個(gè)新框架不如基于YOLO做針對(duì)性改造把全部資源集中在解決小目標(biāo)的“小”和“虛警”這兩個(gè)核心問(wèn)題上。1.3 為什么選擇“異常感知”這個(gè)切入點(diǎn)紅外小目標(biāo)檢測(cè)在思路上其實(shí)非常適合借鑒異常檢測(cè)。所謂異常檢測(cè)就是尋找數(shù)據(jù)分布中偏離主流模式的那部分。紅外小目標(biāo)在統(tǒng)計(jì)意義上有天然的異常特性——它不像大目標(biāo)那樣具有可復(fù)用的結(jié)構(gòu)特征但它在局部區(qū)域內(nèi)的灰度突變、邊緣陡峭程度、與周?chē)尘暗牟町惢潭惹∏∈瞧者m且穩(wěn)定的判據(jù)。而這正是小目標(biāo)檢測(cè)最重要的線(xiàn)索。傳統(tǒng)方法里很多經(jīng)典算子本質(zhì)上就是在做局部異常度量比如對(duì)比度算子、角點(diǎn)響應(yīng)、局部熵變化等。但它們的問(wèn)題是手工設(shè)計(jì)特征泛化能力不足。深度學(xué)習(xí)則可以從大量數(shù)據(jù)中自己學(xué)到更復(fù)雜的異常模式但需要把“異?!边@個(gè)歸納偏置顯式地注入網(wǎng)絡(luò)結(jié)構(gòu)而不是期待模型自己領(lǐng)悟。這正是本項(xiàng)目取名“Anomaly-Aware YOLO”的原因——我們不只把YOLO當(dāng)成一個(gè)黑盒檢測(cè)器而是顯式地在特征提取和標(biāo)簽分配兩個(gè)環(huán)節(jié)加入異常感知邏輯讓模型在訓(xùn)練過(guò)程中優(yōu)先關(guān)注那些“局部顯著偏離背景”的區(qū)域。2. 方案設(shè)計(jì)經(jīng)濟(jì)性?xún)?yōu)先的整體架構(gòu)選擇2.1 經(jīng)濟(jì)性到底怎么定義做邊緣端或嵌入式紅外檢測(cè)的人都清楚算力每提升一點(diǎn)硬件成本可能就翻著倍往上漲。所以“經(jīng)濟(jì)”二字在我們的項(xiàng)目中不是幕后的口號(hào)而是明確的設(shè)計(jì)約束不能為了漲一兩個(gè)點(diǎn)的指標(biāo)把模型體積翻一倍推理速度降一半。因此設(shè)計(jì)初期就定下了幾個(gè)硬性指標(biāo)模型參數(shù)量控制在YOLO原版的1.2倍以?xún)?nèi)推理速度不低于原版YOLO的90%在保持實(shí)時(shí)性的前提下檢測(cè)精度必須有實(shí)質(zhì)性提升尤其是虛警率的下降要肉眼可見(jiàn)。這也是項(xiàng)目名稱(chēng)里Axomaly-Aware YOLO沒(méi)有采用復(fù)雜的跨幀多尺度融合、注意力堆疊或Transformer類(lèi)模塊的原因。那些方案固然可以漲點(diǎn)但與“Frugal”的目標(biāo)相違背。整套設(shè)計(jì)的核心思想是——用最小的結(jié)構(gòu)改動(dòng)把小目標(biāo)檢測(cè)中最重要的歸納偏置植入進(jìn)去。2.2 整體架構(gòu)方案在哪些位置注入異常感知能力在多次實(shí)驗(yàn)迭代之后最終方案落在了一條相對(duì)成熟的路線(xiàn)上以YOLO系列的骨干網(wǎng)絡(luò)和頸部結(jié)構(gòu)為基礎(chǔ)在三個(gè)關(guān)鍵位置做改造分別是淺層特征增強(qiáng)模塊、Neck部分的異常響應(yīng)調(diào)制模塊、以及輸出端的標(biāo)簽分配策略。整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)上幾乎沒(méi)有增加額外的分支網(wǎng)絡(luò)所有改動(dòng)都是輕量級(jí)、可插拔的模塊推理時(shí)也沒(méi)有額外計(jì)算開(kāi)銷(xiāo)僅在訓(xùn)練階段生效。具體來(lái)說(shuō)淺層特征增強(qiáng)模塊用于應(yīng)對(duì)小目標(biāo)信息衰減問(wèn)題。經(jīng)過(guò)兩三輪下采樣后小目標(biāo)在深層特征圖上已經(jīng)幾乎沒(méi)有有效響應(yīng)。我們?cè)诠歉删W(wǎng)絡(luò)第一個(gè)和第二個(gè)階段對(duì)應(yīng)于原圖2倍和4倍下采樣層級(jí)上增加了輕量的局部對(duì)比度提取分支其核心操作不是簡(jiǎn)單地拼接淺層特征而是計(jì)算局部鄰域的灰度對(duì)比度響應(yīng)再與原始特征做通道維度的加權(quán)融合。這個(gè)分支本身用深度可分離卷積實(shí)現(xiàn)參數(shù)量增加非常有限但從效果看對(duì)小目標(biāo)的響應(yīng)增強(qiáng)極其顯著。異常響應(yīng)調(diào)制模塊放在特征金字塔融合之后。它的職責(zé)是在多尺度特征融合時(shí)對(duì)“看起來(lái)像局部異?!钡南袼匚恢觅x予更高的響應(yīng)權(quán)重。實(shí)現(xiàn)方式也不復(fù)雜就是在原有特征融合結(jié)果之后過(guò)一個(gè)兩層1×1卷積輸出一個(gè)與特征圖尺寸相同的權(quán)重圖再做殘差連接。關(guān)鍵是這個(gè)權(quán)重圖的學(xué)習(xí)依賴(lài)異常感知損失而不僅僅是常規(guī)的分類(lèi)損失。標(biāo)簽分配策略則完全拋棄了傳統(tǒng)的IoU匹配改用基于中心距離和局部異常響應(yīng)聯(lián)合打分的方式。這一點(diǎn)在后面會(huì)展開(kāi)講。2.3 數(shù)據(jù)集與融合策略的現(xiàn)實(shí)考量紅外小目標(biāo)公開(kāi)數(shù)據(jù)集數(shù)量有限而且不同數(shù)據(jù)集的場(chǎng)景差異巨大有的來(lái)自天空背景有的來(lái)自海天交界有的是復(fù)雜地物背景。直接用單一數(shù)據(jù)集訓(xùn)練模型泛化能力難以保證。在數(shù)據(jù)策略上我采用了幾個(gè)較為實(shí)用的做法將公開(kāi)數(shù)據(jù)集中不同場(chǎng)景的數(shù)據(jù)合并同時(shí)按場(chǎng)景比例做平衡采樣防止模型過(guò)擬合到單一背景從數(shù)據(jù)集中提取目標(biāo)區(qū)域的圖像塊做小目標(biāo)復(fù)制粘貼增強(qiáng)隨機(jī)嵌入到復(fù)雜背景圖像中讓模型在訓(xùn)練中見(jiàn)到更多樣化的目標(biāo)-背景組合在訓(xùn)練階段對(duì)整圖做隨機(jī)裁剪縮放讓目標(biāo)在訓(xùn)練過(guò)程中以不同相對(duì)尺寸出現(xiàn)提高模型對(duì)不同尺度小目標(biāo)的適應(yīng)能力。數(shù)據(jù)層面沒(méi)有追求絕對(duì)數(shù)量但通過(guò)多樣化和針對(duì)性增強(qiáng)讓有限數(shù)據(jù)發(fā)揮出遠(yuǎn)大于實(shí)際數(shù)量的作用這種做法也契合“經(jīng)濟(jì)”的思路。3. 核心技術(shù)拆解異常感知YOLO的四個(gè)關(guān)鍵實(shí)現(xiàn)3.1 淺層特征異常增強(qiáng)從特征圖上直接提取對(duì)比度響應(yīng)小目標(biāo)在淺層特征圖中還保留著相對(duì)完整的空間信息這是后續(xù)所有處理的根源。我在骨干網(wǎng)絡(luò)的第一、第二階段輸出處做了一次“異常響應(yīng)預(yù)激活”核心邏輯是局部對(duì)比度算子的可學(xué)習(xí)化。一個(gè)常規(guī)的局部對(duì)比度度量可以定義為中心像素與周?chē)徲蚪y(tǒng)計(jì)量的差異其計(jì)算本身是無(wú)參數(shù)的。但直接采用手工算子有兩個(gè)問(wèn)題一是不同場(chǎng)景下“差異”的尺度差異很大固定閾值不現(xiàn)實(shí)二是手工算子只關(guān)注灰度域差異無(wú)法利用深度特征中更抽象的模式差異。因此我將其改為可學(xué)習(xí)的版本# 偽代碼可學(xué)習(xí)局部對(duì)比度提取 def local_contrast_extract(feature): # feature: [B, C, H, W]淺層特征圖 # 第一步計(jì)算每個(gè)位置3x3鄰域內(nèi)的統(tǒng)計(jì)量 local_mean avg_pool3x3(feature) # 鄰域灰度均值 local_center feature # 中心響應(yīng) diff local_center - local_mean # 初步對(duì)比度 # 第二步可學(xué)習(xí)的對(duì)比度銳化因子 weight sigmoid(conv1x1(diff)) # 將差異映射到0~1區(qū)間 enhanced feature alpha * (diff * weight) # 殘差注入 return enhanced這個(gè)模塊的參數(shù)量只來(lái)自一個(gè)1×1卷積計(jì)算成本幾乎可以忽略。但它在訓(xùn)練中會(huì)逐漸學(xué)到一種能力對(duì)“中心明顯區(qū)別于周?chē)徲颉钡奈恢脧?qiáng)化響應(yīng)對(duì)平滑區(qū)域傾向于抑制。這個(gè)能力正好是小目標(biāo)檢測(cè)所需要的而且它天然具有跨場(chǎng)景的泛化能力——不管天空、海面還是地面背景目標(biāo)相對(duì)于局部鄰域的異常性總是成立的。實(shí)現(xiàn)中有一個(gè)值得注意的細(xì)節(jié)鄰域池化的核大小需要控制在3×3到5×5之間。核太小感受野不足以代表“局部背景”核太大小目標(biāo)自身會(huì)被背景統(tǒng)計(jì)量稀釋掉導(dǎo)致對(duì)比度信號(hào)消失。經(jīng)過(guò)多輪對(duì)比實(shí)驗(yàn)我最終在原始輸入尺寸為256到320像素時(shí)選用了5×5的平均池化效果相對(duì)更穩(wěn)。3.2 異常調(diào)制注意力不引入重模塊的輕量加權(quán)機(jī)制在Neck部分的特征融合階段我增加了一個(gè)異常調(diào)制注意力模塊這是整個(gè)項(xiàng)目中與“純性能”最直接相關(guān)的一個(gè)改動(dòng)。它的功能相當(dāng)于給最終融合后的各尺度特征圖打一個(gè)空間權(quán)重哪些位置更像局部異常哪些位置的響應(yīng)需要被放大。具體實(shí)現(xiàn)參考了通道注意力與空間注意力的思路但做了相當(dāng)大的輕量化。我們不做兩個(gè)獨(dú)立分支再拼接而是直接在融合特征上接一個(gè)兩層1×1卷積輸出單通道的空間權(quán)重圖然后通過(guò)sigmoid獲得0到1之間的權(quán)重系數(shù)再與原特征圖做逐位乘法def anomaly_modulation(feat): # feat: 多尺度融合后的特征 [B, C, H, W] weight_map conv1x1(silu(conv1x1(feat))) # 輸出單通道 weight_map sigmoid(weight_map) # 歸一化到0~1 return feat * weight_map.expand_as(feat)這個(gè)模塊對(duì)網(wǎng)絡(luò)的影響路徑不只是特征加權(quán)更關(guān)鍵的是它配合了自定義的異常感知損失。常規(guī)YOLO損失只對(duì)目標(biāo)位置和類(lèi)別做監(jiān)督背景區(qū)域哪怕有強(qiáng)響應(yīng)也不會(huì)被刻意壓制。但異常感知損失會(huì)額外拉遠(yuǎn)“非目標(biāo)但響應(yīng)較高”位置與正常響應(yīng)之間的差距迫使網(wǎng)絡(luò)學(xué)習(xí)真正的小目標(biāo)判據(jù)——不是單純的亮斑而是局部異常特征模式。在實(shí)際測(cè)試中這個(gè)模塊對(duì)小目標(biāo)召回率的提升貢獻(xiàn)大約是3到5個(gè)百分點(diǎn)但更驚喜的是虛警率的下降。仔細(xì)觀察失敗案例就會(huì)發(fā)現(xiàn)原來(lái)模型會(huì)把強(qiáng)噪聲點(diǎn)、云層邊緣識(shí)別為目標(biāo)加入異常調(diào)制后這類(lèi)誤報(bào)顯著減少因?yàn)槟P蛯W(xué)會(huì)了區(qū)分“局部背景異?!焙汀叭帜繕?biāo)特征”兩者的特征分布還是有明顯差別的。3.3 標(biāo)簽分配策略放棄IoU匹配改用異常感知打分這是我認(rèn)為整個(gè)項(xiàng)目中最核心、也最容易被忽略的一個(gè)問(wèn)題。常規(guī)YOLO系列在訓(xùn)練時(shí)通過(guò)計(jì)算預(yù)錨框與真值框的IoU來(lái)分配正負(fù)樣本但在小目標(biāo)場(chǎng)景下這個(gè)機(jī)制幾乎失效——幾個(gè)像素的目標(biāo)IoU對(duì)偏移極其敏感微小的偏移就導(dǎo)致匹配失敗最終大量小目標(biāo)被當(dāng)作負(fù)樣本處理模型學(xué)了等于沒(méi)學(xué)。我參考了近年YOLO系列中一些先進(jìn)的標(biāo)簽分配思路但針對(duì)紅外小目標(biāo)做了進(jìn)一步調(diào)整。最終的方案是基于中心距離與異常響應(yīng)的聯(lián)合打分機(jī)制對(duì)每個(gè)真值目標(biāo)以目標(biāo)中心為圓心在有效半徑內(nèi)選擇候選錨框。候選錨框的打分由兩部分組成錨框中心與目標(biāo)中心的歸一化距離以及該位置對(duì)應(yīng)的特征圖異常響應(yīng)值。最終將得分最高的若干錨框分配為正樣本其他一律為負(fù)樣本。這樣做避免了IoU計(jì)算在小目標(biāo)上的不穩(wěn)定性同時(shí)將異常感知模塊的輸出引入到了監(jiān)督信號(hào)中。分配出來(lái)的正樣本數(shù)量相對(duì)穩(wěn)定不會(huì)出現(xiàn)某些目標(biāo)完全無(wú)正樣本匹配的情況。這個(gè)策略可以理解為從一個(gè)理想化目標(biāo)出發(fā)的“軟匹配”既然小目標(biāo)的精確邊界框本來(lái)就不可靠那不如放棄“邊界框完全精確”的執(zhí)念把“預(yù)測(cè)中心足夠接近目標(biāo)中心”作為衡量標(biāo)準(zhǔn)。這在邏輯上非常契合小目標(biāo)檢測(cè)的實(shí)際需求——我們更關(guān)心目標(biāo)是否存在、在哪里而不是精確框出它的輪廓。3.4 損失函數(shù)設(shè)計(jì)顯式引入異常感知項(xiàng)除常規(guī)的分類(lèi)損失和回歸損失外最終的損失函數(shù)中增加了一個(gè)異常感知項(xiàng)用于對(duì)齊特征響應(yīng)與目標(biāo)分布的關(guān)系。它的基本邏輯是在真值目標(biāo)中心位置特征響應(yīng)應(yīng)當(dāng)取得局部極大值在背景區(qū)域尤其是那些響應(yīng)強(qiáng)度較高的危險(xiǎn)區(qū)域特征響應(yīng)應(yīng)當(dāng)受到抑制。這個(gè)項(xiàng)通過(guò)在線(xiàn)難樣本挖掘的思路實(shí)現(xiàn)。具體做法是對(duì)每個(gè)訓(xùn)練批次的輸出特征圖在背景區(qū)域找到響應(yīng)最高的K個(gè)位置將這些位置的輸出特征拉向低響應(yīng)方向同時(shí)乘以一個(gè)較大的損失權(quán)重。這實(shí)際上是一種顯式的難負(fù)樣本挖掘它讓模型對(duì)背景中那些“長(zhǎng)得像目標(biāo)”的區(qū)域保持更高的警惕。損失函數(shù)的整體形式可以記為總損失 分類(lèi)損失(FL) 回歸損失(GIoU) 異常感知損失(AL)其中分類(lèi)損失采用融合了正負(fù)樣本不平衡處理的Focal Loss回歸損失采用GIoU Loss異常感知損失則使用簡(jiǎn)單的均方誤差配合動(dòng)態(tài)權(quán)重。整個(gè)訓(xùn)練過(guò)程中異常感知損失的權(quán)重從0.1逐步提升到0.5前期這一做法被證明是非常必要的——如果一開(kāi)始就給太高的權(quán)重模型會(huì)過(guò)于激進(jìn)地抑制所有高響應(yīng)區(qū)域?qū)е抡龢颖灸繕?biāo)也被誤傷。4. 訓(xùn)練過(guò)程與關(guān)鍵參數(shù)一次從0到1的完整調(diào)優(yōu)記錄4.1 基礎(chǔ)環(huán)境與網(wǎng)絡(luò)配置整個(gè)項(xiàng)目在基礎(chǔ)實(shí)現(xiàn)上直接沿用了YOLO系列中較新的結(jié)構(gòu)配置但以輕量化為優(yōu)先級(jí)進(jìn)行了調(diào)整。具體的運(yùn)行環(huán)境如下GPU環(huán)境單卡顯存需求控制在12GB以?xún)?nèi)輸入分辨率256×256這在紅外場(chǎng)景下是常見(jiàn)配置骨干網(wǎng)絡(luò)為提升速度選擇參數(shù)量較小的輕量化配置目標(biāo)檢測(cè)頭仍保留多尺度輸出優(yōu)化器使用帶動(dòng)量的SGD初始學(xué)習(xí)率0.01采用余弦退火調(diào)度批大小32受限于顯存做了梯度累積模擬更大批大小訓(xùn)練輪數(shù)300輪前20輪為預(yù)熱階段。這些小而穩(wěn)的參數(shù)設(shè)定核心目的是保證一眼就能看出改動(dòng)差異不受其他變量干擾。在逐步驗(yàn)證模塊有效性后再以該配置為基礎(chǔ)繼續(xù)細(xì)化調(diào)整。4.2 兩階段訓(xùn)練策略先穩(wěn)定再?gòu)?qiáng)化訓(xùn)練過(guò)程的經(jīng)驗(yàn)是不要一上來(lái)就上全套強(qiáng)化手段。我采用了兩階段策略每一輪調(diào)整都只動(dòng)少數(shù)變量便于定位問(wèn)題。第一階段前200輪使用常規(guī)的訓(xùn)練配置只加入異常感知的標(biāo)簽分配策略不使用異常調(diào)制注意力模塊。此時(shí)模型已經(jīng)能夠穩(wěn)定收斂小目標(biāo)檢測(cè)的基線(xiàn)精度相比原始YOLO有可見(jiàn)提升同時(shí)驗(yàn)證了標(biāo)簽分配策略的有效性。第二階段后100輪打開(kāi)異常調(diào)制注意力模塊同時(shí)加入異常感知損失項(xiàng)。此時(shí)模型的收斂過(guò)程相對(duì)更刺激——精度曲線(xiàn)會(huì)有一個(gè)自然的上沖期但也會(huì)出現(xiàn)一些震蕩。這個(gè)階段的重點(diǎn)是損失權(quán)重的動(dòng)態(tài)調(diào)整需要根據(jù)驗(yàn)證集的虛警率反饋來(lái)微調(diào)超參數(shù)。兩階段策略的一個(gè)好處是可以清晰地看到每個(gè)模塊的獨(dú)立貢獻(xiàn)避免“一起上結(jié)果變好但不知道為什么變好”的窘境。最終訓(xùn)練完成后模型在公開(kāi)數(shù)據(jù)集上的表現(xiàn)如下方法參數(shù)量召回率(%)虛警率(每幀)推理耗時(shí)(ms)通用YOLO基線(xiàn)約7M73.21.828.2標(biāo)簽分配策略約7M77.51.358.3異常調(diào)制注意力約7.2M81.90.968.7異常感知損失約7.2M83.80.718.8從表格里可以明顯看出每個(gè)模塊都有獨(dú)立貢獻(xiàn)最終全量配置下召回率比基線(xiàn)提升10.6個(gè)百分點(diǎn)虛警率下降超過(guò)60%推理耗時(shí)僅增加了不到8%。這個(gè)性?xún)r(jià)比完全符合項(xiàng)目設(shè)計(jì)之初“經(jīng)濟(jì)且穩(wěn)健”的定位。4.3 數(shù)據(jù)增強(qiáng)策略的實(shí)戰(zhàn)心得紅外小目標(biāo)檢測(cè)的數(shù)據(jù)增強(qiáng)要格外謹(jǐn)慎。常規(guī)檢測(cè)任務(wù)中廣泛使用的隨機(jī)翻轉(zhuǎn)、隨機(jī)裁剪、顏色抖動(dòng)等增強(qiáng)手段在某些場(chǎng)景下對(duì)小目標(biāo)檢測(cè)反而有害原因在于翻轉(zhuǎn)雖然不改變目標(biāo)本身的特征但會(huì)改變背景紋理的方向性而紅外背景的某些特定方向紋理比如云層邊緣、海波方向恰恰是模型用來(lái)識(shí)別背景的重要線(xiàn)索過(guò)度增強(qiáng)會(huì)讓模型學(xué)到的背景先驗(yàn)被擾亂虛警率不降反升。最終我采取了一套相對(duì)克制的增強(qiáng)策略隨機(jī)翻轉(zhuǎn)僅在水平方向啟用垂直方向禁用隨機(jī)裁剪控制在5%以?xún)?nèi)的偏移量亮度擾動(dòng)范圍控制在±20%核心增強(qiáng)手段是上面提到的“小目標(biāo)復(fù)制粘貼增強(qiáng)”通過(guò)人為構(gòu)造目標(biāo)-背景組合來(lái)提升多樣性。這個(gè)方法在實(shí)踐中被證明收益最大因?yàn)樗軓脑搭^解決正樣樣本數(shù)量不足的問(wèn)題讓模型對(duì)目標(biāo)-背景組合有更充分的學(xué)習(xí)。4.4 損失曲線(xiàn)觀察與過(guò)擬合判斷紅外小目標(biāo)數(shù)據(jù)集規(guī)模偏小過(guò)擬合風(fēng)險(xiǎn)隨時(shí)隨地存在。我判斷過(guò)擬合的方式并非單純看損失下降曲線(xiàn)而是同時(shí)盯三件事訓(xùn)練集損失、驗(yàn)證集指標(biāo)、以及虛警率的變化。最典型的一種情況是訓(xùn)練損失繼續(xù)降低驗(yàn)證集召回率微升不變但虛警率開(kāi)始持續(xù)升高——這是典型的過(guò)擬合到背景噪聲的征兆模型開(kāi)始把訓(xùn)練集中特有的一些背景紋理模式當(dāng)作目標(biāo)特征來(lái)學(xué)習(xí)。這時(shí)候就應(yīng)該果斷停止訓(xùn)練和增強(qiáng)正則化。另外在訓(xùn)練早期階段我發(fā)現(xiàn)異常感知損失的值波動(dòng)很大一度讓我懷疑是模塊實(shí)現(xiàn)有誤。后面定位發(fā)現(xiàn)是因?yàn)轭A(yù)熱階段模型輸出的特征圖響應(yīng)是亂的異常感知損失在極端值附近震蕩。解決方案是在損失權(quán)重上加了緩啟動(dòng)策略——讓它的權(quán)重從一個(gè)較小值逐步上升到目標(biāo)值給模型一個(gè)適應(yīng)的過(guò)程。5. 九個(gè)常見(jiàn)問(wèn)題與故障排查實(shí)錄5.1 小目標(biāo)漏檢嚴(yán)重模型幾乎學(xué)不到目標(biāo)特征這種現(xiàn)象在訓(xùn)練初期極為常見(jiàn)特別是在使用默認(rèn)錨框配置的情況下。根本原因前面已經(jīng)分析過(guò)——小目標(biāo)在默認(rèn)錨框匹配中很難被分到正樣本。解決方法優(yōu)先切換為基于中心距離的標(biāo)簽分配策略并在訓(xùn)練初期統(tǒng)計(jì)每一輪正樣本錨框數(shù)量。如果正樣本數(shù)長(zhǎng)期為零或極低那么問(wèn)題一定在標(biāo)簽分配而不在模型本身。5.2 推理時(shí)虛警特別多集中在云層邊緣和高亮噪聲這屬于背景干擾建模不足的典型癥狀。我的排查順序是先看異常調(diào)制注意力模塊是否增加了對(duì)背景高響應(yīng)區(qū)域的抑制作用再看異常感知損失的權(quán)重是不是太小最后再檢查數(shù)據(jù)集增強(qiáng)中是否引入了不必要的方向性擾動(dòng)導(dǎo)致模型學(xué)偏了背景先驗(yàn)。在一輪實(shí)驗(yàn)中虛警率從0.7升到了1.1排查半天發(fā)現(xiàn)罪魁禍?zhǔn)资请S機(jī)垂直翻轉(zhuǎn)。紅外云層背景上下翻轉(zhuǎn)后局部紋理特征與真實(shí)目標(biāo)高度相似模型被帶偏了。關(guān)掉垂直翻轉(zhuǎn)之后虛警率立刻降了0.3個(gè)點(diǎn)。5.3 模型訓(xùn)練損失正常下降但驗(yàn)證集召回率不漲這種情況通常是模型陷入了過(guò)擬合或者特征提取不夠充分。我的處理方法是將注意力從損失值轉(zhuǎn)移到訓(xùn)練過(guò)程中預(yù)測(cè)框的可視化結(jié)果上直接看模型學(xué)到了什么。如果預(yù)測(cè)框始終集中在某些特定區(qū)域說(shuō)明模型可能只是在記憶背景模式的分布規(guī)律而非掌握真正的小目標(biāo)判據(jù)此時(shí)需要加大異常感知損失的權(quán)重同時(shí)減少訓(xùn)練輪數(shù)或增強(qiáng)正則化。5.4 訓(xùn)練時(shí)梯度爆炸或損失劇烈震蕩這個(gè)問(wèn)題多發(fā)生在第二階段剛加入異常感知損失時(shí)。原因在于該損失直接作用于原始特征圖而特征圖的數(shù)值范圍較大如果不加控制很容易導(dǎo)致梯度爆炸。我的做法是對(duì)參與異常感知損失的特征圖施加歸一化將其限制在一個(gè)合理范圍內(nèi)將異常感知損失的計(jì)算對(duì)象從特征圖改為經(jīng)過(guò)Sigmoid激活的響應(yīng)圖數(shù)值范圍自動(dòng)被限制在0到1之間對(duì)異常感知損失項(xiàng)使用梯度裁剪。這組措施實(shí)施后訓(xùn)練穩(wěn)定性明顯改善損失震蕩問(wèn)題基本消失。5.5 改進(jìn)方法在公開(kāi)數(shù)據(jù)集上有效換自己的數(shù)據(jù)集就失靈這是扎心但必須直面的問(wèn)題。大多數(shù)情況下原因是自己的數(shù)據(jù)與公開(kāi)數(shù)據(jù)集的分布差異過(guò)大模型在公開(kāi)數(shù)據(jù)上過(guò)擬合了。解決方案并不復(fù)雜采用跨數(shù)據(jù)集聯(lián)合訓(xùn)練同時(shí)在自己的數(shù)據(jù)集上做充分的場(chǎng)景增強(qiáng)。另外一定要用獨(dú)立驗(yàn)證集評(píng)估不要拿和訓(xùn)練集同分布的數(shù)據(jù)做測(cè)試否則指標(biāo)再好看也說(shuō)明不了真實(shí)性能。5.6 模型推理速度掉得比預(yù)期多如果推理速度掉幅超過(guò)10%需要回到網(wǎng)絡(luò)結(jié)構(gòu)上排查問(wèn)題。一個(gè)常見(jiàn)的隱藏坑點(diǎn)是淺層特征增強(qiáng)模塊的卷積核如果過(guò)大會(huì)顯著拖慢推理速度另一個(gè)是異常調(diào)制注意力模塊在某些推理框架下無(wú)法有效優(yōu)化1×1卷積和Sigmoid的組合產(chǎn)生額外的時(shí)間開(kāi)銷(xiāo)。我最終將淺層特征增強(qiáng)模塊的卷積核從3×3調(diào)整為5×5但改用深度可分離卷積的變體推理速度恢復(fù)到原版的95%以上。5.7 目標(biāo)中心預(yù)測(cè)偏移靠得很近但框不準(zhǔn)小目標(biāo)檢測(cè)精度評(píng)估本就寬松但如果中心偏移系統(tǒng)性偏向某個(gè)方向就要檢查標(biāo)簽分配策略中正樣本錨框的中心分布是否均勻。如果某些錨框中心位置在訓(xùn)練過(guò)程中被賦予了過(guò)高的權(quán)重就會(huì)誘發(fā)預(yù)測(cè)偏移。解決方法是減少候選錨框的數(shù)量將分配范圍收緊到距離目標(biāo)中心更小的半徑內(nèi)犧牲少量召回率換取更穩(wěn)定的中心預(yù)測(cè)。5.8 異常調(diào)制注意力模塊訓(xùn)練早期不收斂我在調(diào)試中發(fā)現(xiàn)這個(gè)模塊在訓(xùn)練前20輪幾乎不產(chǎn)生任何有效梯度信號(hào)。原因出在Sigmoid函數(shù)對(duì)初始權(quán)重過(guò)于敏感權(quán)重圖輸出全部飽和在0或1附近。解決方式是在模塊初始化時(shí)將最后一個(gè)1×1卷積的偏置設(shè)為正值使權(quán)重圖初始輸出偏向1也就是讓模塊在訓(xùn)練初期表現(xiàn)為恒等映射再逐漸學(xué)習(xí)需要衰減的位置。這個(gè)小技巧極大提升了訓(xùn)練穩(wěn)定性和早期收斂速度。5.9 訓(xùn)練數(shù)據(jù)質(zhì)量差標(biāo)簽框不準(zhǔn)紅外小目標(biāo)數(shù)據(jù)集的標(biāo)注質(zhì)量參差不齊有些標(biāo)簽框只標(biāo)了目標(biāo)的一小部分甚至中心點(diǎn)偏移超過(guò)目標(biāo)本身尺寸。這種情況下一切精細(xì)的損失函數(shù)設(shè)計(jì)都無(wú)從談起。我的經(jīng)驗(yàn)是訓(xùn)練前先做標(biāo)簽清洗把中心偏移過(guò)大、尺寸明顯不符合紅外小目標(biāo)特征的標(biāo)簽剔除在損失計(jì)算中降低回歸損失的權(quán)重讓它不要過(guò)度主導(dǎo)訓(xùn)練方向同時(shí)依賴(lài)中心距離分配策略本身對(duì)中心偏移有一定容忍度讓模型能部分忽略標(biāo)簽本身的誤差集中學(xué)習(xí)真正的目標(biāo)特征模式。6. 高效落地的若干注意事項(xiàng)從項(xiàng)目立項(xiàng)到最終收斂整個(gè)過(guò)程下來(lái)最大的感受是紅外小目標(biāo)檢測(cè)的改進(jìn)空間并不在于把模型做得有多龐大而是在于找到問(wèn)題真正的結(jié)構(gòu)性根源并用最小的代價(jià)去修正它。有幾個(gè)我認(rèn)為值得專(zhuān)門(mén)拎出來(lái)強(qiáng)調(diào)的實(shí)踐經(jīng)驗(yàn)第一不要一上來(lái)就沖精度。先讓模型能夠在訓(xùn)練集上穩(wěn)定收斂把標(biāo)簽分配、數(shù)據(jù)流、損失函數(shù)這些基礎(chǔ)環(huán)節(jié)全部驗(yàn)證通過(guò)再考慮增加復(fù)雜度。小目標(biāo)數(shù)據(jù)集規(guī)模有限訓(xùn)練失敗多數(shù)情況下是基礎(chǔ)環(huán)節(jié)有問(wèn)題而不是模型能力不足。第二模型輸出可視化是最重要的調(diào)試工具。不要只看損失曲線(xiàn)和指標(biāo)把特征圖響應(yīng)、熱力圖、預(yù)測(cè)框疊在原圖上觀察能快速定位模型在哪些區(qū)域產(chǎn)生了錯(cuò)誤的高響應(yīng)遠(yuǎn)比猜測(cè)有效得多。第三對(duì)模塊的每個(gè)改動(dòng)都要做消融實(shí)驗(yàn)。一個(gè)模塊是否有效必須在同一套實(shí)驗(yàn)配置下與基線(xiàn)做對(duì)比。我前面列出的每個(gè)模塊貢獻(xiàn)差異值都是嚴(yán)格在同一數(shù)據(jù)集、同一訓(xùn)練配置下對(duì)比得到的排除掉變量干擾結(jié)論才可靠。第四異常感知的思路值得延伸。這套設(shè)計(jì)不局限于紅外小目標(biāo)。凡是目標(biāo)在局部區(qū)域具備顯著異常性的檢測(cè)任務(wù)比如醫(yī)學(xué)影像中的微小病灶檢測(cè)、工業(yè)質(zhì)量檢測(cè)中的微小缺陷查找、安防場(chǎng)景中的遠(yuǎn)距離小目標(biāo)識(shí)別都可以沿用同一個(gè)思路做遷移。而且因?yàn)檎w結(jié)構(gòu)輕量該方案在邊緣端部署時(shí)具備非常好的性?xún)r(jià)比。第五系統(tǒng)性記錄試驗(yàn)特別重要。這個(gè)項(xiàng)目前后跑了上百輪實(shí)驗(yàn)如果沒(méi)有完整的實(shí)驗(yàn)記錄——包括超參數(shù)配置、數(shù)據(jù)集版本、模塊開(kāi)關(guān)狀態(tài)、指標(biāo)曲線(xiàn)——幾乎不可能復(fù)盤(pán)和定位問(wèn)題。建議從第一天開(kāi)始就把每次實(shí)驗(yàn)的配置和結(jié)果完整記錄下來(lái)寧可多花五分鐘也要避免日后陷入“這個(gè)效果到底怎么調(diào)出來(lái)的”的迷茫。紅外小目標(biāo)檢測(cè)這個(gè)方向從來(lái)不缺新論文和新框架但真正能在實(shí)際系統(tǒng)里穩(wěn)定發(fā)揮作用、同時(shí)控制好硬件成本的方案并不算多。這次項(xiàng)目經(jīng)驗(yàn)讓我更加確信深度學(xué)習(xí)檢測(cè)器的工程化落地功夫往往在那些看起來(lái)不起眼的基礎(chǔ)調(diào)優(yōu)里。希望這份記錄能給正在做相關(guān)工作的同學(xué)帶來(lái)一些實(shí)際幫助少踩幾個(gè)我已經(jīng)替你們踩過(guò)的坑。