目录
1.Yolov8介绍
2.野外火灾烟雾数据集介绍
3.CPCA介绍
3.1 CPCA加入到yolov8
4.训练结果分析
5.系列篇
1.Yolov8介绍
Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。
具体改进如下:
-
Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
-
PAN-FPN:毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块;
-
Decoupled-Head:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;
-
Anchor-Free:YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;
-
损失函数:YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;
-
样本匹配:YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式
框架图提供见链接:Brief summary of YOLOv8 model structure · Issue #189 · ultralytics/ultralytics · GitHub
2.野外火灾烟雾数据集介绍
数据集大小737张,train:val:test 随机分配为7:2:1,类别:smoke
3.CPCA介绍
论文:[2306.05196] Channel prior convolutional attention for medical image segmentation (arxiv.org)
摘要:本文提出了一种高效的通道先验卷积注意力(CPCA)方法,支持注意力权重在通道和空间维度上的动态分布。 通过采用多尺度深度卷积模块,可以有效地提取空间关系,同时保留通道先验。 CPCA具备聚焦信息渠道和重要区域的能力。 基于 CPCA 提出了一种用于医学图像分割的分割网络 CPCANet。 CPCANet 在两个公开可用的数据集上进行了验证。 通过与最先进的算法进行比较,CPCANet 提高了分割性能,同时需要更少的计算资源。
现有研究问题点:
虽然 CBAM 整合了通道注意和空间注意,但它在其输出特征的所有通道上强制执行一致的空间注意分布。相反,SE(图 1(a))只整合了通道注意,这限制了它选择重要区域的能力。
本文创新:
- 如图 1(c) 所示,作者提出了一种新的通道优先卷积注意力(Channel Prior Convolutional Attention,CPCA)方法,采用多尺度的深度可分离卷积模块构成空间注意力,可以在通道和空间维度上动态分配注意权重。
图3:通道先验卷积注意力(CPCA)的整体结构包括通道注意力和空间注意力的顺序放置。特征图的空间信息是由通道注意力通过平均池化和最大池化等操作来聚合的。 随后,空间信息通过共享 MLP(多层感知器)进行处理并添加以生成通道注意力图。 通道先验是通过输入特征和通道注意力图的元素相乘获得的。 随后,通道先验被输入到深度卷积模块中以生成空间注意力图。 卷积模块接收空间注意力图以进行通道混合。 最终,通过通道混合结果与通道先验的逐元素相乘,获得细化的特征作为输出。 通道混合过程有助于增强特征的表示
3.1 CPCA加入到yolov8
核心代码:
###################### CPCAAttention #### start by AI&CV ###############################
class CPCAChannelAttention(nn.Module):
def __init__(self, input_channels, internal_neurons):
super(CPCAChannelAttention, self).__init__()
self.fc1 = nn.Conv2d(in_channels=input_channels, out_channels=internal_neurons, kernel_size=1, stride=1, bias=True)
self.fc2 = nn.Conv2d(in_channels=internal_neurons, out_channels=input_channels, kernel_size=1, stride=1, bias=True)
self.input_channels = input_channels
def forward(self, inputs):
x1 = F.adaptive_avg_pool2d(inputs, output_size=(1, 1))
# print('x:', x.shape)
x1 = self.fc1(x1)
x1 = F.relu(x1, inplace=True)
x1 = self.fc2(x1)
x1 = torch.sigmoid(x1)
x2 = F.adaptive_max_pool2d(inputs, output_size=(1, 1))
# print('x:', x.shape)
x2 = self.fc1(x2)
x2 = F.relu(x2, inplace=True)
x2 = self.fc2(x2)
x2 = torch.sigmoid(x2)
x = x1 + x2
x = x.view(-1, self.input_channels, 1, 1)
return x
###################### CPCAAttention #### end by AI&CV ###############################
核心代码:YoloV8优化:通道优先卷积注意力,效果秒杀CBAM和SE等 | 即插即用系列_AI小怪兽的博客-CSDN博客
4.训练结果分析
训练结果如下:
原始mAP@0.5 0.839提升至0.890
YOLOv8_CPCAChannelAttention summary (fused): 171 layers, 3137427 parameters, 0 gradients, 7.8 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 67%|██████▋ | 2/3 [00:22<00:11, 11.59s/it]WARNING NMS time limit 1.500s exceeded
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 3/3 [00:28<00:00, 9.40s/it]
all 148 148 0.92 0.854 0.89 0.547
5.系列篇
1)基于Yolov8的野外烟雾检测
2)基于Yolov8的野外烟雾检测(2):多维协作注意模块MCA| 2023.9最新发布
3)基于Yolov8的野外烟雾检测(3):动态蛇形卷积,实现暴力涨点 | ICCV2023
4)基于Yolov8的野外烟雾检测(4):通道优先卷积注意力(CPCA) | 中科院2023最新发表