在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

YOLOv8中的損失函數解析

新機器視覺 ? 來源:小白玩轉python ? 2024-11-05 17:15 ? 次閱讀

來源:小白玩轉python

介紹

YOLO長期以來一直是目標檢測任務的首選模型之一。它既快速又準確。此外,其API簡潔易用。運行訓練或推斷作業所需的代碼行數有限。在2023年下半年,YOLOv8在框架中引入了姿態估計后,該框架現在支持最多四個任務,包括分類、目標檢測、實例分割和姿態估計。

ec19b69a-90b3-11ef-a511-92fbcf53809c.png

在本文中,我們將詳細介紹YOLOv8中使用的五個損失函數。請注意,我們將僅討論YOLOv8倉庫中配置的默認損失函數。此外,我們還將僅關注代表性參數,跳過一些標量和常數以進行歸一化或縮放,以便更好地理解。YOLOv8中對應的任務和損失函數可見于圖1。接下來我們將分別對每一個進行討論。

IoU損失

ec490b52-90b3-11ef-a511-92fbcf53809c.png

cw = b1_x2.maximum(b2_x2) - b1_x1.minimum(b2_x1)  # convex (smallest enclosing box) width
ch = b1_y2.maximum(b2_y2) - b1_y1.minimum(b2_y1)  # convex height


if CIoU or DIoU:  # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1
  c2 = cw ** 2 + ch ** 2 + eps  # convex diagonal squared
  rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4  # center dist ** 2
  
  if CIoU:  # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47
     v = (4 / math.pi ** 2) * (torch.atan(w2 / h2) - torch.atan(w1 / h1)).pow(2)
     with torch.no_grad():
       alpha = v / (v - iou + (1 + eps))
     return iou - (rho2 / c2 + v * alpha)  # CIoU

當考慮評估邊界框準確度的方式時,交并比(IoU)指標可能是大多數人首先想到的一個指標。IoU度量了預測的邊界框與實際邊界框之間的重疊程度。它也可以作為一個損失函數,只需將IoU轉換為1-IoU。

在YOLOv8中,修訂后的版本,完全IoU(CIoU)1被應用于衡量預測邊界框與實際邊界框之間的差異。CIoU是一個綜合性指標,它考慮了邊界框之間的三個屬性:

重疊比

中心點之間的距離

長寬比

CIoU的方程可在圖2右側找到。重疊比、中心點距離和長寬比這三個因素分別由方程中的各項表示。方程中涉及的關鍵參數在左側的圖中進行了說明,其中p和g表示預測和實際情況,b、w和h分別是相應邊界框的中心、寬度和高度。參數c是包圍邊界框的對角線(灰色虛線矩形)而ρ是歐氏距離。除了分類任務外,IoU損失在YOLOv8中的所有其他任務中都會應用。

分布焦點損失(DFL)

def _df_loss(pred_dist, target):
    """Return sum of left and right DFL losses."""
    # Distribution Focal Loss (DFL) proposed in Generalized Focal Loss https://ieeexplore.ieee.org/document/9792391
    tl = target.long()  # target left
    tr = tl + 1  # target right
    wl = tr - target  # weight left
    wr = 1 - wl  # weight right
    return (F.cross_entropy(pred_dist, tl.view(-1), reduction='none').view(tl.shape) * wl +
            F.cross_entropy(pred_dist, tr.view(-1), reduction='none').view(tl.shape) * wr).mean(-1, keepdim=True)

另一個與邊界框相關的損失函數是分布焦點損失(DFL)2。DFL關注的是邊界框回歸的分布差異。YOLOv8中的網絡不是直接預測邊界框,而是預測邊界框的概率分布。它旨在解決邊界模糊或部分遮擋的挑戰性對象。

關鍵點損失

ec706378-90b3-11ef-a511-92fbcf53809c.png

loss[1] += self.keypoint_loss(pred_kpt, gt_kpt, kpt_mask, area)


