YOLOv5、YOLOv8改進:S2注意力機制

目錄

1.簡介

2.YOLOv5改進

2.1增加以下S2-MLPv2.yaml文件

2.2common.py配置

2.3yolo.py配置


1.簡介

?S2-MLPv2注意力機制

請添加圖片描述

?

最近,出現了基于 MLP 的視覺主干。與 CNN 和視覺Transformer相比,基于 MLP 的視覺架構具有較少的歸納偏差,在圖像識別方面實現了有競爭力的性能。其中,spatial-shift MLP (S2-MLP),采用直接的空間位移操作,取得了比包括 MLP-mixer 和 ResMLP 在內的開創性工作更好的性能。使用具有金字塔結構的較小補丁,視覺置換器 (ViP) 和Global Filter Network (GFNet) 實現了比 S2-MLP 更好的性能。

在本文中,我們改進了 S2-MLP 視覺主干。我們沿通道維度擴展特征圖,并將擴展后的特征圖分成幾個部分。我們對分割部分進行不同的空間移位操作。

本文對空間移位MLP (S2-MLP)模型進行了改進,提出了S2-MLPv2模型。將feature map進行擴展,并將擴展后的feature map分為三部分。它將每個部分單獨移動,然后通過split-attention融合分開的特征圖。同時,我們利用層次金字塔來提高其建模細粒度細節的能力,以獲得更高的識別精度。在沒有外部訓練數據集的情況下,采用224×224的images,我們的s2-mlv2-medium模型在ImageNet1K數據集上取得了83.6%的top-1準確率,這是目前基于MLP的方法中最先進的性能。同時,與基于transformer的方法相比,我們的S2-MLPv2模型在不需要自我注意的情況下,參數更少,達到了相當的精度。

? ? ? ? 與基于MLP的先驅作品如MLP-Mixer、ResMLP以及最近類似MLP的模型如Vision Permutator和GFNet相比,空間移位MLP的另一個重要優勢是,空間移位MLP的形狀對圖像的輸入尺度是不變的。因此,經過特定尺度圖像預訓練的空間移位MLP模型可以很好地應用于具有不同尺寸輸入圖像的下游任務。未來的工作將致力于不斷提高空間移位MLP體系結構的圖像識別精度。一個有希望且直接的方向是嘗試更小尺寸的patch和更高級的四層金字塔,如CycleMLP和AS-MLP,以進一步減少FLOPs和縮短基于transformer模型之間的識別差距。
?

?S2注意力機制(S2 Attention Mechanism)是一種用于序列建模和注意力機制改進的方法,特別在自然語言處理(NLP)領域中得到廣泛應用。它是對傳統的自注意力機制(self-attention)進行改進,旨在提高序列中不同位置之間的關聯性建模能力。

  1. 自注意力機制回顧: 自注意力機制是一種用于處理序列數據的方法,最早在Transformer模型中提出并廣泛用于NLP任務中。在自注意力機制中,序列中的每個位置都可以與其他所有位置進行交互,以便捕獲位置之間的關系。然而,這種全局的交互可能會導致計算復雜度的增加,并且可能過于強調距離較近的位置。

  2. S2注意力機制的改進: S2注意力機制引入了一種分段結構,將序列分為不同的段(segments)。每個段內的位置之間可以進行交互,但不同段之間的交互被限制。這種分段結構在捕獲長距離依賴關系時更加高效,因為不同段之間的關聯性通常較弱。

  3. 注意力計算: 在S2注意力中,注意力權重的計算仍然涉及對查詢(query)、鍵(key)和值(value)的操作。不同之處在于,每個段的注意力計算是獨立的,而不同段之間的注意力權重設為固定值(通常為0)。

  4. 優勢與應用: S2注意力機制的主要優勢是在捕獲序列中的長距離依賴關系時表現更加高效。這在處理長文本或長序列時特別有用,可以減少計算成本,同時提高建模性能。S2注意力機制在機器翻譯、文本生成、命名實體識別等NLP任務中都有應用,以更好地處理長文本的關系建模。

2.YOLOv5改進

2.1增加以下S2-MLPv2.yaml文件

# parameters
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters
nc: 80  # 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- [30,61, 62,45, 59,119]  # P4/16- [116,90, 156,198, 373,326]  # P5/32# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32[-1, 3, C3, [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)[-1, 1, S2Attention, [1024]], #修改[[17, 20, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)]

2.2common.py配置

./models/common.py文件增加以下模塊

