当前位置: 首页 > news >正文

wordpress 文章发布 编辑器短视频seo推广隐迅推专业

wordpress 文章发布 编辑器,短视频seo推广隐迅推专业,民治网站优化培训,网站做系统的靠什么挣钱秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转


💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡


专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有110+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进——点击即可跳转


本文介绍一种新的自校准卷积方法,无需改变网络架构,即可增强CNN的表征能力。该方法通过内部通信扩展卷积层的视野,自适应建立长距离的空间和跨通道依赖,从而丰富特征输出。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方便大家一键运行,小白也可轻松上手实践。以帮助您更好地学习深度学习目标检测YOLO系列的挑战。

专栏地址YOLOv8改进——更新各种有效涨点方法——点击即可跳转   

论文中的效果图

目录

1. 原理

2. 将C2f_SCConv添加到yolov8网络中

2.1 C2f_SCConv代码实现

 2.2 C2f_SCConv的神经网络模块代码解析

2.3 更改init.py文件

2.4 添加yaml文件

2.5 注册模块

2.6 执行程序

3. 完整代码分享

4. GFLOPs

5. 进阶

6. 总结


1. 原理

论文地址:Improving Convolutional Networks with Self-Calibrated Convolutions——点击即可跳转

官方代码:官方代码仓库——点击即可跳转 

SCConv(自校准卷积)旨在通过扩大视野并整合更丰富的空间和通道信息来改进传统卷积,而无需修改整体架构或增加复杂性。

SCConv 的关键原则包括:

  1. 内部通信:SCConv 在每个空间位置上实现长距离空间和通道间依赖性,与传统的小核卷积相比,增强了特征图的丰富性。

  2. 异构卷积:滤波器被分成多个部分,每个部分处理不同的任务。一些滤波器对输入进行下采样,执行卷积,然后上采样,允许校准主卷积。

  3. 自校准操作:输入特征图被分成两部分,一部分由标准卷积处理,另一部分经过自校准过程,引入低分辨率嵌入。这种由下采样创建的嵌入会影响原始分辨率空间中的卷积。

  4. 增强的感受野:通过处理多个尺度(低分辨率和高分辨率)的特征图,SCConv 增加了每个卷积层的感受野,使其能够捕获更多的上下文信息。

  5. 无额外参数:尽管 SCConv 有诸多好处,但它不会引入额外参数或显著增加计算复杂度,因此非常高效,并且易于应用于现有网络。

2. 将C2f_SCConv添加到yolov8网络中

2.1 C2f_SCConv代码实现

关键步骤一将下面代码粘贴到在/ultralytics/ultralytics/nn/modules/block.py中,并在该文件的__all__中添加“C2f_SCConv”


class SCConv(nn.Module):# https://github.com/MCG-NKU/SCNet/blob/master/scnet.pydef __init__(self, c1, c2, s=1, d=1, g=1, pooling_r=4):super(SCConv, self).__init__()self.k2 = nn.Sequential(nn.AvgPool2d(kernel_size=pooling_r, stride=pooling_r), Conv(c1, c2, k=3, d=d, g=g, act=False))self.k3 = Conv(c1, c2, k=3, d=d, g=g, act=False)self.k4 = Conv(c1, c2, k=3, s=s, d=d, g=g, act=False)def forward(self, x):identity = xout = torch.sigmoid(torch.add(identity, F.interpolate(self.k2(x), identity.size()[2:]))) # sigmoid(identity + k2)out = torch.mul(self.k3(x), out) # k3 * sigmoid(identity + k2)out = self.k4(out) # k4return outclass Bottleneck_SCConv(Bottleneck):def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5):super().__init__(c1, c2, shortcut, g, k, e)c_ = int(c2 * e)  # hidden channelsself.cv1 = Conv(c1, c_, k[0], 1)self.cv2 = SCConv(c_, c2, g=g)class C3_SCConv(C3):def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5):super().__init__(c1, c2, n, shortcut, g, e)c_ = int(c2 * e)  # hidden channelsself.m = nn.Sequential(*(Bottleneck_SCConv(c_, c_, shortcut, g, k=((1, 1), (3, 3)), e=1.0) for _ in range(n)))class C2f_SCConv(C2f):def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5):super().__init__(c1, c2, n, shortcut, g, e)self.m = nn.ModuleList(Bottleneck_SCConv(self.c, self.c, shortcut, g, k=(3, 3), e=1.0) for _ in range(n))

 2.2 C2f_SCConv的神经网络模块代码解析

