【YOLOv5進階】——引入注意力機制-以SE為例

聲明:筆記是做項目時根據B站博主視頻學習時自己編寫,請勿隨意轉載!

一、站在巨人的肩膀上

SE模塊即Squeeze-and-Excitation 模塊,這是一種常用于卷積神經網絡中的注意力機制!!

借鑒代碼的代碼鏈接如下:

注意力機制-SEicon-default.png?t=N7T8https://github.com/ZhugeKongan/Attention-mechanism-implementation

需要model里面的SE_block.py文件

# -*- coding: UTF-8 -*-
"""
SE structure"""import torch.nn as nn  # 導入PyTorch的神經網絡模塊  
import torch.nn.functional as F  # 導入PyTorch的神經網絡功能函數模塊  class SE(nn.Module):  # 定義一個名為SE的類,該類繼承自PyTorch的nn.Module,表示一個神經網絡模塊  def __init__(self, in_chnls, ratio):  # 初始化函數,in_chnls表示輸入通道數,ratio表示壓縮比率  super(SE, self).__init__()  # 調用父類nn.Module的初始化函數  # 使用AdaptiveAvgPool2d將輸入的空間維度壓縮為1x1,即全局平均池化  self.squeeze = nn.AdaptiveAvgPool2d((1, 1))  # 使用1x1卷積將通道數壓縮為原來的1/ratio,實現特征壓縮  self.compress = nn.Conv2d(in_chnls, in_chnls // ratio, 1, 1, 0)  # 使用1x1卷積將通道數擴展回原來的in_chnls,實現特征激勵  self.excitation = nn.Conv2d(in_chnls // ratio, in_chnls, 1, 1, 0)  def forward(self, x):  # 定義前向傳播函數  out = self.squeeze(x)  # 對輸入x進行全局平均池化  out = self.compress(out)  # 對池化后的輸出進行特征壓縮  out = F.relu(out)  # 對壓縮后的特征進行ReLU激活  out = self.excitation(out)  # 對激活后的特征進行特征激勵  # 對激勵后的特征應用sigmoid函數,然后與原始輸入x進行逐元素相乘,實現特征重標定  return x*F.sigmoid(out)

代碼后面有附注的注釋(GPT解釋的,很好用),理解即可。對于使用者來說,重要關注點還是它的輸入通道、輸出通道、需要傳入的參數等!!這個函數整體傳入in_chnls, ratio兩個參數。


二、開始修改網絡結構

與上節的C2f修改基本流程一致,但稍有不同

  • model/common.py加入新增的SE網絡結構,直接復制粘貼如下,這里加在了上節的C2f之前:

上面說到這個函數整體傳入in_chnls, ratio兩個參數!!


  • model/yolo.py設定網絡結構的傳參細節

上期的C2f模塊之所以可以參照原本存在的C3模塊屬性,是因為兩者相似,但這里的SE模塊就不可簡單的在C3x后加SE,而是需要在下面加入一段elif代碼:

         elif m is SE:c1 = ch[f]c2 = args[0]if c2 != no:  # if not outputc2 = make_divisible(c2 * gw, 8)args = [c1, args[1]]

當新引入的模塊中存在輸入輸出維度時,需要使用gw調整輸出維度!!


  • model/yolov5s.yaml設定現有模型結構配置文件

老樣子,復制一份新的配置文件命名為yolov5s-se.yaml。首先需要在backbone的最后加上SE模塊(相當于多了一層為第10層);其次考慮到backbone里多了一層,且在head里的輸入層來源不止上一層(-1)一個,所以輸入層來源大于等于第10層的都需要改為往后遞推+1層。下圖左邊為原始的yaml配置文件,右側為修改后的:

當yaml文件引入新的層后,需要修改模型結構的from參數(上期是將C3替換為C2f模塊,所以不涉及這一點)!!


  • train.py訓練時指定模型結構配置文件

