日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

YOLOv5改進教程之添加注意力機制_python

作者:weixin_47060902 ? 更新時間: 2022-08-18 編程語言

本文主要給大家講解一下,如何在yolov5中添加注意力機制,

這里提供SE通道注意力的改進方法,其他注意力的添加方法,大同小異

首先找到SE注意力機制的pytorch代碼

class SELayer(nn.Module):
    def __init__(self, c1, r=16):
        super(SELayer, self).__init__()
        self.avgpool = nn.AdaptiveAvgPool2d(1)
        self.l1 = nn.Linear(c1, c1 // r, bias=False)
        self.relu = nn.ReLU(inplace=True)
        self.l2 = nn.Linear(c1 // r, c1, bias=False)
        self.sig = nn.Sigmoid()
 
    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avgpool(x).view(b, c)
        y = self.l1(y)
        y = self.relu(y)
        y = self.l2(y)
        y = self.sig(y)
        y = y.view(b, c, 1, 1)
        return x * y.expand_as(x)

直接把SE注意力機制的程序,復(fù)制到models文件夾下面的common.py文件中

然后找到y(tǒng)olo.py,在這個文件中找到下面這一行

?然后把SE添加到這個注冊表里,

?直接在C3Ghost后面加上SELayer

然后是要修改yaml文件,對于SE這種即插即用的注意力機制,輸入和輸出的通道數(shù)相同,所以不會影響其他模塊的運行

注意力機制也可以插在其他地方,只要注意把通道數(shù)對應(yīng)好就行

然后head部分也要進行相應(yīng)的修改,因為我們多加了一層,所以需要保持head以及最后的輸出層不變就得稍微改一下head部分,同樣,注意力機制也可以放在head里面,跟加在backbone里面的方法相同。

這是原始的head部分,需要修改成下面這樣

因為我們把SE注意力機制插在第八層之后,所以原先的14層就變成了15層,同樣的,最后的輸出也需要把層數(shù)加一。

添加這些注意力機制是yolov5最基礎(chǔ)的改進,但是說實話,注意力機制可以添加在很多的地方,不一定會有效果,所以插在哪里效果最好就需要大家自行討論了。?注意力機制也有很多種,se注意力機制應(yīng)該是屬于最基礎(chǔ)的通道注意力了吧

總結(jié)

原文鏈接:https://blog.csdn.net/weixin_47060902/article/details/124900408

欄目分類
最近更新