YOLO11改进 - 卷积Conv | TMC三角掩码卷积(Triangular-Masked Convolution)构建菱形盲点感受野,增强空间感知,图像去噪有效涨点| CVPR 2026 |

发布时间:2026/7/6 3:29:43
YOLO11改进 - 卷积Conv | TMC三角掩码卷积(Triangular-Masked Convolution)构建菱形盲点感受野,增强空间感知,图像去噪有效涨点| CVPR 2026 | 前言本文给大家介绍使用三角掩码卷积TMC改进 YOLO11 网络模型通过在卷积核上施加上三角掩码构建菱形盲点区域精准匹配真实 sRGB 图像中 ISP 链路产生的空间相关噪声分布。其核心作用是无需下采样即可有效剔除存在噪声关联的像素完整利用无相关性的上下文信息保留纹理和结构细节。相比传统盲点网络或普通卷积TMC 能增强 YOLO11 对真实相机噪声的建模能力提升模型在复杂噪声环境下的特征鲁棒性与检测精度减少噪声干扰带来的误检。文章目录 YOLO11改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLO11改进专栏摘要盲点网络BSN通过屏蔽待预测目标像素实现自监督图像降噪无需真实干净图像作为监督信号即可完成纯净图像信号估计。但该方法假设像素噪声相互独立而现实中标准RGBsRGB图像并不满足这一前提——相机图像信号处理ISP链路会产生空间相关噪声打破像素噪声独立的假设。现有多种方法通过下采样操作解耦噪声相关性然而这类操作会改变噪声统计分布同时限制网络充分利用全局上下文信息。 本文提出三角掩码盲点网络TM-BSN一种全新盲点网络结构可精准建模真实sRGB图像噪声的空间相关性。该空间相关性源于图像去马赛克操作每个像素由周边邻域像素加权重构权重随空间距离衰减最终形成菱形噪声关联分布。为使网络感受野匹配该几何分布我们设计三角掩码卷积将卷积核仅保留上三角区域在原始图像分辨率下生成菱形盲点区域。该结构既能剔除存在噪声关联的像素又能完整利用无相关性的上下文信息无需额外下采样或后处理步骤。 此外本文引入知识蒸馏策略将多组盲点预测输出中的互补知识迁移至轻量化U-Net网络同步提升模型降噪精度与推理效率。在多个真实图像基准数据集上开展大量对比实验结果表明本文算法取得当前最优性能大幅超越现有各类自监督降噪方法。代码开源地址https://github.com/parkjun210/TM-BSN文章链接论文地址论文地址代码地址代码地址基本原理1. 解决的关键问题这篇文章关注真实世界 sRGB 图像的自监督去噪。传统盲点网络 BSN 的基本假设是目标像素的噪声与周围像素噪声相互独立。因此只要网络看不到目标像素就可以从邻域信息中预测干净信号避免直接复制噪声。但真实相机图像并不满足这个假设。由于 ISP 流水线中的去马赛克过程一个像素往往由周围 CFA 采样点插值得到导致相邻像素之间存在明显的空间相关噪声而且这种相关性呈现类似菱形的分布。已有方法常用下采样、pixel-shuffle 或较大的 masked convolution 来破坏相关性但这些方法会改变原始噪声统计、限制可用感受野或者带来棋盘伪影和细节损失。TMC 的目标就是在原始分辨率下构造与真实 sRGB 噪声相关结构匹配的盲点区域让网络既避开与目标像素强相关的噪声又尽可能利用未相关的上下文信息。2. 整体架构TM-BSN 以 AT-BSN 为基础但将主干网络中所有 3×3 卷积替换为 TMC。论文采用 VDIR 的 restorer backbone避免 U-Net 中池化和反池化可能造成的像素级错位。输入图像会经过四个旋转分支分别对应 0°、90°、180° 和 270°。每个分支通过堆叠 TMC 层提取特征再通过特征图平移操作形成盲点。之后将四个方向的输出反向旋转回原方向在通道维度拼接并用 1×1 卷积融合最终得到去噪结果。此外论文还引入知识蒸馏。TM-BSN 可以通过不同 shift offset 生成多个盲点大小不同的预测结果这些结果包含互补的恢复信息。作者将这些教师预测蒸馏到一个轻量 U-Net 学生网络中从而提升推理效率和最终性能。3. 技术原理TMC 的核心是对普通 3×3 卷积核施加一个上三角二值掩码。普通卷积会使用卷积核内所有位置而 TMC 只保留满足i j的上三角区域屏蔽下三角权重。公式上可以理解为F_out (W ⊙ M) * F_in b其中W是可学习卷积核M是三角掩码⊙表示逐元素相乘*表示标准卷积。多个 TMC 层堆叠后感受野会沿三角形区域逐步扩展。随后模型对特征图进行向上或向右的 shift使目标像素不再落入自身感受野从而形成盲点。论文刻意避免对角平移因为对角移动会造成空间覆盖不连续改用垂直和水平平移拼接可以得到更连续的盲点扩展。最终四个旋转方向的三角盲点组合成一个菱形盲点正好对应真实 sRGB 图像中由去马赛克产生的菱形空间相关噪声结构。这样TM-BSN 能在不下采样、不改变原始噪声统计的情况下有效排除相关噪声区域同时保留纹理和结构细节。核心代码classConv(nn.Conv2d):def__init__(self,in_channels:int,out_channels:int,k:int):super().__init__(in_channels,out_channels,kernel_sizek,stride1,paddingk//2,dilation1,groups1,biasTrue)masktorch.ones_like(self.weight)tri2dtorch.triu(torch.ones(k,k,dtypemask.dtype,devicemask.device))withtorch.no_grad():mask*tri2d self.register_buffer(mask,mask,persistentTrue)self.weight.register_hook(lambdag:g*self.mask)defforward(self,x:torch.Tensor)-torch.Tensor:wself.weight*self.maskreturnF.conv2d(x,w,self.bias,stride1,paddingself.padding)YOLO11引入代码在根目录下的ultralytics/nn/目录新建一个conv目录然后新建一个以TMC为文件名的py文件 把代码拷贝进去。importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassTMC(nn.Conv2d):Triangular Mask Convolution: applies a triangular mask to the convolution weights.def__init__(self,in_channels:int,out_channels:int,kernel_size:int3,stride:int1,padding:int|NoneNone,dilation:int1,groups:int1,bias:boolTrue,):ifpaddingisNone:paddingkernel_size//2super().__init__(in_channelsin_channels,out_channelsout_channels,kernel_sizekernel_size,stridestride,paddingpadding,dilationdilation,groupsgroups,biasbias,)masktorch.ones_like(self.weight)tri2dtorch.triu(torch.ones(kernel_size,kernel_size,dtypemask.dtype,devicemask.device))withtorch.no_grad():mask*tri2d self.register_buffer(mask,mask,persistentTrue)self.weight.register_hook(lambdag:g*self.mask)defforward(self,x:torch.Tensor)-torch.Tensor:wself.weight*self.maskreturnF.conv2d(x,w,self.bias,strideself.stride,paddingself.padding,dilationself.dilation,groupsself.groups)注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.conv.TMCimportTMC步骤2修改def parse_model(d, ch, verboseTrue):TMC配置yolo11-TMC.yaml# Ultralytics YOLO , AGPL-3.0 license# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parametersnc:8# number of classesscales:# model compound scaling constants, i.e. modelyolo11n.yaml will call yolo11.yaml with scale n# [depth, width, max_channels]n:[0.50,0.25,1024]# summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss:[0.50,0.50,1024]# summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm:[0.50,1.00,512]# summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl:[1.00,1.00,512]# summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx:[1.00,1.50,512]# summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,TMC,[128,3,2]]# 1-P2/4-[-1,2,C3k2,[256,False,0.25]]-[-1,1,TMC,[256,3,2]]# 3-P3/8-[-1,2,C3k2,[512,False,0.25]]-[-1,1,TMC,[512,3,2]]# 5-P4/16-[-1,2,C3k2,[512,True]]-[-1,1,TMC,[1024,3,2]]# 7-P5/32-[-1,2,C3k2,[1024,True]]-[-1,1,SPPF,[1024,5]]# 9-[-1,2,C2PSA,[1024]]# 10# YOLO11n headhead:-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,2,C3k2,[512,False]]# 13-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,2,C3k2,[256,False]]# 16 (P3/8-small)-[-1,1,Conv,[256,3,2]]-[[-1,13],1,Concat,[1]]# cat head P4-[-1,2,C3k2,[512,False]]# 19 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-1,10],1,Concat,[1]]# cat head P5-[-1,2,C3k2,[1024,True]]# 22 (P5/32-large)-[[16,19,22],1,Detect,[nc]]# Detect(P3, P4, P5)实验脚本importwarnings warnings.filterwarnings(ignore)fromultralyticsimportYOLOif__name____main__:# 修改为自己的配置文件地址modelYOLO(./ultralytics/cfg/models/11/yolo11-TMC.yaml)# 修改为自己的数据集地址model.train(data./ultralytics/cfg/datasets/coco8.yaml,cacheFalse,imgsz640,epochs10,single_clsFalse,# 是否是单类别检测batch8,close_mosaic10,workers0,optimizerSGD,ampTrue,projectruns/train,nameTMC,)结果