import numpy as np
import torch
from torch import nn
from torch.nn import init# https://arxiv.org/abs/2108.01072
def spatial_shift1(x):b,w,h,c = x.size()x[:,1:,:,:c//4] = x[:,:w-1,:,:c//4]x[:,:w-1,:,c//4:c//2] = x[:,1:,:,c//4:c//2]x[:,:,1:,c//2:c*3//4] = x[:,:,:h-1,c//2:c*3//4]x[:,:,:h-1,3*c//4:] = x[:,:,1:,3*c//4:]return xdef spatial_shift2(x):b,w,h,c = x.size()x[:,:,1:,:c//4] = x[:,:,:h-1,:c//4]x[:,:,:h-1,c//4:c//2] = x[:,:,1:,c//4:c//2]x[:,1:,:,c//2:c*3//4] = x[:,:w-1,:,c//2:c*3//4]x[:,:w-1,:,3*c//4:] = x[:,1:,:,3*c//4:]return xclass SplitAttention(nn.Module):def __init__(self,channel=512,k=3):super().__init__()self.channel=channelself.k=kself.mlp1=nn.Linear(channel,channel,bias=False)self.gelu=nn.GELU()self.mlp2=nn.Linear(channel,channel*k,bias=False)self.softmax=nn.Softmax(1)def forward(self,x_all):b,k,h,w,c=x_all.shapex_all=x_all.reshape(b,k,-1,c) a=torch.sum(torch.sum(x_all,1),1) hat_a=self.mlp2(self.gelu(self.mlp1(a))) hat_a=hat_a.reshape(b,self.k,c) bar_a=self.softmax(hat_a) attention=bar_a.unsqueeze(-2) out=attention*x_all out=torch.sum(out,1).reshape(b,h,w,c)return outclass S2Attention(nn.Module):def __init__(self, channels=512 ):super().__init__()self.mlp1 = nn.Linear(channels,channels*3)self.mlp2 = nn.Linear(channels,channels)self.split_attention = SplitAttention()def forward(self, x):b,c,w,h = x.size()x=x.permute(0,2,3,1)x = self.mlp1(x)x1 = spatial_shift1(x[:,:,:,:c])x2 = spatial_shift2(x[:,:,:,c:c*2])x3 = x[:,:,:,c*2:]x_all=torch.stack([x1,x2,x3],1)a = self.split_attention(x_all)x = self.mlp2(a)x=x.permute(0,3,1,2)return x

2.3yolo.py配置

在 models/yolo.py文件夾下

定位到parse_model函數中,新增以下代碼

elif m is S2Attention:c1, c2 = ch[f], args[0]if c2 != no:c2 = make_divisible(c2 * gw, 8)

以上就修改完成了

又遇到的問題歡迎評論區留言討論

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42714.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42714.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42714.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LVS-DR+keepalived實現高可用負載群集

VRRP 通信原理: VRRP就是虛擬路由冗余協議,它的出現就是為了解決靜態路由的單點故障。 VRRP是通過一種競選的一種協議機制,來將路由交給某臺VRRP路由。 VRRP用IP多播的方式(多播地址224.0.0.18)來實現高可用的通信&…

基于STM32+OneNet設計的物聯網智慧路燈

一、前言 近年來,構筑智慧城市、推動城鎮發展被國家列入重要工作范疇。發布的《超級智慧城市報告》顯示,全球已啟動或在建的智慧城市有1000多個,中國在建500個,遠超排名第二的歐洲(90個)。從在建智慧城市的…

(五)Unity開發Vision Pro——FAQ

常見問題 (FAQ) 1.問:我看到在visionOS 模擬器中運行的結果與在硬件上運行的結果不同 請注意,在模擬器中運行時,某些特定于硬件的功能不可用 - 最明顯的是 AR 數據。這可能意味著 VisionOS 模擬器中的模擬結果可能與 Vision Pro 耳機上的模…

Android oaid

官方GitHub地址 https://github.com/gzu-liyujiang/Android_CN_OAID 生成和用途介紹 https://www.jianshu.com/p/1c7ef27d6db4 圖片來源于上述網站 其他關于id的介紹 https://www.cnblogs.com/chenKnowledgeConllection/p/17380960.html https://zhuanlan.zhihu.com/p/55…

微信小程序拉起支付報: 調用支付JSAPI缺少參數: total_fee

1. 調用支付JSAPI缺少參數: total_fee 2. 檢查返回給前端調起支付的參數是否正確 一開始是params.put("package", prepay_id); 回來改回params.put("package", "prepay_id"prepay_id);

leetcode 415.字符串相加

?? 題目描述 🌟 leetcode鏈接:https://leetcode.cn/problems/add-strings/description/ ps: 從兩個字符串的末尾開始遍歷,依次相加,若大于等于 10 則使用一個變量記錄進位,遍歷的時候若兩個字符串其中一…

算法通關村——不簡單的字符串轉換問題

1. 轉換成小寫字母 給你一個字符串 s ,將該字符串中的大寫字母轉換成相同的小寫字母,返回新的字符串。 轉換成小寫字母 1.1 利用ASCII 首先需要直到常見的ASCII值 a-z: 97-122 A-Z: 65-90 0-9: 48-57 只需要將這個字符串先轉換成字符,然后…

ASR(自動語音識別)任務中的LLM(大語言模型)

一、LLM大語言模型的特點 二、大語言模型在ASR任務中的應用 淺度融合 淺層融合指的是LLM本身并沒有和音頻信息進行直接計算。其僅對ASR模型輸出的文本結果進行重打分或者質量評估。 深度融合 LLM與ASR模型進行深度結合,統一語音和文本的編碼空間或者直接利用ASR…

OKCC在系統安全方面做了哪些措施?

語音通信行業,運營者普遍比較關心的問題是,運營風險如何控制?運營安全如何保證?OKCC呼叫中心又有那些風控措施來保證運營安全。 當前階段,語音通信運營,最主要的風險主要包括以下幾個方面: 一、…

無涯教程-Perl - wait函數

描述 該函數等待子進程終止,返回已故進程的進程ID。進程的退出狀態包含在$?中。 語法 以下是此函數的簡單語法- wait返回值 如果沒有子進程,則此函數返回-1,否則將顯示已故進程的進程ID Perl 中的 wait函數 - 無涯教程網無涯教程網提供描述該函數等待子進程終止,返回已故…

Three.js 實現模型材質局部輝光效果和解決輝光影響場景背景圖顯示的問題

1.Three.js 實現模型材質局部輝光效果 2.解決輝光效果影響場景背景圖顯示的問題 相關API的使用: 1. EffectComposer(渲染后處理的通用框架,用于將多個渲染通道(pass)組合在一起創建特定的視覺效果) 2. …

MME: A Comprehensive Evaluation Benchmark for Multimodal Large Language Models

本文也是LLM系列相關文章,針對《MME: A Comprehensive Evaluation Benchmark for Multimodal Large Language Models》的翻譯。 MME:一個多模態大型語言模型的綜合評估基準 摘要1 引言2 MME評估套件3 實驗4 分析5 結論 摘要 多模態大語言模型(MLLM&…

Java-運算符和控制語句(上)(基于c語言的補充)

算術運算符 關于求余 不管分子,分母是正還是負,對于分母,直接取正;對于分子若有負號,則先提取出來;剩下兩個正的分子分母運算;最后,若剛才的分子有負號,對最后的結果添加…

Java版 招投標系統簡介 招投標系統源碼 java招投標系統 招投標系統功能設計tbms

? 項目說明 隨著公司的快速發展,企業人員和經營規模不斷壯大,公司對內部招采管理的提升提出了更高的要求。在企業里建立一個公平、公開、公正的采購環境,最大限度控制采購成本至關重要。符合國家電子招投標法律法規及相關規范,以…

scala中json4s 使用詳解

預備知識 json4s的數據結構AST (Abstract Syntax Tree)。 sealed abstract class JValue case object JNothing extends JValue // zero for JValue case object JNull extends JValue case class JString(s: String) extends JValue case class JDouble(num: Double) extend…

arcgis--坐標系

1、arcgis中,投影坐標系的y坐標一定是7位數,X坐標有兩種:6位和8位。 6位:省略帶號,這是中央經線形式的投影坐標,一般投影坐標中會帶CM字樣;8位:包括帶號,一般投影坐標中…

數字化時代,數據倉庫和商業智能BI系統演進的五個階段

數字化在逐漸成熟的同時,社會上也對數字化的性質有了進一步認識。當下,數字化除了前邊提到的將復雜的信息、知識轉化為可以度量的數字、數據,在將其轉化為二進制代碼,引入計算機內部,建立數據模型,統一進行…

一鍵搭訕以及打招呼設置(swift)

項目描述:用戶通過打招呼設置錄制打招呼語音,添加打招呼文字,首頁feed頁面展示sayhi的小動畫,點開可查看將要搭訕的列表,選擇想要搭訕的用戶以及搭訕的文字和語音,也可隨機選擇文案、語音,未通過…

CAS 一些隱藏的知識,您了解嗎

目錄 ConcurrentHashMap 一定是線程安全的嗎 CAS 機制的注意事項 使用java 并行流 ,您要留意了 ConcurrentHashMap 在JDK1.8中ConcurrentHashMap 內部使用的是數組加鏈表加紅黑樹的結構,通過CASvolatile或synchronized的方式來保證線程安全的,這些原理…

TikTok或將于8月底關閉半閉環、速賣通或將推出“半托管”模式

《出海周報》是運營壇為外貿企業主和外貿人獨家打造的重要資訊欄目,聚焦企業出海、海外市場動態、海外監管政策等方面,以簡捷的方式,提升讀者獲取資訊的效率。 接下來運營壇為大家帶來第15期出海周報,快來看看這周國內外市場發生了…