首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >YOLO11-seg分割:SPPF_attention,重新设计加入注意力机制,助力分割

YOLO11-seg分割:SPPF_attention,重新设计加入注意力机制,助力分割

原创
作者头像
AI小怪兽
发布2024-10-23 09:06:52
发布2024-10-23 09:06:52
2.5K0
举报

💡💡💡本文原创自研创新改进:

优点:为了利用不同的池化核尺寸提取特征的方式可以获得更多的特征信息,提高网络的识别精度。

如何优化:在此基础上加入注意力机制,能够在不同尺度上更好的、更多的获取特征信息从而获取全局视角信息并减轻不同尺度大小所带来的影响

强烈推荐,适合直接使用,paper创新级别

💡💡💡本文内容:通过 SPPF_attention,重新设计加入注意力机制提升YOLO11-seg的分割能力

💡💡💡Mask mAP50 从原始的0.673 提升至0.693,实现暴力涨点

💡💡💡Mask mAP50 从原始的0.673 提升至0.677

1.YOLO11介绍

Ultralytics YOLO11是一款尖端的、最先进的模型,它在之前YOLO版本成功的基础上进行了构建,并引入了新功能和改进,以进一步提升性能和灵活性。YOLO11设计快速、准确且易于使用,使其成为各种物体检测和跟踪、实例分割、图像分类以及姿态估计任务的绝佳选择。

Segmentation 官方在COCO数据集上做了更多测试:

2.数据集介绍

道路裂纹分割数据集是一个全面的4029张静态图像集合,专门为交通和公共安全研究而设计。它非常适合自动驾驶汽车模型开发和基础设施维护等任务。该数据集包括训练、测试和验证集,有助于精确的裂缝检测和分割。

训练集3712张,验证集200张,测试集112张

标签可视化:

3.如何训练YOLO11-seg模型

3.1 修改 crack-seg.yaml

代码语言:javascript
复制
# Ultralytics YOLO 🚀, AGPL-3.0 license
# Crack-seg dataset by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/crack-seg/
# Example usage: yolo train data=crack-seg.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── crack-seg  ← downloads here (91.2 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:/ultralytics-seg/data/crack-seg # dataset root dir
train: train/images # train images (relative to 'path') 3717 images
val: valid/images # val images (relative to 'path') 112 images
test: test/images # test images (relative to 'path') 200 images

# Classes
names:
  0: crack

3.2 如何开启训练

代码语言:javascript
复制
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('ultralytics/cfg/models/11/yolo11-seg.yaml')
    #model.load('yolov8n.pt') # loading pretrain weights
    model.train(data='data/crack-seg.yaml',
                cache=False,
                imgsz=640,
                epochs=200,
                batch=16,
                close_mosaic=10,
                device='0',
                optimizer='SGD', # using SGD
                project='runs/train',
                name='exp',
                )

3.3 训练结果可视化

代码语言:javascript
复制
YOLO11-seg summary (fused): 265 layers, 2,834,763 parameters, 0 gradients, 10.2 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)     Mask(P          R      mAP50  mAP50-95): 100%|██████████| 7/7 [00:07<00:00,  1.06s/it]
                   all        200        249       0.83      0.784      0.816      0.632      0.746      0.707      0.673      0.228

Mask mAP50 为 0.673

MaskPR_curve.png

BoxPR_curve.png

3.4 SPPF_attention,重新设计加入注意力机制

YOLOv5最初采用SPP结构在v6.0版本(repo)后开始使用SPPF,主要目的是融合更大尺度(全局)信息,对每个特征图,使用三种不同尺寸(5×5、9×9、13×13)的池化核进行最大池化,分别得到预设的特征图尺寸,最后将所有特征图展开为特征向量并融合,过程如下图所示。 YOLOV8使用SPPF

SPPF顾名思义,就是为了保证准确率相似的条件下,减少计算量,以提高速度,使用3个5×5的最大池化,代替原来v5之前的5×5、9×9、13×13最大池化。使用SPPF的目的是为了利用不同的池化核尺寸提取特征的方式可以获得更多的特征信息,提高网络的识别精度。

左边是SPP,右边是SPPF。

SPPF源代码

代码语言:javascript
复制
class SPPF(nn.Module):
    """Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher."""

    def __init__(self, c1, c2, k=5):  # equivalent to SPP(k=(5, 9, 13))
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * 4, c2, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)

    def forward(self, x):
        """Forward pass through Ghost Convolution block."""
        x = self.cv1(x)
        y1 = self.m(x)
        y2 = self.m(y1)
        return self.cv2(torch.cat((x, y1, y2, self.m(y2)), 1))

3.5 如何创新优化SPPF

优点:为了利用不同的池化核尺寸提取特征的方式可以获得更多的特征信息,提高网络的识别精度。

如何优化:在此基础上加入注意力机制,能够在不同尺度上更好的、更多的获取特征信息,从而提高网络的识别精度。

​​

代码语言:javascript
复制
    YOLO11-seg-SPPF_attention summary (fused): 274 layers, 3,361,101 parameters, 0 gradients, 10.6 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)     Mask(P          R      mAP50  mAP50-95): 100%|██████████| 7/7 [00:08<00:00,  1.23s/it]
                   all        200        249       0.89      0.777      0.844      0.659      0.799      0.679      0.693      0.232

Mask mAP50 从原始的0.673 提升至0.693,实现暴力涨点

MaskPR_curve.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.YOLO11介绍
  • 2.数据集介绍
  • 3.如何训练YOLO11-seg模型
    • 3.1 修改 crack-seg.yaml
    • 3.2 如何开启训练
    • 3.3 训练结果可视化
    • 3.4 SPPF_attention,重新设计加入注意力机制
    • 3.5 如何创新优化SPPF
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档