介绍
本次我们在卷积层添加SE注意力模块来改进YOLOv5算法,同时用FReLU替换SILU激活函数,并通过添加跳转连接来改进PANet特征融合网络。
为了本次实验的对比性,我使用Faster-RCNN、YOLOv4和YOLOv5三种算法。
Faster-RCNN目前是一种优秀的两级检测算法,而YOLOv4和YOLOv5在单级检测算法中表现良好。
本文通过在骨干网络的基卷积块中加入SE注意机制来改进YOLOv5网络,以增加图像的特征提取,并用FReLU激活函数代替基卷积块中的SiLU激活函数以增加语义特征提取。通过添加跳转链路改进了特征融合网络PANet,使输出层不仅自下而上的获取特征融合中涉及的信息,而且保留了原始节点的未融合信息。通过改进的网络模型,我测试了数据集,并验证了我们的模型对现有模型 mAP 的改进。
YOLOv5网络模型改进
YOLOv5
YOLOv5算法是一种目标回归方法,检测过程是将图像划分为一定数量的网格,遍历整个图像一次,当网格中检测到目标时,根据当前网格的前一帧绘制一个预测框,并直接预测结果。YOLOv5算法使用CSPDarknet53网络作为特征提取的骨干网络,特征融合网络使用SPP和PANet组合。预测网络使用3个不同尺度的网络,分别对应13×13、26×26和52×52格网,检测大、中、小目标。
SE机制
SE模块主要由压缩和激励组成。SE是压缩和激励网络的缩写。注意机制很容易在计算机视觉中实现,并加载到网络模型中。
压缩和激励网络结构:
首先,通过全局池化对输入特征图进行处理,然后首先减小特征图的维数,然后增加两个全连接层,最后通过sigmoid激活函数获得相应的权重。可以对不同重要性的特征图执行相应的处理。
SE模块流程:
SE注意力模块:
class SE(nn.Module):
def __init__(self, c1, c2, ratio=16):
super(SE, self).__init__()
#c*1*1
self.avgpool = nn.AdaptiveAvgPool2d(1)
self.l1 = nn.Linear(c1, c1 // ratio, bias=False)
self.relu = nn.ReLU(inplace=True)
self.l2 = nn.Linear(c1 // ratio, c1, bias=False)
self.sig = nn.Sigmoid()
def forward(self, x):
b, c, _, _ = x.size()
y = self.avgpool(x).view(b, c)
y = self.l1(y)
y = self.relu(y)
y = self.l2(y)
y = self.sig(y)
y = y.view(b, c, 1, 1)
return x * y.expand_as(x)
FReLU
将SiLU替换为FReLU,这是一种专用于视觉任务的激活函数,并增加了空间条件来扩展ReLU和PReLU,以增强激活空间的灵敏度,并显着改善图像视觉。FReLU提出的二维漏斗样激活函数,通过在维ReLU激活函数中加入漏斗条件T(X),将二维漏斗样激活函数扩展到二维。只引入少量的计算和过拟合风险来激活网络中空间不敏感的信息,以改善视觉任务。
表达式:F=max(x,T(x))
下图添加了 SE 和 FReLU 的 Covn 以及原始 Covn ;SE机制和FReLU激活函数层的结合提高了卷积神经网络中捕获空间相关性的效率。
FReLU激活函数:
# FReLU https://arxiv.org/abs/2007.11824
class FReLU(nn.Module):
def __init__(self, c1, k=3): # ch_in, kernel
super().__init__()
self.conv = nn.Conv2d(c1, c1, k, 1, 1, groups=c1, bias=False)
self.bn = nn.BatchNorm2d(c1)
def forward(self, x):
return torch.max(x, self.bn(self.conv(x)))
IM.PANet
通过添加跳转连接改进了PANet特征融合网络,使输出层不仅自下而上地获取特征融合中涉及的信息,而且保留了原始节点的未融合信息,减少了特征信息的丢失。增强的 PANet 网络结构我称之为 IM.PANet。
PANet 位于左侧,IM.PANet 位于右侧:
实验对比
评价标准
本文通过比较实验,使用mAP、Recall和Percision比较模型性能。
比较实验
我们使用最具代表性的两阶段目标检测算法Faster-RCNN,以及YOLOv4和YOLOv5与我们改进的YOLOv5进行比较实验
实验结果表明,改进的模型达到了0.739的最高映射,优于现有的检测算法。
消融研究
我对改进算法做了消融实验,分别在原来的YOLO5和YOLOv5的Covn中只添加了SENet模块,YOLOv5的Covn在添加IM.PANet的同时增加了SENet,我的模型是YOLOv5的Covn在FReLU上替换时增加了SENet和IM.PANet
实验结果表明,通过同时向YOLOv5添加3个改进点,Ours的MAP最高,达到73.9。
实验代码
链接:https://pan.baidu.com/s/1pSodMzbhRvHkeZ79_8Dhkg
提取码:xvw8