area:bounding box area


class KeypointLoss(nn.Module):


  def forward(self, pred_kpts, gt_kpts, kpt_mask, area):
        """Calculates keypoint loss factor and Euclidean distance loss for predicted and actual keypoints."""
        d = (pred_kpts[..., 0] - gt_kpts[..., 0]) ** 2 + (pred_kpts[..., 1] - gt_kpts[..., 1]) ** 2
        kpt_loss_factor = (torch.sum(kpt_mask != 0) + torch.sum(kpt_mask == 0)) / (torch.sum(kpt_mask != 0) + 1e-9)
        # e = d / (2 * (area * self.sigmas) ** 2 + 1e-9)  # from formula
        e = d / (2 * self.sigmas) ** 2 / (area + 1e-9) / 2  # from cocoeval
        return kpt_loss_factor * ((1 - torch.exp(-e)) * kpt_mask).mean()

在YOLOv8中,首次將姿態估計任務納入到框架中。姿態由一組關鍵點的坐標和順序定義。關鍵點損失監控了預測和實際關鍵點之間的相似性。兩個對應關鍵點之間的歐幾里得距離是關鍵點損失的主要組成部分。此外,每個關鍵點都帶有一個權重σ,定義了關鍵點的重要性,默認值為1/關鍵點數。例如,如果姿態有四個關鍵點,則所有關鍵點的權重為1/4 = 0.25。

關鍵點目標損失

ec82b956-90b3-11ef-a511-92fbcf53809c.png

import torch.nn as nn
loss[2] = nn.BCEWithLogitsLoss(pred_kpt[..., 2], kpt_mask.float())

在大多數姿態估計訓練中,我們可以定義每個關鍵點的可見性。Python腳本中的參數kpt_mask攜帶了我們在標簽中定義的可見性(1/0)。關鍵點目標損失計算關鍵點存在的距離。在YOLOv8中,距離由預測值和實際值的二元交叉熵(BCE)測量。

分類損失和掩碼損失

eca756da-90b3-11ef-a511-92fbcf53809c.png

import torch.nn as nn


loss[3] = nn.BCEWithLogitLoss(pred_scores, target_scores.to(dtype)).sum() / target_scores_sum  # BCE

分類損失是涉及到所有任務的唯一損失函數。無論我們是在進行分類、目標檢測、分割還是姿態估計,圖像或特定對象的類別(例如貓、狗、人等)的推斷結果之間的距離都是通過二元交叉熵(BCE)計算的。

它還適用于實例分割中的掩碼損失。掩碼損失將每個像素視為一個對象,并計算相關的BCE值。在圖5中計算了一個3x3的預測掩碼和相應的掩碼損失。

總損失

# yolo/cfg/default.yaml
...
box: 7.5  # box loss gain
cls: 0.5  # cls loss gain (scale with pixels)
dfl: 1.5  # dfl loss gain
pose: 12.0  # pose loss gain
kobj: 1.0  # keypoint obj loss gain
...

好了,以上我們已經介紹了所有六個損失。在網絡應用反向傳播并更新其參數之前,將損失與相應的權重相加。權重在配置文件default.yaml中定義,如上所示。如果您想在訓練階段動態調整權重,您可以考慮直接在存儲庫中使用下面提供的代碼片段。

loss[0] *= self.hyp.box  # box gain
loss[1] *= self.hyp.pose / batch_size  # pose gain
loss[2] *= self.hyp.kobj / batch_size  # kobj gain
loss[3] *= self.hyp.cls  # cls gain
loss[4] *= self.hyp.dfl  # dfl gain


return loss.sum() * batch_size, loss.detach()

總結

YOLO是一個為目標檢測任務而知名的框架。除了在效率和準確性方面的表現之外,它還在不斷更新最新的研究成果。這是一個讓計算機視覺從業者跟蹤和學習入選技術的好框架。損失函數在模型訓練中起著重要作用,并決定了最終的準確性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62606
  • 目標檢測
    +關注

    關注

    0

    文章

    209

    瀏覽量

    15610
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84682

