損失函數篇

損失函數

1、邊界框損失函數/回歸損失函數bbox_loss

2、分類損失函數cls_loss

3、置信度損失函數obj_loss

YOLOv8損失函數

1、概述

通過YOLOv8-訓練流程-正負樣本分配的介紹,我們可以知道,經過預處理與篩選的過程得到最終的訓練數據:
a. 網絡輸出值:pred_scores[bx8400xcls_num]、pred_bboxes[bx8400x4]
b. 訓練標簽值:
target_scoresbx8400xcls_num,在計算損失時與預測結果pred_scores[bx8400xcls_num],計算交叉熵損失,該損失是對每個類別計算BCE Loss,因為類別預測采用的sigmoid分類器。
target_bboxesbx8400x4,在計算損失時,分別與預測的pred_bboxes計算Ciou Loss, 同時與pred_regs(預測的anchors中心點到各邊的距離)計算回歸DFL Loss。
c. 訓練mask值:fg_mask [bx8400],對8400個anchor進行正負樣本標記,計算損失過程中通過fg_mask篩選正負樣本。

2、損失函數
1、類別分類損失cls_loss

在yolov8中,類別損失最終采用的是交叉熵損失,該方法是我們非常熟知的,不再贅述。

代碼如下:
self.bce = nn.BCEWithLogitsLoss(reduction='none')
loss[1] = self.bce(pred_scores,target_scores).sum()/target_scores_sum

其中預測pred_scores: b x 8400 x cls_num; target_scores: b x 8400 x cls_num, 相當于對于每個box,其cls_num個分類都視為二分類,并進行交叉熵運算。

2、邊界框回歸損失bbox_loss

邊框回歸,采用的是DFL Loss + CIOU Loss
在這里插入圖片描述

target_bboxes /= self.stride_scales
loss[0],loss[2] = self.bbox_loss(pred_regs,pred_bboxes,self.anc_points,target_bboxes,target_scores,target_scores_sum,fg_mask)

DFL loss:

weight = torch.masked_select(target_scores.sum(-1), fg_mask).unsqueeze(-1)
# DFL loss
if self.use_dfl:target_ltrb = self.bbox2reg(anchor_points, target_bboxes, self.reg_max)loss_dfl = self._df_loss(pred_regs[fg_mask].view(-1, self.reg_max + 1), target_ltrb[fg_mask]) * weight

FasterRCNN損失函數

1、由于frcnn的網絡結構主要是兩個網絡組成,損失函數分為四個部分。

RPN分類損失:anchor是否為gt
RPN位置回歸損失:anchor位置微調
ROI分類損失:ROI所屬類別
ROI位置回歸損失:繼續對ROI位置微調
四個損失相加就是最后的損失,反向傳播,更新參數。

2、RPN損失

1、分類損失:cross_entropy
2、回歸損失:smooth L1 loss

3、ROI損失(與RPN類似)

1、分類損失
2、回歸損失

在Faster R-CNN模型中,有兩個主要的組件:區域提議網絡(Region Proposal Network, RPN) 和 Fast R-CNN檢測器。這兩個組件分別負責生成候選區域(region proposals)和最終的目標檢測,它們各自計算并優化不同的損失函數。

RPN的損失
RPN的目標是生成高質量的候選區域,它同時執行分類和回歸任務:

分類損失:RPN需要判斷每個錨框(anchor)是否包含目標物體,通常使用二元分類(前景vs背景)。損失函數通常采用交叉熵損失(Cross-Entropy Loss),有時也稱為Log Loss。對于每個錨框,如果它與任一GT框的重疊超過閾值,則認為它是正樣本(前景),否則為負樣本(背景)。
回歸損失:對于每個前景錨框,RPN需要預測邊界框的偏移量,以便更準確地定位目標。回歸損失通常采用Smooth L1損失(也稱為Huber損失),因為它對大的殘差(預測誤差)更為穩健。
ROI的損失(Fast R-CNN部分的損失)
Fast R-CNN檢測器接收RPN生成的候選區域,然后進行更詳細的分類和邊界框回歸:

