爆改YOLOv8|利用SENetV1改进yolov8,暴力涨点

 1,本文介绍

本文介绍了 SENet(Squeeze-and-Excitation Networks)这一改进机制,它通过调整卷积网络中的通道关系来提升模型性能。SENet 并不是一个独立的网络模型,而是一个可与任何现有模型结合的模块,类似于通道型的注意力机制。SENet 的“挤压和激励”(Squeeze-and-Excitation)操作被作为一个单元嵌入到传统的卷积网络结构中,如残差单元(后文将提供修改后的代码,供直接使用)。这种方法能够增强模型对通道间关系的理解,提高特征表达能力,无需重新设计网络架构。因此,SENet 作为现有模型的改进和增强手段,经实测在大、中、小目标检测任务上均表现出显著的性能提升。

关于SENetV1的详细介绍可以看论文:https://arxiv.org/pdf/1709.01507.pdf

本文将讲解如何将SENetV1融合进yolov8

话不多说,上代码!

2, 将SENetV1融合进yolov8

2.1 步骤一

找到如下的目录'ultralytics/nn/modules',然后在这个目录下创建一个SENetV1.py文件,文件名字可以根据你自己的习惯起,然后将SENetV1的核心代码复制进去

import torch
from torch import nn
from .conv import Conv
class SELayerV1(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayerV1, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )
 
    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)
 
class Bottleneck(nn.Module):
    """Standard bottleneck."""
 
    def __init__(self, c1, c2, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值