????????在惡劣天氣(如雨、雪、霧)下的圖像恢復任務中,傳統 Transformer 模型為降低計算量,常將自注意力限制在固定空間范圍或僅在通道維度操作,導致難以捕捉長距離空間特征,尤其無法有效處理天氣退化像素(如雪花、雨滴)與清晰背景像素的差異。為解決這一局限,研究者提出了 Histogram Transformer Block(HTB),作為 Histoformer 的核心組件,旨在通過動態范圍的特征處理機制,實現對長距離相似退化特征的精準捕捉,同時兼顧局部與全局特征融合,提升惡劣天氣下圖像恢復的效率與精度。
1.HTB?原理
????????HTB 的核心原理是通過動態范圍特征分組與針對性注意力機制,突破傳統卷積和自注意力的局限:
????????動態范圍直方圖自注意力(DHSA):將空間特征按像素強度排序并劃分為多個 “強度箱(bin)”,在箱內或箱間應用自注意力。這使得模型能針對性聚焦于動態范圍內的相似特征(如同一強度的雪花或雨滴),將長距離的退化像素統一處理,同時通過 Bin-wise 重塑(全局范圍特征整合)和 Frequency-wise 重塑(局部精細特征提取),平衡全局與局部信息。
????????動態范圍卷積:通過對像素進行水平和垂直排序,使卷積操作不再局限于相鄰像素,而是在相似強度的像素間進行,增強對天氣退化模式的捕捉能力。
????????雙尺度門控前饋(DGFF):采用 5×5 普通卷積和 3×3 擴張卷積兩個并行分支,結合門控機制(通過激活函數生成門控圖篩選關鍵特征),提取多尺度、多范圍的特征,彌補單一尺度卷積對復雜天氣特征的漏檢。
????????HTB 的結構以 “特征增強 - 融合” 為核心,包含兩個關鍵模塊,整體遵循 “歸一化 - 處理 - 殘差連接” 的設計:
????????整體框架:輸入特征先經層歸一化(LN),送入 DHSA 模塊處理后與原始特征殘差相加;再經層歸一化,送入 DGFF 模塊處理后再次殘差相加,輸出增強后的特征。
????????DHSA 模塊:內部包含動態范圍卷積(對特征分分支排序后卷積)和直方圖自注意力(通過兩種重塑機制生成箱內 / 箱間注意力圖,再融合),最終將特征恢復至原始空間順序。
????????DGFF 模塊:先通過 1×1 卷積擴展通道,分兩個分支分別用 5×5 深度卷積和 3×3 擴張深度卷積提取特征,再通過門控機制(Mish 激活后的分支特征與另一分支特征逐元素相乘)融合,最后通過 1×1 卷積壓縮通道輸出。
2.HTB?習作思路
HTB 在目標檢測中的優點
????????HTB 憑借動態范圍自注意力對長距離相似特征的捕捉能力,能有效聚合惡劣天氣下被干擾的目標特征(如被雨霧遮擋的車輛、被雪花覆蓋的行人),減少天氣噪聲對目標特征一致性的破壞;同時,雙尺度卷積機制可保留目標的多尺度細節(如小目標的邊緣、大目標的局部紋理),使檢測器更精準區分目標與背景,尤其在天氣導致目標特征模糊或碎片化的場景中,顯著提升檢測的召回率與定位精度。
HTB 在分割中的優點
????????HTB 通過直方圖自注意力維持像素間的強度關聯,能精準區分相似強度的前景(如目標)與背景(如被天氣影響的環境),避免因天氣導致的強度混淆;動態范圍卷積則增強了對模糊邊界(如霧中物體的邊緣、雪中植被的輪廓)的特征提取,結合雙尺度融合細化邊界細節,使分割結果在像素級上更貼合真實目標形態,尤其在天氣導致前景與背景過渡模糊的場景中,提升分割的邊界精度與區域一致性。
3. YOLO與HTB?的結合? ???? ? ?
????????YOLO 追求實時性與檢測效率,HTB 的動態范圍卷積和輕量化注意力設計(通過分箱機制減少計算量)能在增加有限計算負擔的同時,增強對惡劣天氣下特征的提取能力;其多尺度特征融合可與 YOLO 的特征金字塔網絡(FPN)互補,提升 YOLO 對小目標、模糊目標的識別速度與準確性,使其在復雜天氣場景中更穩健。
4.HTB?代碼部分
YOLO12模型改進方法,快速發論文,總有適合你的改進,還不改進上車_嗶哩嗶哩_bilibili
?代碼獲取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. HTB?引入到YOLOv12中
第一: 先新建一個v12_changemodel,將下面的核心代碼復制到下面這個路徑當中,如下圖如所示。E:\Part_time_job_orders\YOLO_NEW\YOLOv12\ultralytics\v12_changemodel。
?????????????????????????????????????
第二:在task.py中導入包
????????????????????????????????????????????????????????????????????????????????????????????
第三:在task.py中的模型配置部分下面代碼
???????????????????????????????????????????????????????????????????????????????????
?
第四:將模型配置文件復制到YOLOV11.YAMY文件中
?????????????????????????????????????????????????????????????????????????????????????????????
? ???????????????????????????????????????????????第五:運行代碼
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
import torch
if __name__=="__main__":# 使用自己的YOLOv8.yamy文件搭建模型并加載預訓練權重訓練模型model = YOLO("/home/shengtuo/tangfan/YOLO11/ultralytics/cfg/models/11/yolo12_HTB")\# .load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt') # build from YAML and transfer weightsresults = model.train(data="/home/shengtuo/tangfan/YOLO11/ultralytics/cfg/datasets/VOC_my.yaml",epochs=300,imgsz=640,batch=4,# cache = False,# single_cls = False, # 是否是單類別檢測# workers = 0,# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',amp = True)