分類損失:對于每個候選區域(Region of Interest, ROI),Fast R-CNN需要預測物體的類別。這同樣采用交叉熵損失,但是這次是多分類損失,因為它需要區分多個不同的物體類別。
回歸損失:類似于RPN的回歸損失,Fast R-CNN也需要優化邊界框的位置。然而,這里的邊界框回歸是針對每個類別進行的,因為不同類別的物體可能有不同的形狀和比例。這也通常使用Smooth L1損失。
總體損失
在訓練過程中,RPN的損失和Fast R-CNN部分的損失會被加權求和,形成總損失函數。這是因為兩個部分的目標是相關的,但又各自負責不同的任務。優化整個模型的總損失有助于同時改善區域提議的質量和最終的檢測精度。

損失函數的細節
RPN的分類損失通常使用Sigmoid函數進行二元分類,而Fast R-CNN的分類損失使用Softmax函數進行多分類。
RPN的回歸損失和Fast R-CNN的回歸損失都采用Smooth L1損失,但Fast R-CNN的回歸損失可能在每個類別上都有一個獨立的分支,這意味著它實際上是多個Smooth L1損失的組合。
通過這種方式,Faster R-CNN模型能夠在訓練過程中同時優化區域提議和最終的檢測結果,從而實現高效且準確的目標檢測。

YOLOv8和RT-DETR(Real-Time DETR)是兩種不同的目標檢測框架,它們在設計哲學和損失函數的選擇上存在一些關鍵的區別。下面我將概述這兩種模型的損失函數及其差異。

YOLOv8的損失函數

YOLOv8是YOLO系列的一個最新版本,它采用了以下幾種損失函數:

  1. VFL Loss (Variational Focal Loss):用于分類損失,它結合了交叉熵損失和focal loss的優點,以解決類別不平衡問題,尤其是當小目標數量較少時。

  2. CIOU Loss (Complete Intersection over Union Loss):用于邊界框回歸,CIOU Loss不僅考慮了IoU(交并比),還考慮了中心點的距離和長寬比,提供了更全面的邊界框回歸度量。

  3. DFL Loss (Distribution Focal Loss):用于邊界框坐標預測的細化,通過預測邊界框坐標的分布來進一步優化回歸。

RT-DETR的損失函數

RT-DETR是基于Transformer架構的實時目標檢測模型,它借鑒了DETR的設計,但進行了優化以實現更快的速度。其損失函數包括:

  1. 分類損失:通常使用交叉熵損失,用于預測每個檢測框的類別。

  2. 邊界框回歸損失:RT-DETR可能使用L1損失或GIoU(Generalized IoU)損失等,用于優化檢測框的位置。

  3. 匈牙利匹配算法:這是DETR及其衍生模型的核心特點之一,用于在沒有先驗假設的情況下匹配預測框和真實框,從而確定哪些預測框應該被哪些真實框監督。

區別

  1. 匹配機制:YOLOv8采用Task-Aligned匹配策略,而RT-DETR則依賴于匈牙利算法進行預測框與真實框的匹配。Task-Aligned匹配考慮了任務的特性來優化匹配過程,而匈牙利算法則是一種全局最優的匹配策略。

  2. 損失函數:YOLOv8使用了更復雜的損失函數組合,如VFL和CIOU Loss,旨在提高小目標檢測的性能和邊界框回歸的準確性。RT-DETR的損失函數相對簡單,更側重于速度和效率。

  3. 架構差異:YOLOv8繼承了YOLO的一貫風格,使用卷積神經網絡(CNN)進行特征提取和預測,而RT-DETR基于Transformer架構,這在模型結構和計算流程上有本質的不同。

這些區別反映了YOLOv8和RT-DETR在設計上的不同取向,YOLOv8追求在各種場景下的高性能,而RT-DETR則強調實時性和計算效率,兩者在特定的應用場景下各有優勢。

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

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