C2f_SCConv 类将自校准卷积 (SCConv) 机制集成到经过修改的 C2f 块结构中,增强了其通过扩展的接受场捕获更多上下文信息的能力,同时保持了高效的计算复杂度。

  1. 基础结构(C2f 继承)C2f_SCConv 继承自 C2f 类,后者通常是用于融合深度学习网络中特征的自定义卷积块。这允许基于 SCConv 的块直接替换或增强现有架构中的标准卷积。

  2. Bottleneck_SCConv 集成C2f_SCConv 的核心功能是使用 Bottleneck_SCConv,它用 SCConv 替换标准卷积。这种瓶颈结构有助于通过引入缩小的中间表示(c_)来减少参数数量,该中间表示随后使用 SCConv 操作进行扩展。

  3. SCConv 机制C2f_SCConv 中的每个瓶颈都使用 SCConv 来:

  • 将卷积滤波器拆分为单独的部分,从而实现多尺度特征提取。

  • 使用下采样生成的低分辨率嵌入来指导原始分辨率空间中的卷积过程,从而改善空间和通道级信息聚合。

  1. Bottleneck_SCConv 的顺序应用C2f_SCConv 使用 ModuleList 来包含多个 Bottleneck_SCConv 实例,每个实例负责执行 SCConv 增强的转换。这些按顺序应用以捕获越来越丰富和详细的特征表示。

  2. 特征融合:与 C2f 类似,C2f_SCConv 块可执行有效的特征融合,但具有 SCConv 增强卷积,这提高了模型收集长距离空间依赖性的能力,使最终的特征图更具辨别性。

总体而言,C2f_SCConv 的主要目标是通过将 SCConv 嵌入 C2f 块来改进特征表示,从而增强空间和通道特征提取,而不会显着增加计算负荷。

2.3 更改init.py文件

关键步骤二:修改modules文件夹下的__init__.py文件,先导入函数    

然后在下面的__all__中声明函数

2.4 添加yaml文件

关键步骤三:在/ultralytics/ultralytics/cfg/models/v8下面新建文件yolov8_C2f_SCConv.yaml文件,粘贴下面的内容

  •  OD【目标检测】
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f_SCConv, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f_SCConv, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f_SCConv, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f_SCConv, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f_SCConv, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f_SCConv, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f_SCConv, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f_SCConv, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)
  • Seg【语义分割】
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f_SCConv, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f_SCConv, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f_SCConv, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f_SCConv, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f_SCConv, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f_SCConv, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f_SCConv, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f_SCConv, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Segment, [nc, 32, 256]] # Segment(P3, P4, P5)

温馨提示:因为本文只是对yolov8基础上添加模块,如果要对yolov8n/l/m/x进行添加则只需要指定对应的depth_multiple 和 width_multiple。不明白的同学可以看这篇文章: yolov8yaml文件解读——点击即可跳转 


# YOLOv8n
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple
max_channels: 1024 # max_channels# YOLOv8s
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
max_channels: 1024 # max_channels# YOLOv8l 
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
max_channels: 512 # max_channels# YOLOv8m
depth_multiple: 0.67  # model depth multiple
width_multiple: 0.75  # layer channel multiple
max_channels: 768 # max_channels# YOLOv8x
depth_multiple: 1.33  # model depth multiple
width_multiple: 1.25  # layer channel multiple
max_channels: 512 # max_channels

2.5 注册模块

关键步骤四:在task.py的parse_model函数中注册

2.6 执行程序

在train.py中,将model的参数路径设置为yolov8_C2f_SCConv.yaml的路径

建议大家写绝对路径,确保一定能找到 

