三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!

三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!


本文旨在让读者快速了解相关技术并运用,欢迎关注。

  1. 原文地址:《Squeeze-and-Excitation Networks》

  2. 官方代码地址: https://github.com/hujie-frank/SENet

  3. 视频教程:三分钟快速学习在yolov5中加入SE注意力机制!


1. SENet通道注意力导读

​ SENet是早期将注意力机制引入CNN的代表之一。通俗的讲,其通过 ( 通道 ) 挤压(Squeeze)和激励(Excitation)的方式得到一组1×1×C大小的权重矩阵,并使用权重矩阵对feature map的通道进行加权,使得含有重要信息的通道权重更大,从而提升模型的性能。
三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第1张图片


2. 代码

​ SE代码。

class SE(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SE, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(),
            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)

3. 使用教程

​ 以YOLOv5为例,加入SE注意力机制。

3.1 YOLOv5中的yaml配置文件解读

​ yaml文件保存了YOLOv5模型的必要信息,包括检测类别数(nc),模型深度(depth_multiple)、宽度(width_multiple),锚框(anchors大)小、模型的结构(backbone、head)等,如图1中所示。以backbone中第二层的结构[-1, 1, Conv, [128, 3, 2]], # 1-P2/4为例,列表中的第一个参数-1表示该层的输入来自上一层,第二个参数1表示该模块有1个,第三个参数Conv表示该模块为Conv(卷积)模块,第四个参数[128, 3, 2]为当前(Conv卷积)模块的参数,第一个参数表示输出的feature map通道数为128,3表示卷积核为3×3大小,2表示卷积的步长为2,如图1。

三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第2张图片

图1 yaml文件详解

3.2 YOLOv5中加入SE注意力机制

方式1

  • 注,单纯加入SE注意力机制推荐此方式。
  1. 打开YOLOv5-master工程下models->yolov5n.py(n、m、l、s、x皆可),在想要加入SE注意力的位置增添以下配置,并更改后续相关层配置,如图2。
[-1, 1, SE, [16]], # 2

三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第3张图片

图2 yaml配置更改
  1. 在YOLOv5-master工程下的models->commom.py中添加上文提到的SE的代码,如图3。
    三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第4张图片
图2 common.py文件更改
  1. 在YOLOv5-master工程下的models->yolo.py的前部加入from models.common import SE如图3。同时,在此文件的第407行加入图4中代码。
from models.common import SE
        elif m is SE:
            args.insert(0, ch[f])
            c2 = ch[f]

三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第5张图片

图3 yolo.py导包

三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第6张图片

图4 yolo.py插入代码
  1. 更改YOLOv5-master工程下train.py中的配置文件路径,如图5.

三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第7张图片

图5 train.py中cfg参数更改
  1. 检查终端是否打印SE层,如图6。

三分钟学会使用系列(YOLOv5)|SE注意力机制,涨点神器!_第8张图片

图6 打印结果

方式2

  • 注:自创模块推荐此方式

再鸽两天。— —


4. 文章详解

​ 有空了再写…


5. 参考

  1. 《Squeeze-and-Excitation Networks》

  2. https://github.com/hujie-frank/SENet


你可能感兴趣的:(深度学习,YOLO)