相關文章

微信小程序/uniapp:class和style不生效的問題

非常重要&#xff1a;小程序端不支持 classObject 和 styleObject 語法。 文檔&#xff1a;https://uniapp.dcloud.net.cn/tutorial/vue-basics.html#class-與-style-綁定 目錄 對象語法數組語法字符串語法computed其他方案 對象語法 <!-- class --> <view class&quo…

AI是在幫助開發者還是取代它們?

在這個科技日新月異的時代&#xff0c;人工智能&#xff08;AI&#xff09;已經滲透到了我們生活的方方面面&#xff0c;尤其是在軟件開發和編程領域&#xff0c;其影響更是深遠。AI技術的飛速發展引發了廣泛討論&#xff1a;它究竟是開發者們的得力助手&#xff0c;還是未來可…

2024 年最佳 Figma 字體

字體不僅僅是文本字符&#xff0c;它們還塑造了用戶體驗。從引導用戶瀏覽界面到傳達品牌個性&#xff0c;字體對于設計??至關重要。然而&#xff0c;找到適合您的網站或應用風格的完美字體可能具有挑戰性。 但不要害怕&#xff0c;我們會幫助您&#xff01;請繼續關注&#x…

C語言 指針和數組——指針的算術運算

目錄 指針的算術運算 指針加上一個整數 指針減去一個整數 指針相減 指針的關系比較運算 小結 指針的算術運算 指針加上一個整數 指針減去一個整數 指針相減 指針的關系比較運算 小結 ? 指針變量 – 指針類型的變量&#xff0c;保存地址型數據 ? 指針變量與其他類型…

負載均衡(服務器)

vi /etc/sysconfig/network-scripts/ifcfg-ens33 systemctl restart network 防火墻 systemctl stop firewalld systemctl disable firewalld vi /etc/selinux/config setenforce 0 yum install gcc gcc-c mkdir /lnmp cd /lnmp/ tar -zxvf zlib-1.2.12.tar.gz tar -zxv…

在Ubuntu 16.04上安裝和配置ownCloud的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 簡介 ownCloud 是一個文件共享服務器&#xff0c;允許您將個人內容&#xff08;如文檔和圖片&#xff09;存儲在一個類似 Dropbox 的集…

[C++][CMake][CMake基礎]詳細講解

目錄 1.CMake簡介2.大小寫&#xff1f;3.注釋1.注釋行2.注釋塊 4.日志 1.CMake簡介 CMake是一個項目構建工具&#xff0c;并且是跨平臺的 問題 – 解決 如果自己動手寫Makefile&#xff0c;會發現&#xff0c;Makefile通常依賴于當前的編譯平臺&#xff0c;而且編寫Makefile的…

vue的學習--day3

1、嘗試使用json文件模擬增刪改查 json server:準備一份自己的數據&#xff08;這里我用的是老師給的&#xff09;。 轉到d盤&#xff0c;然后打開json文件&#xff1a; 下面模擬增刪改查&#xff1a; 借助工具postman或apifox或apipost&#xff1a; 這里我下載了apifox&…

前端之CSS篇--面試題總結

CSS的特性&#xff1a;繼承性、層疊性、優先級 優先級&#xff1a;寫css樣式的時候&#xff0c;會給同一個元素添加多個樣式&#xff0c;此時誰的權重搞就顯示誰的樣式。 !important >行內樣式>id>類>標簽>全局選擇器 隱藏元素的方法 display:none 元素在頁面…

產品公告 | MemFire Cloud 現已支持微信授權登錄,為移動應用帶來更便捷的認證服務

MemFire Cloud推出的“開箱即用”的后端服務&#xff0c;提供了云數據庫、身份驗證與授權、云存儲、靜態托管、實時realtime、自動生成API等功能&#xff0c;本次升級新增/優化功能如下&#xff1a; 標題微信授權登錄&#xff08;移動應用&#xff09; 為了順應國內用戶的使用…

Python面試題:如何在 Python 中實現單例模式?

