【YOLOv5/v7改進系列】替換激活函數為SiLU、ReLU、LeakyReLU、FReLU、PReLU、Hardswish、Mish、ELU等

一、導言

激活函數在目標檢測中的作用至關重要,它們主要服務于以下幾個關鍵目的:

  1. 引入非線性:神經網絡的基本構建塊(如卷積層、全連接層等)本質上是線性變換,而激活函數通過引入非線性,使得網絡能夠學習和表達更復雜、更豐富的數據特征。這對于目標檢測任務尤為重要,因為目標可能出現在圖像中的任何位置、大小和姿態,且彼此之間可能有重疊或遮擋,非線性表達能力可以幫助模型更好地理解和區分這些復雜的場景。

  2. 控制梯度流:激活函數的形狀影響著反向傳播過程中的梯度傳遞,這對于權重更新和學習過程至關重要。例如,ReLU及其變體(如Leaky ReLU、PReLU、FReLU等)通過在負值區域保持非零斜率,解決了傳統ReLU可能導致的“神經元死亡”問題,從而促進了深層網絡中的梯度流動。

  3. 增強模型表達能力:特定的激活函數能夠提升模型在特定任務上的表現。例如,FReLU(Funnel Activation Function)通過在激活階段整合空間信息,提高了模型的空間理解能力,這對于目標檢測這種需要精確定位的任務非常有利。

  4. 影響計算效率:不同的激活函數具有不同的計算復雜度。在實時目標檢測系統如YOLO系列中,選擇計算成本低且效果好的激活函數(如ReLU)對于保證模型的運行速度和資源效率是必要的。

  5. 輸出范圍調整:某些激活函數(如Sigmoid和Softmax)能夠將輸出限制在特定范圍內,這在輸出層特別有用,比如將網絡輸出轉化為概率值,便于進行目標類別預測。

綜上所述,激活函數不僅決定了神經網絡的學習能力,還在很大程度上影響了目標檢測模型的精度、訓練效率以及最終的檢測性能。因此,在設計目標檢測網絡時,精心選擇和設計激活函數是一個重要環節。

二、YOLO訓練中常見且有效的激活函數
  1. SiLU (Sigmoid Linear Unit): 也稱為Swish,是一種自適應激活函數。SiLU嘗試結合了線性變換和sigmoid函數的優點,能夠提升模型的非線性表達能力,同時緩解梯度消失問題。

  2. ReLU (Rectified Linear Unit): 是最常用的激活函數之一,當輸入為正時,輸出等于輸入;為負時,輸出為0。ReLU解決了sigmoid和tanh函數的梯度飽和問題,加速了神經網絡的訓練,但在負值區域梯度為0,可能導致“死亡ReLU”現象。

  3. Leaky ReLU: 為了解決ReLU在負值區域梯度消失的問題而提出,即使負輸入時函數也有非零斜率,幫助梯度流動。

  4. FReLU (Fractional ReLU): 是ReLU的一個變種,它引入了一個可學習的參數來調整負輸入部分的斜率,提供了比Leaky ReLU更靈活的調整能力。

  5. PReLU (Parametric ReLU): 類似于Leaky ReLU,適用于不同層可能需要不同負斜率的情況。

  6. Hardswish: 是MobileNetV3中引入的一種激活函數,試圖模仿Swish但計算成本更低。它在移動端設備上表現高效且性能良好。

  7. Mish: 由D. Misra提出,Mish結合了自我門控的性質和ReLU的簡單性,被發現能在多種任務上提高模型性能。

  8. ELU (Exponential Linear Unit): 目的是減少ReLU的偏差移位問題并加速學習過程。

  9. CELU (Continuously Differentiable Exponential Linear Unit): 是ELU的一個連續可微分版本,旨在保持ELU的優點同時確保所有點的導數存在,適合需要嚴格平滑性的應用。

  10. GELU (Gaussian Error Linear Unit): 形式較為復雜,與高斯分布的累積分布函數有關。GELU在Transformer等模型中表現優秀,因為它能更好地匹配神經網絡中權重初始化的分布。

  11. SELU (Scaled Exponential Linear Unit): 設計用于自歸一化神經網絡,SELU旨在確保網絡的輸出具有零均值和單位方差,從而簡化訓練過程中的歸一化需求。

