CCViM Block(上下文聚类视觉曼巴模块),通过多方向扫描(水平 / 垂直 / 翻转)提取目标延展特征,结合聚类层对边界点的动态聚合,提升目标的定位能力

发布于:2025-07-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

        传统视觉模型在处理复杂场景时面临 “全局依赖捕获不足” 与 “局部细节丢失” 的双重挑战:CNN 受限于局部感受野,难以建模长距离关系;Transformer 虽能处理全局依赖,却存在二次计算复杂度问题。CCViM Block(上下文聚类视觉曼巴模块)基于 Vision Mamba 架构,通过动态上下文聚类与多方向扫描的结合,在保持线性计算效率的同时,实现全局与局部特征的协同建模,尤其适用于医学、遥感等对空间上下文敏感的领域。

1.CCViM Block原理

       CCViM Block 的核心原理是将图像特征视为动态点集,通过自适应聚类选择性状态空间扫描实现特征优化:

        动态聚类:将特征点按语义相似性聚合成若干中心(如 4 或 25 个),聚合邻域信息的同时减少冗余计算;

       多方向扫描:借鉴 Mamba 的线性状态空间模型,沿水平、垂直等方向提取长距离依赖,通过选择性机制动态组合最优扫描路径;

         双分支融合:通过残差结构融合通道语义与空间上下文,平衡特征表达能力与计算效率。

CCViM Block 采用双分支残差架构:

 1. 线性变换分支:通过 1×1 卷积调整特征维度,捕获通道间关联;

 2. 空间上下文分支

          深度卷积层:提取局部空间特征;

        CCS6 层:核心模块,包含 4 个扫描方向(水平 / 垂直 / 翻转)与 2 种聚类配置(4/25 中心),通过门控机制选择 4 种操作融合;

 3. 归一化与残差连接:通过 LayerNorm 稳定训练,并通过残差连接保留原始特征信息。

2. CCViM Block习作思路

医学领域

在医学图像分割中,CCViM Block 通过动态聚类强化病灶局部细节(如细胞核边界、肿瘤边缘),同时利用多方向扫描捕获解剖结构的全局关联(如器官位置关系)。

遥感领域

针对遥感影像中地物尺度差异大的特点,CCViM Block 以 4 个聚类中心聚合农田、森林等大面积同质区域特征,以 25 个中心捕获城市建筑、道路等异质纹理,结合经纬方向扫描提取地物分布模式。

缺陷检测领域

工业缺陷检测中,CCViM Block 通过水平 - 垂直翻转扫描强化划痕、裂纹等线性缺陷的延展特征,利用 4 个聚类中心突出缺陷区域的纹理突变点,抑制背景干扰。

农业领域

农业场景中,CCViM Block 通过动态聚类适应作物冠层密度变化:4 个中心捕获整齐作物行的全局分布,25 个中心细化单株叶片纹理,结合行列扫描整合农田布局信息,尤其在遮挡条件下对病斑边界的定位能力显著优于传统方法。

3. YOLO与CCViM Block的结合    

        将 CCViM Block 与 YOLO 结合,可在保持 YOLO 实时检测效率的基础上,通过动态上下文建模强化多尺度目标的特征表达,具体优势如下:

1. 多尺度目标检测精度提升

        CCViM Block 的动态聚类机制能自适应聚合不同尺度目标的特征 —— 对小目标(如医学影像中的微小结节、遥感图像中的小型车辆),通过增加聚类中心数量(如 25 个)捕捉细节纹理;对大目标(如工业场景中的大型构件缺陷、农田中的整片作物区域),以少聚类中心(如 4 个)整合全局上下文。这种机制弥补了 YOLO 在跨尺度检测时的特征失衡问题。

2. 边界定位与轮廓完整性优化

        CCViM Block 通过多方向扫描(水平 / 垂直 / 翻转)提取目标延展特征,结合聚类层对边界点的动态聚合(如强化医学病灶、工业缺陷的边缘特征点),使检测框更贴合真实轮廓。

4.CCViM Block代码部分

CCViM:Context Clustering Vision Mamba上下文聚类视觉曼巴模型,自适应聚合不同尺度的目标特征(如小目标的细节与大目标的全局上下_哔哩哔哩_bilibili

YOLOv11模型改进讲解,教您如何根据自己的数据集选择最优的模块提升精度_哔哩哔哩_bilibili

 代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub

5. CCViM Block到YOLOv11中

第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。

            ​​​​​​    

第二:在task.py中导入

 ​​​                  

第三:在task.py中的模型配置部分下面代码

                     

第四:将模型配置文件复制到YOLOV11.YAMY文件中

          

      ​​​​​​​​​​​​​​ ​​​​​​​ ​​​​​​​​​​​​​第五:运行代码​​​​​​​

from sympy import false

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_ccvim.yaml")\
        # .load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt')  # build from YAML and transfer weights

    results = 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
                          )