🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
你好,我是@努力的小巴掌
之前用baseline跑了yolov8。
为了提升性能,我们需要对yolov8进行优化。
本次的优化,我们从增加注意力机制开始。
🚀CA:注意力机制
增强yolov8对于小目标的识别,加入CA机制。
论文是这样说的:
CA(Hou et al., 2021)机制:“该机制可以同时捕获远处的空间和通道信息,显着提高模型针对复杂情况准确定位和识别目标物体的能力”
“CA机制纳入YOLOv8的主干网络中,并与C2f模块相结合,将C2f模块重新设计为C2f_CA,可用于替换网络中原有的C2f模块。”
🚀优化步骤
一、增加CA注意力机制模块到conv.py里面
CA机制的代码
#CA注意力机制
class h_sigmoid(nn.Module):def __init__(self, inplace=True):super(h_sigmoid, self).__init__()self.relu = nn.ReLU6(inplace=inplace)def forward(self, x):return self.relu(x + 3) / 6
class h_swish(nn.Module):def __init__(self, inplace=True):super(h_swish, self).__init__()self.sigmoid = h_sigmoid(inplace=inplace)def forward(self, x):return x * self.sigmoid(x)class CoordAtt(nn.Module):def __init__(self, inp, reduction=32):super(CoordAtt, self).__init__()self.pool_h = nn.AdaptiveAvgPool2d((None, 1))self.pool_w = nn.AdaptiveAvgPool2d((1, None))mip = max(8, inp // reduction)self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0)self.bn1 = nn.BatchNorm2d(mip)self.act = h_swish()self.conv_h = nn.Conv2d(mip, inp, kernel_size=1, stride=1, padding=0)self.conv_w = nn.Conv2d(mip, inp, kernel_size=1, stride=1, padding=0)def forward(self, x):identity = xn, c, h, w = x.size()#c*1*Wx_h = self.pool_h(x)#c*H*1