需要注意的是,YOLOv7、YOLOv5項目采用的默認激活函數為SiLU,而YOLOv7-tiny項目采用的激活函數為LeakyReLU,ResNet系列采用的激活函數則為ReLU,選擇何種激活函數為自己的Baseline需要先查閱相關論文再下判斷,以此為改進的對照方可得出結果。

同時,YOLOv5/v7的激活函數一般在models/activations.py下

三、YOLOv7-tiny改進工作

了解二后,在YOLOv7項目文件下的models文件夾下的common.py,采用ctrl+F搜索如下代碼。

self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

將其替換為二的激活函數即可。

四、YOLOv7改進工作

了解二后,在YOLOv7項目文件下的models文件夾下的common.py,采用ctrl+F搜索如下代碼。

self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

將其替換為二的激活函數即可。

五、YOLOv5改進工作

了解二后,在YOLOv5項目文件下的models文件夾下的common.py,采用ctrl+F搜索如下代碼。

self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

將其替換為二的激活函數即可。

更多文章產出中,主打簡潔和準確,歡迎關注我,共同探討!

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

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

相關文章

urllib3 發起https請求時報錯 certificate verify failed

情況描述 近期需要訪問https的一個API接口同步數據,在辦公主機完成urllib3初步的測試以后,到測試環境驗證發現無法請求,報錯: 提示:解決辦法可以直接到第四節查看 一、提示 SSL 認證失敗 OpenSSL.SSL.Error: [(SSL …

保安維穩,四信以科技構筑高速公路安全智慧防線

近日,廣東梅大高速發生嚴重塌方事故,造成了嚴重的人員傷亡和財產損失。這一事件在公眾心中敲響了安全的警鐘,再次引起了公眾對于交通設施運營安全性的重點關注。 國務院安委會辦公室和國家防災減災救災委員會辦公室等主管機構先后印發緊急通知…

Spring Security整合Gitee第三方登錄

文章目錄 學習鏈接環境準備1. 搭建基本web應用引入依賴ThirdApp啟動類創建index頁面application.yml配置訪問測試 2. 引入security引入依賴ProjectConfig訪問測試 第三方認證簡介注冊gitee客戶端實現1引入依賴application.yml配置文件創建index.html頁面啟動類InfoControllerPr…

【數學建模】儲藥柜的設計

2014高教社杯全國大學生數學建模競賽D題目 題目描述 儲藥柜的結構類似于書櫥,通常由若干個橫向隔板和豎向隔板將儲藥柜分割成若干個儲藥槽(如圖1所示)。為保證藥品分揀的準確率,防止發藥錯誤,一個儲藥槽內只能擺放同一種藥品。藥品在儲藥槽…

Python閉包探索,釋放函數記憶的秘術

引言 hello,大家好,我是一點,專注于Python編程,如果你也對感Python感興趣,歡迎關注交流。 希望可以持續更新一些有意思的文章,如果覺得還不錯,歡迎點贊關注,有啥想說的,可…

docker搭建gitlab及默認密碼修改及配置修改

推薦官方文檔 https://docs.gitlab.com/17.0/ee/install/docker.html 我使用的是docker run的方式,官方文檔后面有docker-compose、swarm、k8s的部署文檔 版本說明 1:可以部署gitlab-ce社區版和gitlab-ee企業版,然后,鑒于是個人…

Mysql總結2

Mysql慢優化 在mysql中,long_query_time的值為10,當sql語句執行的時間超過這個數值時,則會被記錄到慢查詢日志中。 Mysql語句查詢流程 1、客戶端發送sql語句到服務端; 2、服務端查看是否打開了緩存,若緩存打開&…

AIGC繪畫設計基礎-建筑設計應用

一、AI及AIGC 對于AI大家都不陌生,但是AIGC這個概念好多人其實不大清楚。“AI”是指人工智能技術本身,而“AIGC”是指基于人工智能技術而生成的內容。 生成式人工智能——AIGC(Artificial Intelligence Generated Content)&…

近鄰算法詳解

近鄰算法(Nearest Neighbor Algorithm),也稱為K-近鄰算法(K-Nearest Neighbors,KNN),是一種基本的分類和回歸方法。它的工作原理非常直觀:通過測量不同特征點之間的距離來進行預測。…

使用CommandLine庫創建.NET命令行應用

CommandLine是一個.NET庫,用于創建命令行應用程序。它提供了一種簡單的方法來解析命令行參數,并且可以幫助您構建一個功能強大的命令行界面。在本文中,我們將介紹如何使用CommandLine庫創建.NET命令行應用程序。 1. 背景 在.NET開發中&#…

SpringFramework實戰指南

二、SpringFramework實戰指南 目錄 一、技術體系結構 1.1 總體技術體系1.2 框架概念和理解 二、SpringFramework介紹 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模塊2.3 SpringFramework 主要優勢 三、Spring IoC容器和核心概念 3.1 組件和組件管理概念3…

起底震網病毒的來龍去脈

2010年,震網病毒被發現,引起世界嘩然,在后續的10年間,陸陸續續有更多關于該病毒的背景和細節曝光。今年,《以色列時報》和《荷蘭日報》又披露了關于此事件的更多信息,基于這些信息,我們重新梳理…

優于InstantID!中山大學提出ConsistentID:可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像

給定一些輸入ID的圖像,ConsistentID可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像。效果看起來也是非常不錯。 相關鏈接 Code:https://github.com/JackAILab/ConsistentID Paper:https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

計算機畢業設計 | springboot養老院管理系統 老人社區管理(附源碼)

1,緒論 1.1 背景調研 養老院是集醫療、護理、康復、膳食、社工等服務服務于一體的綜合行養老院,經過我們前期的調查,院方大部分工作采用手工操作方式,會帶來工作效率過低,運營成本過大的問題。 院方可用合理的較少投入取得更好…

Python數據可視化(七)

繪制 3D 圖形 到目前為止,我們一直在討論有關 2D 圖形的繪制方法和繪制技術。3D 圖形也是數據可視化的 一個很重要的應用方面,我們接下來就重點講解有關 3D 圖形的實現方法。繪制 3D 圖形通常需要導 入 mpl_toolkits 包中的 mplot3d 包的相關模塊&#x…

三、Gazebo中實現機器人仿真(小白上手)+ubuntu18.04

接上一篇文章 1、\導航 vim .bashrc \先采用Nanocar嘗試導航 關閉終端:roslaunch robot_navigation gmapping.launch simulation:true rosrun teleop_twist_keyboard teleop_twist_keyboard.py 重啟終端: cd catkin_ws source ./devel/setu…

護網經驗面試題目原版

文章目錄 一、護網項目經驗1.項目經驗**Hvv的分組和流程**有沒有遇到過有意思的邏輯漏洞?有沒有自己開發過武器/工具?有做過代碼審計嗎?有0day嗎有cve/cnvd嗎?有src排名嗎?有沒有寫過技戰法有釣魚經歷嗎?具…

【數據結構】哈夫曼樹和哈夫曼編碼

一、哈夫曼樹 1.1 哈夫曼樹的概念 給定一個序列,將序列中的所有元素作為葉子節點構建一棵二叉樹,并使這棵樹的帶權路徑長度最小,那么我們就得到了一棵哈夫曼樹(又稱最優二叉樹) 接下來是名詞解釋: 權&a…

VC++位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼

VC位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼 一、VC位移操作符<<和>>1、右位移操作符 >>&#xff1a;2、左位移操作符 <<&#xff1a; 二、邏輯驅動器插拔產生的掩碼 dbv.dbcv_unitmask 進行分析的…