YOLOv5改進(jìn)教程之添加注意力機(jī)制
本文主要給大家講解一下,如何在yolov5中添加注意力機(jī)制,
這里提供SE通道注意力的改進(jìn)方法,其他注意力的添加方法,大同小異
首先找到SE注意力機(jī)制的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注意力機(jī)制的程序,復(fù)制到models文件夾下面的common.py文件中
然后找到y(tǒng)olo.py,在這個文件中找到下面這一行

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

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

注意力機(jī)制也可以插在其他地方,只要注意把通道數(shù)對應(yīng)好就行
然后head部分也要進(jìn)行相應(yīng)的修改,因為我們多加了一層,所以需要保持head以及最后的輸出層不變就得稍微改一下head部分,同樣,注意力機(jī)制也可以放在head里面,跟加在backbone里面的方法相同。

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

因為我們把SE注意力機(jī)制插在第八層之后,所以原先的14層就變成了15層,同樣的,最后的輸出也需要把層數(shù)加一。
添加這些注意力機(jī)制是yolov5最基礎(chǔ)的改進(jìn),但是說實話,注意力機(jī)制可以添加在很多的地方,不一定會有效果,所以插在哪里效果最好就需要大家自行討論了。 注意力機(jī)制也有很多種,se注意力機(jī)制應(yīng)該是屬于最基礎(chǔ)的通道注意力了吧
總結(jié)
到此這篇關(guān)于YOLOv5改進(jìn)教程之添加注意力機(jī)制的文章就介紹到這了,更多相關(guān)YOLOv5添加注意力機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python企業(yè)編碼生成系統(tǒng)之主程序模塊設(shè)計詳解
這篇文章主要介紹了Python企業(yè)編碼生成系統(tǒng)之主程序模塊設(shè)計,包括初始化、界面與邏輯實現(xiàn)相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
python 讀寫、創(chuàng)建 文件的方法(必看)
下面小編就為大家?guī)硪黄猵ython 讀寫、創(chuàng)建 文件的方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
Pytorch數(shù)據(jù)讀取之Dataset和DataLoader知識總結(jié)
Dataset和DataLoader都是Pytorch里面讀取數(shù)據(jù)的工具.現(xiàn)在對這兩種工具做一個概括和總結(jié),對正在學(xué)習(xí)Pytorch的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Selenium+BeautifulSoup+json獲取Script標(biāo)簽內(nèi)的json數(shù)據(jù)
這篇文章主要介紹了Selenium+BeautifulSoup+json獲取Script標(biāo)簽內(nèi)的json數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

