??????????在遙感圖像語義分割等視覺任務中,編碼器 - 解碼器結構通過跳躍連接融合多尺度特征時,常面臨兩大挑戰:一是編碼器的局部細節特征與解碼器的全局語義特征融合時,空間位置信息易丟失,導致目標定位不準;二是復雜場景中(如目標大小不均、背景噪聲多),特征融合過程中易出現類別誤分(如相似顏色的不同類別混淆)。傳統注意力機制雖能增強關鍵特征,但多依賴高計算成本的全連接層或 Transformer 結構,難以在輕量級網絡中平衡精度與效率。為此,信息整合注意力(IIA)被提出,旨在通過輕量級設計重構空間位置信息,增強編碼器與解碼器特征的有效融合,同時抑制噪聲干擾。
1.IIA原理
????????IIA 的核心原理是基于特征的位置不變性,通過捕捉通道內的序列信息生成空間注意力權重,動態增強關鍵位置特征并抑制噪聲。具體而言,它首先融合編碼器與解碼器的特征圖,通過池化操作提取通道內的全局與局部統計信息(平均池化捕捉整體趨勢,最大池化突出顯著特征);再利用 1D 卷積處理這些序列信息,生成高度和寬度方向的注意力調制因子,使模型能自適應聚焦于目標區域(如邊界、小目標),弱化背景噪聲,最終實現更精準的空間位置信息重構與特征增強。
IIA 的結構主要包括以下步驟:
- 特征融合與重塑:將編碼器輸出特征圖與解碼器輸出特征圖按通道維度拼接,再重塑為聚焦高度和寬度方向的兩個特征圖,分別對應不同的空間維度信息處理45。
- 序列信息提取:對重塑后的特征圖分別進行平均池化和最大池化操作,提取高度和寬度方向的序列特征,捕捉通道內的全局趨勢和顯著特征3。
- 注意力調制因子生成:將池化結果拼接后,通過 1D 卷積(核大小為 7)壓縮通道并捕捉序列依賴關系,經批歸一化和 Sigmoid 激活函數,生成高度和寬度方向的注意力調制因子67。
- 特征增強輸出:將注意力調制因子與原始融合特征圖進行元素乘法操作,并與原始特征圖進行殘差相加,得到增強后的特征圖,實現空間位置信息的重構和關鍵特征的強化7。
2. IIA在不同領域論文中的描述
IIA 在目標檢測中的優點
????????IIA 在目標檢測中能有效提升特征融合的精準性與抗干擾性。其通過高度和寬度雙方向的注意力調制,可針對性增強目標區域(如小目標、密集目標)的位置特征,弱化復雜背景(如紋理干擾、光照變化)的噪聲影響,幫助模型更精準定位目標邊界與中心;同時,輕量級設計(1D 卷積替代全連接層)避免了計算負擔,使檢測網絡在保持實時性的同時,提升對難樣本(如遮擋目標、低對比度目標)的識別率,平衡檢測精度與速度。
IIA 在分割中的優點
? ? ? ? YOLO 以實時性為核心優勢,IIA 的輕量級設計(低參數與低 FLOPs)不會顯著降低其推理速度;同時,IIA 對目標位置特征的增強的能力,能提升 YOLO 在密集場景或小目標檢測中的精度,尤其適合復雜環境下的快速目標定位。
3. YOLO與IIA的結合??
? ? ? ?YOLO 以實時性為核心優勢,IIA 的輕量級設計(低參數與低 FLOPs)不會顯著降低其推理速度;同時,IIA 對目標位置特征的增強的能力,能提升 YOLO 在密集場景或小目標檢測中的精度,尤其適合復雜環境下的快速目標定位。
4. IIA代碼部分
信息整合注意力IIA,通過雙方向注意力機制重構空間位置信息,動態增強目標關鍵特征并抑制噪聲_嗶哩嗶哩_bilibili
YOLOv11模型改進講解,教您如何根據自己的數據集選擇最優的模塊提升精度_嗶哩嗶哩_bilibili
?代碼獲取:https://github.com/tgf123/YOLOv8_improve
?5. IIA到YOLOv11中
第一: 將下面的核心代碼復制到D:\model\yolov11\ultralytics\change_model路徑下,如下圖所示。
? ? ????????????????
第二:在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/yolo11_IIA.yaml")\# .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 = False)
?????