在 Python 中&#xff0c;有多種方法可以實現單例模式&#xff08;Singleton Pattern&#xff09;。單例模式是一種設計模式&#xff0c;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。以下是幾種常見的方法來實現單例模式&#xff1a; 方法一&#xff1a;使用類變…

Elasticsearch:Ingest architectures - 攝取架構

我們提供各種采集架構&#xff0c;以滿足各種用例和網絡配置的需求。 要將數據采集到 Elasticsearch&#xff0c;請使用最符合你的需求和用例的選項。對于許多用戶和用例來說&#xff0c;最簡單的方法是使用 Elastic Agent 采集數據并將其發送到 Elasticsearch。Elastic Agent…

深度學習——深度學習中感受野的計算

感受野 在卷積神經網絡&#xff08;CNN&#xff09;中&#xff0c;感受野&#xff08;Receptive Field&#xff09; 是一個非常重要的概念。它描述了網絡中某一層的輸出&#xff08;通常是特征圖上的一個像素點&#xff09;所對應的輸入圖像上的空間范圍。這個范圍代表了該輸出…

【CSS】了解grid-template-areas屬性

grid-template-areas 屬性是 CSS Grid 布局中一個非常有用的特性&#xff0c;它允許你通過命名網格區域&#xff08;grid areas&#xff09;來直接控制網格項目的布局。這個屬性通過引用網格容器內部網格項目的名稱來定義網格區域的布局&#xff0c;使得布局的設計更加直觀和易…

SARscape——地理編碼與輻射定標

目錄 一、算法原理1、概述2、參考文獻 二、軟件操作三、結果展示1、原始圖像2、處理結果 一、算法原理 1、概述 SAR系統觀測到的是電磁波入射地球表面后反射&#xff08;后向散射&#xff09;的雷達脈沖的強度和相位信息。這個信息編碼到雷達坐標系統下&#xff0c;即斜距坐標…

DataFrame 的常用操作

DataFrame是什么&#xff1f; DataFrame 是一種用于處理和分析數據的二維標簽數據結構。它類似于Excel中的電子表格或數據庫中的表格&#xff0c;由行和列組成。每個列可以是不同的數據類型&#xff08;如整數、浮點數、字符串等&#xff09;&#xff0c;并且可以進行各種數據操…

vb與數據庫編程

第一節 一、數據庫基礎知識 數據庫的概念 數據庫是按照數據結構來組織、存儲和管理數據的倉庫。 它可以存儲大量的數據,并提供高效的數據訪問和管理功能。 數據庫的類型 關系型數據庫:如 SQL Server、MySQL、Oracle 等,以表格形式存儲數據,通過關系(如主鍵和外鍵)來關聯不…

數據結構之二叉樹概念

數據結構之二叉樹 二叉樹簡介分類普通二叉樹平衡二叉樹滿二叉樹二叉搜索樹&#xff08;二叉排序樹、二叉查找樹&#xff09;&#xff0c;平衡二叉樹紅黑樹 B樹類型B樹&#xff08;B-樹、B_樹&#xff09;B樹B*樹 二叉樹 簡介 二叉樹(Binary Tree) &#xff1a;是一種非常重要…

RPC框架之Dubbo

Dubbo 是一款高性能、輕量級的開源 Java RPC&#xff08;Remote Procedure Call&#xff09;框架&#xff0c;由阿里巴巴集團于2011年發布。Dubbo 主要用于實現基于微服務架構的分布式應用&#xff0c;通過提供服務注冊與發現、負載均衡、容錯等功能&#xff0c;極大地簡化了服…

頭歌資源庫(19)在排序數組中查找元素的首尾位置

一、 問題描述 二、算法思想 該問題可以通過二分查找的思想來解決。 首先&#xff0c;我們可以使用二分查找找到目標值在數組中的任意一個位置&#xff08;即該位置的值等于目標值&#xff09;。假設找到的位置為mid。 接下來&#xff0c;我們需要在mid的左邊和右邊分別找到…