????????在醫學圖像分割領域,傳統卷積神經網絡(CNNs)受限于局部感受野,難以捕捉長距離依賴關系,而基于 Transformer 的模型因自注意力機制的二次計算復雜度,在處理高分辨率圖像時效率低下。近年來,狀態空間模型(SSMs)如 Mamba 展現出線性復雜度建模長序列的優勢,其視覺變體 Vision Mamba(VMamba)通過引入二維選擇性掃描機制,進一步提升了在圖像任務中的全局特征提取能力。VSS Block 作為 VMamba 的核心組件,旨在解決傳統模型在全局上下文建模與計算效率之間的矛盾,為醫學圖像分割提供更優的特征表達方案。
上面是原模型,下面是改進模型
1. 視覺狀態空間模塊VSS Block介紹?
????????VSS Block 基于狀態空間模型的離散化理論,通過線性常微分方程(ODE)建模動態系統,并通過時間尺度參數 Δ 將連續系統轉化為離散序列處理。其核心模塊 2D 選擇性掃描(SS2D)借鑒結構化狀態空間模型(S4)的多方向掃描策略,將二維圖像沿水平、垂直、對角線等方向展開為一維序列,利用選擇性機制(如 S6 操作)實現線性時間復雜度的全局特征提取。同時,結合 SiLU 激活函數的非線性變換與特征融合策略,VSS Block 能夠動態聚焦關鍵區域,增強模型對復雜圖像結構的適應性。
VSS Block 采用雙分支并行架構(如圖 2.c 所示):
????????主分支:輸入圖像經線性嵌入后,通過 3×3 深度卷積提取局部特征,再由 SS2D 模塊進行四方向掃描,捕捉全局上下文,經層歸一化后輸出結構化特征。
????????副分支:直接對線性嵌入結果應用 SiLU 激活函數,保留原始特征的非線性響應。
????????特征融合:主副分支輸出通過逐元素相乘(Hadamard Product)結合,生成最終特征圖,實現全局結構信息與局部細節的互補。
2. YOLOv12與視覺狀態空間模塊VSS Block的結合? ???? ? ?
?????????將 VSS Block 插入 YOLO12 中,其雙向狀態空間模型與多方向掃描機制可高效捕捉圖像全域上下文及多尺度細節,增強對復雜場景中目標的特征表征能力,尤其提升小目標檢測精度;結合線性計算與動態注意力設計,在輕量化基礎上優化特征跨層融合效率,助力 YOLO12 實現更快速精準的多目標定位與分類。
3. 視覺狀態空間模塊VSS Block代碼部分
YOLO12模型改進方法,快速發論文,總有適合你的改進,還不改進上車_嗶哩嗶哩_bilibili
YOLO12 改進|融入 Mamba 架構 助你輕松發三四區論文_嗶哩嗶哩_bilibili
?更多代碼:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
?4. 將視覺狀態空間模塊VSS Block引入到YOLOv12中
第一: 先新建一個v12_changemodel,將下面的核心代碼復制到下面這個路徑當中,如下圖如所示。E:\Part_time_job_orders\YOLO_NEW\YOLOv12\ultralytics\v12_changemodel。
? ? ?????????????????
第二:在task.py中導入包
????????????????
第三:在task.py中的模型配置部分下面代碼
??????????
第四:將模型配置文件復制到YOLOV12.YAMY文件中
?????????
? ???????????????????????????????????????????????第五:運行代碼
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorldif __name__=="__main__":# 使用自己的YOLOv12.yamy文件搭建模型并加載預訓練權重訓練模型model = YOLO(r"E:\Part_time_job_orders\YOLO_NEW\YOLOv12\ultralytics\cfg\models\12\yolo12_VMKLA.yaml")\.load(r'E:\Part_time_job_orders\YOLO_NEW\YOLOv12\yolo12n.pt') # build from YAML and transfer weightsresults = model.train(data=r'E:\Part_time_job_orders\YOLO\YOLOv12\ultralytics\cfg\datasets\VOC_my.yaml',epochs=300,imgsz=640,batch=64,# cache = False,# single_cls = False, # 是否是單類別檢測# workers = 0,# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',amp = True)