国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

YOLOv8改進算法之添加CA注意力機制

這篇具有很好參考價值的文章主要介紹了YOLOv8改進算法之添加CA注意力機制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. CA注意力機制

CA(Coordinate Attention)注意力機制是一種用于加強深度學習模型對輸入數(shù)據(jù)的空間結(jié)構(gòu)理解的注意力機制。CA 注意力機制的核心思想是引入坐標信息,以便模型可以更好地理解不同位置之間的關(guān)系。如下圖:

ca注意力機制,YOLO改進系列,YOLO,算法,人工智能

1. 輸入特征: CA 注意力機制的輸入通常是一個特征圖,它通常是卷積神經(jīng)網(wǎng)絡(CNN)中的某一層的輸出,具有以下形狀:[C, H, W],其中:

  • C 是通道數(shù),表示特征圖中的不同特征通道。
  • H 是高度,表示特征圖的垂直維度。
  • W 是寬度,表示特征圖的水平維度。

2. 全局平均池化: CA 注意力機制首先對輸入特征圖進行兩次全局平均池化,一次在寬度方向上,一次在高度方向上。這兩次操作分別得到兩個特征映射:

  • 在寬度方向上的平均池化得到特征映射 [C, H, 1]
  • 在高度方向上的平均池化得到特征映射 [C, 1, W]。

這兩個特征映射分別捕捉了在寬度和高度方向上的全局特征。

3. 合并寬高特征: 將上述兩個特征映射合并,通常通過簡單的堆疊操作,得到一個新的特征層,形狀為 [C, 1, H + W],其中 H + W 表示在寬度和高度兩個方向上的維度合并在一起。

4. 卷積+標準化+激活函數(shù): 對合并后的特征層進行卷積操作,通常是 1x1 卷積,以捕捉寬度和高度維度之間的關(guān)系。然后,通常會應用標準化(如批量標準化)和激活函數(shù)(如ReLU)來進一步處理特征,得到一個更加豐富的表示。

5. 再次分開: 分別從上述特征層中分離出寬度和高度方向的特征:

  • 一個分支得到特征層 [C, 1, H]
  • 另一個分支得到特征層 [C, 1, W]。

6. 轉(zhuǎn)置: 對分開的兩個特征層進行轉(zhuǎn)置操作,以恢復寬度和高度的維度,得到兩個特征層分別為 [C, H, 1][C, 1, W]

7. 通道調(diào)整和 Sigmoid: 對兩個分開的特征層分別應用 1x1 卷積,以調(diào)整通道數(shù),使其適應注意力計算。然后,應用 Sigmoid 激活函數(shù),得到在寬度和高度維度上的注意力分數(shù)。這些分數(shù)用于指示不同位置的重要性。

8. 應用注意力: 將原始輸入特征圖與寬度和高度方向上的注意力分數(shù)相乘,得到 CA 注意力機制的輸出。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-712989.html

2. YOLOv8添加CA注意力機制

加入注意力機制,在ultralytics包中的nn包的modules里添加CA注意力模塊,我這里選擇在conv.py文件中添加CA注意力機制。

ca注意力機制,YOLO改進系列,YOLO,算法,人工智能

CA注意力機制代碼如下:

import torch
import torch.nn as nn
import torch.nn.functional as F


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 = x

        n, c, h, w = x.size()
        x_h = self.pool_h(x)
        x_w = self.pool_w(x).permute(0, 1, 3, 2)

        y = torch.cat([x_h, x_w], dim=2)
        y = self.conv1(y)
        y = self.bn1(y)
        y = self.act(y)

        x_h, x_w = torch.split(y, [h, w], dim=2)
        x_w = x_w.permute(0, 1, 3, 2)

        a_h = self.conv_h(x_h).sigmoid()
        a_w = self.conv_w(x_w).sigmoid()

        out = identity * a_w * a_h

        return out

CA注意力機制的注冊和引用如下:

?ultralytics/nn/modules/_init_.py文件中:

ca注意力機制,YOLO改進系列,YOLO,算法,人工智能

??ultralytics/nn/tasks.py文件夾中:

ca注意力機制,YOLO改進系列,YOLO,算法,人工智能

?在tasks.py中的parse_model中添加如下代碼:

        elif m in {CoordAtt}:
            args=[ch[f],*args]

新建相應的yolov8s-CA.yaml文件,代碼如下:

# Ultralytics YOLO ??, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1,1,CoordAtt,[]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1,1,CoordAtt,[]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1,1,CoordAtt,[]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 8], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 5], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 15], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[18, 21, 24], 1, Detect, [nc]]  # Detect(P3, P4, P5)

在main.py文件中進行訓練:

if __name__ == '__main__':

    # 使用yaml配置文件來創(chuàng)建模型,并導入預訓練權(quán)重.
    model = YOLO('ultralytics/cfg/models/v8/yolov8s-CA.yaml')
    # model.load('yolov8n.pt')
    model.train(**{'cfg': 'ultralytics/cfg/default.yaml', 'data': 'dataset/data.yaml'})

?

?

到了這里,關(guān)于YOLOv8改進算法之添加CA注意力機制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包