from ultralytics import YOLO
import warnings
warnings.filterwarnings('ignore')
from pathlib import Pathif __name__ == '__main__':# 加载模型model = YOLO("ultralytics/cfg/v8/yolov8.yaml")  # 你要选择的模型yaml文件地址# Use the modelresults = model.train(data=r"你的数据集的yaml文件地址",epochs=100, batch=16, imgsz=640, workers=4, name=Path(model.cfg).stem)  # 训练模型

  🚀运行程序,如果出现下面的内容则说明添加成功🚀 

                   from  n    params  module                                       arguments0                  -1  1       464  ultralytics.nn.modules.conv.Conv             [3, 16, 3, 2]1                  -1  1      4672  ultralytics.nn.modules.conv.Conv             [16, 32, 3, 2]2                  -1  1     12032  ultralytics.nn.modules.block.C2f_SCConv      [32, 32, 1, True]3                  -1  1     18560  ultralytics.nn.modules.conv.Conv             [32, 64, 3, 2]4                  -1  2     86784  ultralytics.nn.modules.block.C2f_SCConv      [64, 64, 2, True]5                  -1  1     73984  ultralytics.nn.modules.conv.Conv             [64, 128, 3, 2]6                  -1  2    345600  ultralytics.nn.modules.block.C2f_SCConv      [128, 128, 2, True]7                  -1  1    295424  ultralytics.nn.modules.conv.Conv             [128, 256, 3, 2]8                  -1  1    755712  ultralytics.nn.modules.block.C2f_SCConv      [256, 256, 1, True]9                  -1  1    164608  ultralytics.nn.modules.block.SPPF            [256, 256, 5]10                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']11             [-1, 6]  1         0  ultralytics.nn.modules.conv.Concat           [1]12                  -1  1    222208  ultralytics.nn.modules.block.C2f_SCConv      [384, 128, 1]13                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']14             [-1, 4]  1         0  ultralytics.nn.modules.conv.Concat           [1]15                  -1  1     55808  ultralytics.nn.modules.block.C2f_SCConv      [192, 64, 1]16                  -1  1     36992  ultralytics.nn.modules.conv.Conv             [64, 64, 3, 2]17            [-1, 12]  1         0  ultralytics.nn.modules.conv.Concat           [1]18                  -1  1    197632  ultralytics.nn.modules.block.C2f_SCConv      [192, 128, 1]19                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]20             [-1, 9]  1         0  ultralytics.nn.modules.conv.Concat           [1]21                  -1  1    788480  ultralytics.nn.modules.block.C2f_SCConv      [384, 256, 1]22        [15, 18, 21]  1    897664  ultralytics.nn.modules.head.Detect           [80, [64, 128, 256]]
YOLOv8_C2f_SCConv summary: 345 layers, 4104336 parameters, 4104320 gradients, 10.1 GFLOPs

3. 完整代码分享

https://pan.baidu.com/s/1CjmGgbqzXZmmUDCLcON8CQ?pwd=6uwj

提取码: 6uwj 

4. GFLOPs

关于GFLOPs的计算方式可以查看百面算法工程师 | 卷积基础知识——Convolution

未改进的YOLOv8nGFLOPs

img

改进后的GFLOPs

5. 进阶

可以与其他的注意力机制或者损失函数等结合,进一步提升检测效果

6. 总结

自校准卷积 (SCConv) 旨在通过扩展感受野并结合更丰富的上下文信息(包括空间和跨通道信息)来增强传统卷积运算,而无需修改整体网络架构或添加额外参数。它将卷积滤波器划分为多个部分,每个部分都发挥着不同的作用。输入的一部分被下采样并转换为低分辨率嵌入,然后被上采样并用于指导原始分辨率空间中的卷积过程。这种自校准机制使 SCConv 能够捕获长距离空间依赖性和通道间相关性,从而提高特征图的判别能力。该方法增加了感受野,使每个空间位置能够自适应地从更大的区域收集信息,从而生成更详细、更具代表性的特征,同时保持计算效率。

http://www.ritt.cn/news/18900.html

相关文章:

  • 西宁城东区建设局公租房网站西安关键词排名提升
  • 苏州网站备案查询百度大数据查询怎么用
  • 网站名字怎么取最好惠州seo网站管理
  • 兼职网网站建设方案可以免费发外链的论坛
  • 什么网站可以做宣传百度seo2022
  • 企业网站建设推荐兴田德润怎么在百度发帖
  • 女式包包网站建设策划书百度数据平台
  • 沈阳做网站费用南宁seo收费
  • 二级网站怎么建设seo网站优化网站编辑招聘
  • 单页网站系统app推广赚钱
  • 做英语题目的网站深圳谷歌seo推广
  • 淘宝美工做倒计时图片网站百度的营销推广模式
  • 公司官网系统莆田网站建设优化
  • 有哪些做的好的网站18款禁用软件黄app免费
  • 新疆生产建设兵团社保卡激活网站深圳seo优化公司哪家好
  • 东莞网站建设公司百推关键词林俊杰mp3免费下载
  • 做外贸哪几个网站好seo交互论坛
  • 河南高端网站建设写一篇软文多少钱
  • 网站建设-搜遇网络永久不收费免费的软件
  • 济南集团网站建设方案soso搜搜
  • 温州大军建设有限公司网站营销推广的方法有哪些
  • 做网站前台要学哪些清远今日头条新闻
  • 广州荔湾做网站的公司网站怎样被百度收录
  • 建设工程检测网seo的内容主要有哪些方面
  • 深圳网站制作工作室黄山网站seo
  • seo短视频永久入口运营关键词优化排名公司
  • 蓟县做网站万网域名注册查询
  • 邯郸企业网站建设2023年12月疫情又开始了吗
  • iis7如何搭建网站产品推广计划
  • 医院网站如何备案百度网站推广排名