原文標題:YOLOv8中的損失函數解析

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用sophon-demo_v0.1.8_dbb4632_20231116下面的YOLOv8yolov8_bmcv歷程出現段錯誤的原因?

    使用sophon-demo_v0.1.8_dbb4632_20231116下面的YOLOv8yolov8_bmcv歷程,出現段錯誤: 定位到代碼中出錯的函數是 picDec(h,
    發表于 05-30 07:37

    使用YOLOv8做目標檢測和實例分割的演示

    YOLOv8是來自Ultralytics的最新的基于YOLO的對象檢測模型系列,提供最先進的性能。
    的頭像 發表于 02-06 10:11 ?7494次閱讀

    YOLOv8自定義數據集訓練到模型部署推理簡析

    如果你只是想使用而不是開發,強烈推薦通過pip安裝方式獲取YOLOv8包!YOLOv8安裝命令行
    的頭像 發表于 03-24 09:27 ?4664次閱讀

    在AI愛克斯開發板上用OpenVINO?加速YOLOv8目標檢測模型

    《在 AI 愛克斯開發板上用 OpenVINO 加速 YOLOv8 分類模型》介紹了在 AI 愛克斯開發板上使用 OpenVINO 開發套件部署并測評 YOLOv8 的分類模型,本文將介紹在 AI 愛克斯開發板上使用 OpenVINO 加速
    的頭像 發表于 05-12 09:08 ?1326次閱讀
    在AI愛克斯開發板上用OpenVINO?加速<b class='flag-5'>YOLOv8</b>目標檢測模型

    YOLOv8版本升級支持小目標檢測與高分辨率圖像輸入

    YOLOv8版本最近版本又更新了,除了支持姿態評估以外,通過模型結構的修改還支持了小目標檢測與高分辨率圖像檢測。原始的YOLOv8模型結構如下。
    的頭像 發表于 05-16 11:14 ?1.2w次閱讀
    <b class='flag-5'>YOLOv8</b>版本升級支持小目標檢測與高分辨率圖像輸入

    AI愛克斯開發板上使用OpenVINO加速YOLOv8目標檢測模型

    《在AI愛克斯開發板上用OpenVINO加速YOLOv8分類模型》介紹了在AI愛克斯開發板上使用OpenVINO 開發套件部署并測評YOLOv8的分類模型,本文將介紹在AI愛克斯開發板上使用OpenVINO加速YOLOv8目標檢
    的頭像 發表于 05-26 11:03 ?1251次閱讀
    AI愛克斯開發板上使用OpenVINO加速<b class='flag-5'>YOLOv8</b>目標檢測模型

    一文徹底搞懂YOLOv8【網絡結構+代碼+實操】

    從上面可以看出,YOLOv8 主要參考了最近提出的諸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相關設計,本身的創新點不多,偏向工程實踐,主推的還是 ultralytics 這個框架本身。
    的頭像 發表于 06-15 17:15 ?1.2w次閱讀
    一文徹底搞懂<b class='flag-5'>YOLOv8</b>【網絡結構+代碼+實操】

    教你如何用兩行代碼搞定YOLOv8各種模型推理

    大家好,YOLOv8 框架本身提供的API函數是可以兩行代碼實現 YOLOv8 模型推理,這次我把這段代碼封裝成了一個類,只有40行代碼左右,可以同時支持YOLOv8對象檢測、實例分割
    的頭像 發表于 06-18 11:50 ?3065次閱讀
    教你如何用兩行代碼搞定<b class='flag-5'>YOLOv8</b>各種模型推理

    目標檢測算法再升級!YOLOv8保姆級教程一鍵體驗

    YOLO作為一種基于圖像全局信息進行預測的目標檢測系統,始終保持著極高的迭代更新率,從YOLOv5到YOLOv8,本次升級主要包括結構算法、命令行界面、PythonAPI等。具體到YOLOv8,它可
    的頭像 發表于 02-28 11:16 ?2692次閱讀
    目標檢測算法再升級!<b class='flag-5'>YOLOv8</b>保姆級教程一鍵體驗

    三種主流模型部署框架YOLOv8推理演示

    深度學習模型部署有OpenVINO、ONNXRUNTIME、TensorRT三個主流框架,均支持Python與C++的SDK使用。對YOLOv5~YOLOv8的系列模型,均可以通過C++推理實現模型
    的頭像 發表于 08-06 11:39 ?2748次閱讀

    解鎖YOLOv8修改+注意力模塊訓練與部署流程

    很多人也想跟修改YOLOv5源碼一樣的方式去修改YOLOv8的源碼,但是在github上面卻發現找到的YOLOv8項目下面TAG分支是空的
    的頭像 發表于 08-11 14:14 ?4362次閱讀
    解鎖<b class='flag-5'>YOLOv8</b>修改+注意力模塊訓練與部署流程

    如何修改YOLOv8的源碼

    很多人也想跟修改YOLOv5源碼一樣的方式去修改YOLOv8的源碼,但是在github上面卻發現找到的YOLOv8項目下面TAG分支是空的,然后就直接從master/main下面把源碼克隆出來一通
    的頭像 發表于 09-04 10:02 ?2004次閱讀
    如何修改<b class='flag-5'>YOLOv8</b>的源碼

    YOLOv8實現任意目錄下命令行訓練

    當你使用YOLOv8命令行訓練模型的時候,如果當前執行的目錄下沒有相關的預訓練模型文件,YOLOv8就會自動下載模型權重文件。這個是一個正常操作,但是你還會發現,當你在參數model中指定已有
    的頭像 發表于 09-04 10:50 ?1114次閱讀
    <b class='flag-5'>YOLOv8</b>實現任意目錄下命令行訓練

    基于YOLOv8的自定義醫學圖像分割

    YOLOv8是一種令人驚嘆的分割模型;它易于訓練、測試和部署。在本教程,我們將學習如何在自定義數據集上使用YOLOv8。但在此之前,我想告訴你為什么在存在其他優秀的分割模型時應該使用YOLO
    的頭像 發表于 12-20 10:51 ?781次閱讀
    基于<b class='flag-5'>YOLOv8</b>的自定義醫學圖像分割

    基于OpenCV DNN實現YOLOv8的模型部署與推理演示

    基于OpenCV DNN實現YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統、烏班圖系統、Jetson的Jetpack系統
    的頭像 發表于 03-01 15:52 ?1629次閱讀
    基于OpenCV DNN實現<b class='flag-5'>YOLOv8</b>的模型部署與推理演示
    主站蜘蛛池模板: 色v在线| 成 人 a v黄 色| 人人揉揉香蕉大青草| 国产大片黄在线观看| 性猛交毛片| 男人j进女人j视频| 日本黄色视| 黄色有码视频| 欧美女同在线| 成人中文字幕一区二区三区| 性做久久久久久久久| 久久伊人成人| 欧美黑人三级| 在线观看一级毛片| 日韩一级欧美一级一级国产| 久久精品国产亚洲5555| 欧美又黄又嫩大片a级| 欧美不卡视频| 四虎黄色片| 你懂的福利网站| www.91在线播放| 久久精品免费看| 亚洲综合丁香婷婷六月香| 黄色免费三级| 手机免费看大片| ggg成人| 午夜视频色| 国内一级毛片| 视频免费播放| 日本三黄色大| 免费一级e一片在线播放| 一级做a爱片久久毛片| 免费黄色的视频| 午夜精品在线观看| 男男浪荡性受高hnp肉| 狠狠五月婷婷| 日本xxxxxxxxx69| 男女免费在线视频| 国产高清区| 日本福利小视频| 九色亚洲|