在多视图计算机视觉任务中,不同视角(如双目相机的左右视图)包含互补信息,是提升任务性能的关键。但传统方法常通过直接级联特征提取与跨视图交互模块来利用这些信息,导致两个核心问题:一是网络参数与计算量激增,难以部署在边缘设备;二是跨视图信息匹配粗糙,易丢失关键细节。为解决这些痛点,CVIM 在原有跨视图网络基础上优化,聚焦 “精准交互” 与 “轻量化”,实现跨视图信息的高效利用。
1.CVIM原理
CVIM 以 “注意力引导的双向信息互补” 为核心原理。首先,从两个视图的局部特征中,分别生成用于信息查询的 Q 矩阵、用于信息匹配的 K 矩阵和用于信息传递的 V 矩阵;接着,通过计算 Q 与 K 的相似度得到注意力权重,筛选出对当前视图有价值的跨视图信息,并基于该权重对 V 矩阵加权,生成融合了另一视图信息的特征;最后,将跨视图融合特征与原视图特征残差连接,再通过可训练的尺度系数控制融合比例,既保证信息互补,又避免引入冗余噪声。

CVIM 的结构围绕 “特征转换 - 注意力计算 - 特征融合” 三步设计,层级清晰且轻量化:
特征转换模块:通过 1×1 点卷积(PConv)调整特征通道数,再用 3×3 深度卷积(DWConv)提取局部细节,将输入的双视图特征分别转换为 Q、K、V 矩阵,为后续注意力计算做准备。
注意力交互模块:基于缩放点积注意力公式(Attention(Q,K,V)=softmax(QKT/C)V,C 为通道数),完成双视图间的双向信息交互,精准筛选并传递互补特征。
特征融合模块:采用 “跨视图特征 × 尺度系数 + 原视图特征” 的残差结构,其中尺度系数初始化为 0 以稳定训练,最终输出整合了双视图优势的特征。
2. CVIM习作思路
在目标检测任务中:CVIM 能针对性解决单视图检测的局限性。一方面,它通过注意力机制精准关联双视图中同一目标的特征,可有效补充遮挡、模糊场景下的目标信息 —— 例如某视图中目标被遮挡部分,能通过另一视图的完整特征补全,减少漏检与误检;另一方面,CVIM 仅对局部特征进行跨视图交互,无需处理全部特征,在提升检测精度的同时,不会大幅增加计算量,符合检测任务对实时性的要求,适配车载、安防等需快速响应的场景。
在目标检测任务中:在图像分割任务中,CVIM 可强化分割结果的精细度与一致性。首先,它能挖掘双视图中分割目标的结构关联,例如在语义分割中,可利用不同视图下物体的边缘、纹理细节互补,优化细小结构(如树叶、电线)和边界区域的分割精度;其次,CVIM 的轻量化结构可直接嵌入现有分割网络的特征提取环节,无需重构网络架构,在提升分割性能的同时,避免参数与计算量的大幅增长,平衡精度与推理效率。
3. YOLO与CVIM的结合
YOLO 原有的 concat 层仅能对特征进行简单的通道拼接,无法挖掘特征间的关联信息,而用 CVIM 替换后,能带来两大核心提升:一是 CVIM 可通过注意力机制筛选双视图特征中的互补信息,而非无差别拼接,能有效强化目标关键特征(如小目标的轮廓、遮挡目标的局部细节),减少冗余信息对检测结果的干扰,提升检测精度;二是 CVIM 通过通道分离策略仅对部分特征进行跨视图交互,相比 concat 层对全部特征的拼接,在实现特征增强的同时,不会显著增加计算负担,能适配 YOLO 对实时性的需求,尤其适合边缘设备部署。
4.CVIM代码部分
YOLO11|YOLO12|改进| 跨视图交互模块CVIM,解决跨视图信息交互效率低、参数冗余问题,减少小目标与遮挡目标的漏检率_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. CVIM到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_CVIM.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
)
3万+

被折叠的 条评论
为什么被折叠?



