yolov8改进——SFFP特征金字塔池化修改(详细版)

1.引言

金字塔池化模块是yolo系列十分重要的一个改进点,因此,这个地方如果选择多种改进,当然,这里也可以做多种消融实验说明自己的改进有效。

下面以SimSPPF为例,写出如何修改SPPF。

2.改进

2.1 ultralytics/nn/modules/block.py

在文件下方添加SimSPPF
在这里插入图片描述
SimSPPF代码

class SimConv(nn.Module):
    '''Normal Conv with ReLU activation'''
    def __init__(self, in_channels, out_channels, kernel_size, stride, groups=1, bias=False):
        super().__init__()
        padding = kernel_size // 2
        self.conv = nn.Conv2d(
            in_channels,
            out_channels,
            kernel_size=kernel_size,
            stride=stride,
            padding=padding,
            groups=groups,
            bias=bias,
        )
        self.bn = nn.BatchNorm2d(out_channels)
        self.act = nn.ReLU()

    def forward(self, x):
        return self.act(self.bn(self.conv(x)))

    def forward_fuse(self, x):
        return self.act(self.conv(x))
class SimSPPF(nn.Module):
    '''Simplified SPPF with ReLU activation'''
    def __init__(self, in_channels, out_channels, kernel_size=5):
        super().__init__()
        c_ = in_channels // 2  # hidden channels
        self.cv1 = SimConv(in_channels, c_, 1, 1)
        self.cv2 = SimConv(c_ * 4, out_channels, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=kernel_size, stride=1, padding=kernel_size // 2)

    def forward(self, x):
        x = self.cv1(x)
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')
            y1 = self.m(x)
            y2 = self.m(y1)
            return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))

在block.py开头__all__中添加与上面类相同的名字,即此处为SimSPPF
在这里插入图片描述

2.2 ultralytics/nn/modules/init.py

如下图,我们是在block.py中添加的SimSPPF,因此,下面也在.block中添加,__all__中也一样添加
在这里插入图片描述

2.3 ultralytics/nn/tasks.py

依然如下图,由于上述我们在 ultralytics/nn/modules中添加的,此处我们添加到ultralytics.nn.modules下,
在这里插入图片描述

在代码中,找到def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)方法,找到和SPP在一个括号里的if m in ,添加到后面。
在这里插入图片描述

if m in (Classify, Conv, ConvTranspose, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, Focus,
                 BottleneckCSP, C1, C2, C2f, C3, C3TR, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x, RepC3,
                 SimSPPF):

2.4 yaml文件修改(ultralytics/cfg/models/v8/yolov8n.yaml)

只需要把yaml的SPPF改为SimSPPF即可,这里推荐复制一份yaml文件,yolov8n-SimSPPF即可,记得训练的时候使用改了的这个网络结构。
在这里插入图片描述

3.其他常见金字塔结构代码

修改方式基本相同,下面帖子是常见特征金字塔的代码实现
点击此帖

  • 13
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
YOLOv8SPPF是基于YOLOv8SPPF改进本。SPPF是指空间金字塔池化(Spatial Pyramid Pooling with Filter),它是在YOLOv5中引入的一种特征提取方法。相比于之前的本,YOLOv8SPPF在网络结构和特征提取方面进行了改进。 首先,YOLOv8SPPF采用了PAN-FPN的思想。PAN-FPN是一种特征金字塔网络结构,可以在不同尺度上提取特征,从而提高目标检测的准确性。不过,与YOLOv5相比,YOLOv8SPPF删除了PAN-FPN上采样阶段中的卷积结构,并将C3模块替换为了C2f模块。 此外,YOLOv8SPPF还引入了其他的改进点。具体来说,它使用了ASPP(Atrous Spatial Pyramid Pooling)和RFB(Receptive Field Block)等模块来增强特征提取能力。同时,它采用了SPPCSPC 1.3 PAN-FPN等相关的改进方法,以进一步提高检测性能。 总结而言,YOLOv8SPPF是基于YOLOv8SPPF改进本,通过引入PAN-FPN思想和其他的改进方法,提高了目标检测的准确性和特征提取能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【目标检测】YOLOv8学习记录](https://blog.csdn.net/qq_43471945/article/details/129009099)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [YOLOv8 从环境搭建到推理训练](https://blog.csdn.net/weixin_61988885/article/details/129421538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有趣的野鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值