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

【目標(biāo)檢測實驗系列】YOLOv5模型改進:融入坐標(biāo)注意力機制CA,多維度關(guān)注數(shù)據(jù)特征,高效漲點!(內(nèi)含源代碼,超詳細改進代碼流程)

這篇具有很好參考價值的文章主要介紹了【目標(biāo)檢測實驗系列】YOLOv5模型改進:融入坐標(biāo)注意力機制CA,多維度關(guān)注數(shù)據(jù)特征,高效漲點?。▋?nèi)含源代碼,超詳細改進代碼流程)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? ? ?自我介紹:本人碩士期間全程放養(yǎng),目前成果:一篇北大核心CSCD錄用,兩篇中科院三區(qū)已見刊,一篇中科院四區(qū)在投。如何找創(chuàng)新點,如何放養(yǎng)過程厚積薄發(fā),如何寫中英論文,找期刊等等。本人后續(xù)會以自己實戰(zhàn)經(jīng)驗詳細寫出來,還請大家能夠點個關(guān)注和贊,收藏一下,謝謝大家。

1. 文章主要內(nèi)容

? ? ? ?本篇博客主要涉及坐標(biāo)注意力機制CA結(jié)構(gòu)融合到Y(jié)OLOv5模型中。(通讀本篇博客需要7分鐘左右的時間)

2. 詳細代碼改進流程

2.1 CA源代碼

? ? ? ?博主這里使用YOLOv5的C3結(jié)構(gòu)與坐標(biāo)注意力機制CA結(jié)合的新結(jié)構(gòu)C3CA,并提供的main函數(shù)的測試代碼。其源代碼如下:

import torch
import torch.nn as nn


from models.common import Conv, Bottleneck


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

class C3CA(nn.Module):
    def __init__(self, c1, c2, n=1, shortcut=True, g=1,
                 e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion #iscyy

        super(C3CA, self).__init__()
        c_ = int(c2 * e)  # hidden channels
        self.CA = CoordAtt(2 * c_)
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c1, c_, 1, 1)
        self.cv3 = Conv(2 * c_, c2, 1)  # act=FReLU(c2)
        # self.m = nn.Sequential(*[CB2d(c_) for _ in range(n)])
        self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)])

    def forward(self, x):
        out = torch.cat((self.m(self.cv1(x)), self.cv2(x)), dim=1)
        out = self.CA(out) # C3 concat之后加入CA
        out = self.cv3(out)
        return out

if __name__ == '__main__':
    input = torch.randn(512, 512, 7, 7)
    pna = C3CA(512, 512)
    output = pna(input)
    print(output.shape)

2.2 建立一個yolov5-C3CA.yaml文件

? ? ? ?注意到,這里博主直接使用C3CA代替Backbone部分的四個C3結(jié)構(gòu),另外注意nc改為自己數(shù)據(jù)集的類別數(shù)

# YOLOv5 ?? by Ultralytics, GPL-3.0 license

# Parameters
nc: 4  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8  小目標(biāo)
  - [30,61, 62,45, 59,119]  # P4/16 中目標(biāo)
  - [116,90, 156,198, 373,326]  # P5/32  大目標(biāo)

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2  output_channel, kernel_size, stride, padding
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3CA, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3CA, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3CA, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3CA, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
  
   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

2.3 將C3CA引入到y(tǒng)olo.py文件中

? ? ? ?在下圖的位置處,引入相關(guān)的類即可。
【目標(biāo)檢測實驗系列】YOLOv5模型改進:融入坐標(biāo)注意力機制CA,多維度關(guān)注數(shù)據(jù)特征,高效漲點?。▋?nèi)含源代碼,超詳細改進代碼流程),目標(biāo)檢測實驗系列,目標(biāo)檢測,YOLO,深度學(xué)習(xí),YOLOv5,人工智能,SCI,CA注意力

2.4 修改train.py啟動文件

? ? ? ?修改配置文件為yolov5-C3CA.yaml即可,如下圖所示:
【目標(biāo)檢測實驗系列】YOLOv5模型改進:融入坐標(biāo)注意力機制CA,多維度關(guān)注數(shù)據(jù)特征,高效漲點?。▋?nèi)含源代碼,超詳細改進代碼流程),目標(biāo)檢測實驗系列,目標(biāo)檢測,YOLO,深度學(xué)習(xí),YOLOv5,人工智能,SCI,CA注意力

3. 總結(jié)

? ? ? ?本篇博客主要介紹了CA注意力機制融合到Y(jié)OLOv5模型,多維度關(guān)注數(shù)據(jù)特征,使得模型高效漲點。另外,在修改過程中,要是有任何問題,評論區(qū)交流;如果博客對您有幫助,請幫忙點個贊,收藏一下;后續(xù)會持續(xù)更新本人實驗當(dāng)中覺得有用的點子,如果很感興趣的話,可以關(guān)注一下,謝謝大家啦!文章來源地址http://www.zghlxwxcb.cn/news/detail-808120.html

到了這里,關(guān)于【目標(biāo)檢測實驗系列】YOLOv5模型改進:融入坐標(biāo)注意力機制CA,多維度關(guān)注數(shù)據(jù)特征,高效漲點?。▋?nèi)含源代碼,超詳細改進代碼流程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包