這次將parse_model函數里的第二個參數cfg改為yolov5s-se.yaml即可,運行train.py開始訓練!!

可見訓練時第10層已經引入了SE注意力機制模塊:

100次迭代后結果如下,結果保存在runs\train\exp12文件夾,文件夾里有很多指標曲線可對比分析:


?往期精彩

STM32專欄(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/A3BJ2

OpenCV-Python專欄(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/jFJWe

AI底層邏輯專欄(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/6BVhM

機器學習專欄(免費)icon-default.png?t=N7T8http://t.csdnimg.cn/ALlLlSimulink專欄(免費)icon-default.png?t=N7T8http://t.csdnimg.cn/csDO4電機控制專欄(免費)icon-default.png?t=N7T8http://t.csdnimg.cn/FNWM7

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

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

相關文章

在C#中使用RabbitMQ做個簡單的發送郵件小項目 _

前言 好久沒有做項目了,這次做一個發送郵件的小項目。發郵件是一個比較耗時的操作,之前在我的個人博客里面回復評論和友鏈申請是會通過發送郵件來通知對方的,不過當時只是簡單的進行了異步操作。那么這次來使用RabbitMQ去統一發送郵件&#x…

vue中路由來回切換頁面直接卡死

今天發現一個很嚴重的問題,項目好不容易做好了,結果頁面多了,切換之后卡死。頁面所有的交互效果都失效了。 排查了許久的錯誤原因最后發現原來是路由名稱重復了。 如上圖當頁面跳轉到riskdetails詳細頁面之后,框架則被這個詳情頁…

隨機森林R語言預測工具

隨機森林(Random Forest)是一種基于決策樹的集成學習方法,它通過構建多個決策樹并集成它們的預測結果來提高預測的準確性。在R語言中,我們可以使用randomForest包來構建和訓練隨機森林模型。以下是對隨機森林的詳細介紹以及使用R語…

java高仿真數據生成器-需要的拿去

java高仿真數據生成器源碼-需要的拿去 nit-random-tools 介紹:高仿真數據生成器 逆天開源 java 證號碼, 姓名,職業, 日期,手機號 生成器 功能列表 編號功能描述class1號 生成器NitIdcardGenerator2姓名 生成器NitChineseNameGenerator3職…

node.lib下載失敗,手動下載并配置

在無網絡環境,或者網絡不好的環境,node.lib會下載失敗,此時可手動下載并進行配置。 我們以 node16.17.0 為例: 下載地址 分別下載node.lib和headers https://registry.npmmirror.com/-/binary/node/v16.17.0/win-x64/node.lib…

目標檢測算法的技術革新與應用案例

引言 目標檢測作為計算機視覺領域中的一項關鍵技術,近年來取得了顯著進展。從傳統的基于特征的方法到如今的深度學習算法,目標檢測技術在準確性、速度和魯棒性上均實現了大幅提升。本文將深入探討目標檢測算法的技術原理、發展歷程、最新進展以及實際應…

HarmonyOS--開發者證書考試地址

初級證書:華為開發者學堂 高級證書:華為開發者學堂 對應課程:華為開發者學堂

Linux rpm與yum

一、rpm包管理 rpm用于互聯網下載包的打包及安裝工具,它包含在某些Linux分發版中。它生成具有.RPM擴展名的文件。RPM是RedHat Package Manager (RedHat軟件包管理工具)的縮寫,類似windows的setup.exe,這一文件格式名稱雖然打上了R…

辦理北京公司注銷流程和步驟說明

公司的生命周期是多變的,有時候,業務可能會結束或者出現其他原因,需要注銷公司。注銷公司是一個復雜的法律過程,需要遵循一系列的步驟和提交特定的材料。下面我們將詳細介紹北京注銷公司的流程以及需要準備的材料,以幫…

《等保測評實戰指南:從評估到加固的全程解析》

在當今數字化時代,信息安全已成為企業生存與發展的基石。隨著網絡攻擊手段的不斷演變和復雜度的提升,信息系統等級保護(簡稱“等保”)作為國家信息安全保障體系的重要組成部分,其重要性日益凸顯。《等保測評實戰指南&a…

私有云統一多云管理平臺主要服務內容

私有云統一多云管理平臺,作為企業IT架構現代化的關鍵組成部分,旨在為企業提供高效、靈活、安全的云計算資源管理解決方案。這類平臺通過整合和優化不同云環境(包括私有云、公有云、混合云)的管理,幫助企業打破云孤島,實現資源的統…

clickhouse-client 數據導入導出

ClickHouse提供了clickhouse-client客戶端可用于數據的快速導入導出 官方文檔: Inserting Data from a File JSONL 格式 導出 clickhouse-client -h 127.0.0.1 --port 9000 -u default --password XXX -d default \--query "SELECT * from default.doc_typ…

【游戲引擎之路】登神長階(五)

5月20日-6月4日:攻克2D物理引擎。 6月4日-6月13日:攻克《3D數學基礎》。 6月13日-6月20日:攻克《3D圖形教程》。 6月21日-6月22日:攻克《Raycasting游戲教程》。 6月23日-6月30日:攻克《Windows游戲編程大師技巧》。 …

【Qwen2部署實戰】Qwen2初體驗:用Transformers打造智能聊天機器人

系列篇章💥 No.文章1【Qwen部署實戰】探索Qwen-7B-Chat:阿里云大型語言模型的對話實踐2【Qwen2部署實戰】Qwen2初體驗:用Transformers打造智能聊天機器人3【Qwen2部署實戰】探索Qwen2-7B:通過FastApi框架實現API的部署與調用4【Q…

從任意用戶注冊到任意密碼重置

寫在最前面一句話 To be or not to be ,it‘s a question . 哎呀,放錯臺詞了,應該是 true or false , 在最近的測試中遇到了一個很有趣的點 “將 false 改為true ”就可以成功繞過驗證碼了。 T rue or false ??? …

Oracle PL / SQL包

在實踐中,您很少創建獨立的存儲函數或過程。 相反,你會使用一個包。 包可以一起組織相關的功能和過程,例如創建庫,但在PL / SQL中,庫被稱為包。 PL / SQL包有兩個部分: 包規格包裝體 包規范是包的公共…

使用fabric8操作k8s

文章目錄 一、引入fabric包二、認證1、使用config文件認證2、使用oauthtoken認證 三、pod的查詢和遍歷四、命名空間的創建和刪除五、deployment的創建和刪除部分參數說明1、resourceRequirements2、containerPorts3、envVarList4、volumeMounts和volumeList5、nodeAffinity 六、…

「51媒體」企業舉行新聞發布會,如何邀請媒體到場報道

傳媒如春雨,潤物細無聲,大家好,我是51媒體網胡老師。 媒體宣傳加速季,100萬補貼享不停,一手媒體資源,全國100城線下落地執行。詳情請聯系胡老師。 企業舉行新聞發布會時,邀請媒體到場報道是一個…

MySQL常用操作命令大全

文章目錄 一、連接與斷開數據庫1.1 連接數據庫1.2 選擇數據庫1.3 斷開數據庫 二、數據庫操作2.1 創建數據庫2.2 查看數據庫列表2.3 刪除數據庫 三、表操作3.1 創建表3.2 查看表結構3.3 修改表結構3.3.1 添加列3.3.2 刪除列3.3.3 修改列數據類型 3.4 刪除表 四、數據操作4.1 插入…

day62--若依框架(基礎應用篇)

若依搭建 若依版本 官方 若依官方針對不同開發需求提供了多個版本的框架,每個版本都有其獨特的特點和適用場景: 前后端混合版本:RuoYi結合了SpringBoot和Bootstrap的前端開發框架,適合快速構建傳統的Web應用程序,其…