1,本文介绍
SEAM(Spatially Enhanced Attention Module)是一种专门设计用来改善遮挡情况下的识别性能的注意力机制。面对遮挡问题时,特征的响应可能会受到显著影响,从而影响识别准确性。SEAM 模块的核心目标是通过增强未遮挡区域的特征响应,来弥补遮挡区域的响应损失。它通过学习遮挡和未遮挡之间的关系,动态调整特征图中的关注点,使模型能够更有效地处理被遮挡的信息。具体来说,SEAM 结合空间注意力和特征增强机制,通过关注未遮挡区域的重要性,并改善整体特征表示,提升物体遮挡情况下的检测效果。这种方法不仅改善了遮挡情况下的识别精度,还提高了对复杂场景中特征的理解能力。
本文将讲解如何将SEAM融合进yolov8
话不多说,上代码!
2, 将SEAM融合进yolov8
2.1 步骤一
找到如下的目录'ultralytics/nn/modules',然后在这个目录下创建一个seam.py文件,文件名字可以根据你自己的习惯起,然后将seam的核心代码复制进去
import torch
import torch.nn as nn
__all__ = ['SEAM', 'MultiSEAM']
class Residual(nn.Module):
def __init__(self, fn):
super(Residual, self).__init__()
self.fn = fn
def forward(self, x):
return self.fn(x) + x
class SEAM(nn.Module):
def __init__(self, c1, n=1, reduction=16):
super(SEAM, self).__init__()
c2 = c1
self.DCovN = nn.Sequential(
# nn.Conv2d(c1, c2, kernel_size=3, stride=1, padding=1, groups=c1),
# nn.GELU(),
# nn.BatchNorm2d(c2),
*[nn.Sequential(
Residual(nn.Sequential(
nn.Conv2d(in_channels=c2, out_channels=c2, kernel_size=3, stride=1, padding=1, groups=c2),
nn.GELU(),
nn.BatchNorm2d(c2)
)),
nn.Conv2d(in_channels=c2, out_channels=c2, kernel_size=1, stride=1, padding=0, groups=1),
nn.GELU(),
nn.BatchNorm2d(c2)
) for i in range(n)]
)
self.avg_pool = torch.nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(c2, c2 // reduction, bias=False),
nn.ReLU(i