YOLO 目標檢測:數據集構建(LabelImg 實操)、評估指標(mAP/IOU)、 NMS 后處理

文章目錄

  • 基本知識介紹
    • 1.視覺處理三大任務
    • 2.訓練、驗證、測試、推理
    • 3.數據集
      • 3.1 數據集格式
      • 3.2 數據集標注
    • 4.上游任務和下游任務
  • YOLO

基本知識介紹

1.視覺處理三大任務

圖像分類對整個圖像內容進行 “類別歸屬” 判斷,核心是讓計算機識別一張圖像屬于哪個預設的類別(例如 “貓”“狗”“汽車”“風景” 等),輸出的是 “圖像 - 類別標簽” 的對應關系,不關注目標在圖像中的具體位置、數量或形態細節。

目標檢測:不僅要識別圖像中存在的目標類別(解決 “是什么”),還要通過矩形邊界框(Bounding Box)標記出每個目標在圖像中的具體位置(解決 “在哪里”),同時需處理 “多目標共存” 場景

圖像分割:實例分割、語義分割

2.訓練、驗證、測試、推理

訓練階段(Training):通過訓練集數據,讓模型 “學會” 規律。數據集需要做標注,圖像分類的類別就是文件夾的名稱,但在目標檢測是需要自己打標簽。

驗證階段(Validation):在訓練過程中,用驗證集評估模型的 “初步泛化能力”,讓模型 “更優”,這個過程一般發生在模型訓練過程中或者最后。

測試階段(Testing):用完全獨立的測試集,最終評估模型的泛化能力

推理階段(Inference):將通過測試的模型部署到實際場景,對真實世界的新數據(無標簽)進行預測,輸出結果供業務使用。

【重點】訓練、驗證、測試圖片是不可以存在相同的

3.數據集

3.1 數據集格式

YOLO 數據集的目錄結構需嚴格區分圖像文件標注文件,兩者需一一對應(文件名相同,后綴不同):

datasets:存放所有的數據集,這個所有的意思就是訓練任何模型的數據集

  • car:訓練car的數據集信息
    • train:訓練數據集
      • images:圖片信息
      • lables:標簽信息
    • val:驗證數據集
      • images:圖片信息
      • labels:標簽信息
  • helmet:
    • train:訓練數據集
      • images:圖片信息
      • lables:標簽信息
    • val:驗證數據集
      • images:圖片信息
      • labels:標簽信息

3.2 數據集標注

在目標檢測任務中,圖片中的每個目標都要標注類別邊界框(Bounding Box)

安裝labelimg工具【這個工具如果安裝在python 3.12 版本以下會有bug,解決方法詳見不過解決文檔】:

  • 第一步:創建虛擬環境(可以選擇拷貝):

    conda create -n labels_env python=3.12 
    
  • 第二步:激活虛擬環境【有的版本的anaconda不需要寫 conda】

    conda activate labels_env
    
  • 第三步:下載 labelimg

    pip install labelimg
    
  • 第四步:查看是否安裝了 labelimg

    conda list labelimg
    
  • 第五步:啟動 labelimg 標注工具【遇到bug就去解決】

    labelimg
    

在這里插入圖片描述

在這里插入圖片描述

注:此工具有些小bug:

1.進頁面后切換一下yolo格式,即使初始就是yolo也最好切換一下

2.按w快捷開啟標注

3.若沒有方框的在左上角導航欄edit點擊一下Draw Squares

在這里插入圖片描述

4.上游任務和下游任務

  • 上游任務:就是使用大量的數據集訓練模型,得到預訓練模型
  • 下游任務:通過預訓練模型得到自己的模型,做模型的應用開發【落地】

YOLO

YOLO(You Only Look Once)是目前最流行的實時目標檢測算法之一,以速度快、精度高著稱,其核心特點是一個**單階段的目標檢測【沒有生成候選框的過程】**算法,直接從圖像中同時預測目標的類別和位置,擺脫了傳統兩階段檢測算法(如 Faster R-CNN)的復雜流程。

指標

1.真實框(Ground Truth Box)與邊界框(Bounding Box)
  • 真實框:就是我們在訓練模型之前,基于數據集內容,做的標注信息的矩形框;推理階段是沒有真實框的
  • 邊界框:也可以稱為預測框,這個框就是模型輸出的結果;在訓練階段,我們通過控制損失函數,讓邊界框更加接近于真實框(提高模型的性能);在推理階段,這個邊界框就是我們通過模型推理出來的結果,這個過程全全是否模型學習到的東西的一個輸出

YOLO 采用歸一化的(x_center, y_center, width, height)格式表示邊界框(范圍 0~1),其中:

  • x_center, y_center:目標中心點相對于圖像寬高的歸一化坐標;
  • width, height:目標寬高相對于圖像寬高的歸一化值。

邊界框越貼近目標真實框,模型定位效果越好。

2.交并比(IOU)

衡量預測邊界框(Predicted Box)真實邊界框(Ground Truth Box) 重疊程度的指標

  • 計算公式:

IoU=AreaofOverlapAreaofUnion=A∩BA∪BIoU=\frac{Area\,of\,Overlap}{Area\,of\,Union}=\frac{A∩B}{A∪B} IoU=AreaofUnionAreaofOverlap?=ABAB?

  • IoU 計算公式圖形表示如下:

在這里插入圖片描述

  • IoU=1:預測框與真實框完全吻合,認為很成功但也有可能是過擬合。
  • IoU<0.5IoU<0.5:通常認為預測失敗(False Positive, FP)。
  • IoU≥0.5IoU≥0.5:認為預測成功(True Positive, TP)。
3.置信度

YOLO為每個預測框分配一個置信度,表示模型對預測框包含目標的可信度,取值范圍 0 到 1 之間,置信度由兩部分組成:

  1. 目標存在概率:預測框內是否包含目標。
  2. 位置準確性:預測框與真實框的IoU。

公式:置信度 = Pr(Object) × 預測的 IOU

  • Pr(Object)=1:邊界框內有對象
  • Pr(Object)=0:邊界框內沒有對象

【注】:在推理階段,由于沒有真實框的存在,所有沒辦法去計算IOU的值,因此模型推理階段的置信度輸出完全是由模型學習的結果產生的(即模型預測的,包含了類別置信度 + 目標存在置信度)

4.混淆矩陣
  • 混淆矩陣是一種用于評估分類模型性能的表格形式,特別適用于監督學習中的分類任務。它通過將模型的預測結果與真實標簽進行對比,幫助我們直觀地理解模型在各個類別上的表現
  • 在混淆矩陣中:
    • 列(Columns):表示真實類別(True Labels)
    • 行(Rows):表示預測類別(Predicted Labels)
    • 單元格中的數值:表示在該真實類別與預測類別組合下的樣本數量
  • 在目標檢測任務中,混淆矩陣的構建依賴于 IoU 閾值,因為 IoU 決定了哪些預測被認為是“正確檢測”,從而影響 TP、FP、FN 的統計,最終影響混淆矩陣的結構和數值
實際為正類實際為負類
預測為正類TP(真正例)FP(假正例)
預測為負類FN(假反例)TN(真反例)
  • TP:真實是目標,預測也為目標(正確檢測);
  • FP:真實不是目標,預測為目標(誤檢);
  • FN:真實是目標,預測為非目標(漏檢);
  • TN:真實不是目標,預測也為非目標(正確排除)。

【理解技巧】每個術語由 “真假(T/F)”“正負(P/N)” 組成,先明確這兩個維度的含義:

  • T(True)/ F(False):描述 “模型預測是否和真實情況一致”——
    T = 預測對了,F = 預測錯了;
  • P(Positive)/ N(Negative):描述 “模型的預測結果是什么”——
    P = 模型預測為 “正類”(比如 “垃圾郵件”“患病”),N = 模型預測為 “負類”(比如 “正常郵件”“健康”)。
5.精確度與召回率
  • 精確度(Precision)

    • 定義:預測為正的樣本中,真正為正的比例(“預測正確的目標占所有預測目標的比例”):
      Precision=TPTP?+?FP\text{Precision} = \frac{\text{TP}}{\text{TP + FP}} Precision=TP?+?FPTP?

    • 意義:衡量模型 “不亂標” 的能力 —— 值越高,誤檢(把非目標標為目標)越少。

  • 召回率(Recall)

    • 定義:真實為正的樣本中,被成功預測為正的比例(“所有真實目標中被檢出的比例”):
      Recall=TPTP?+?FN\text{Recall} = \frac{\text{TP}}{\text{TP + FN}} Recall=TP?+?FNTP?

    • 意義:衡量模型 “不漏檢” 的能力 —— 值越高,漏檢(真實目標未被檢出)越少。

6.mAP
6.1 PR曲線(Precision-Recall Curve)

PR 曲線以召回率(Recall) 為橫軸,精確率(Precision) 為縱軸,每個點對應一個特定的 “置信度閾值”。通過調整閾值,可得到一系列(Recall, Precision)坐標,連接這些點即形成 PR 曲線。

對于每個樣本,模型會輸出一個預測分數或置信度,表示該樣本屬于某一類的概率。通常也會設定一系列的置信度閾值,這些閾值將用于決定哪些預測被視為“正例”(Positive),哪些被視為“負例”(Negative)

置信度閾值:模型預測框的 “置信度” 決定了是否保留該框(如閾值 = 0.5 時,只保留置信度≥0.5 的框)。

  • 當閾值降低時:
    • 更多低置信度的預測框被保留 → 漏檢減少(Recall 升高),但誤檢可能增加(Precision 降低)。
  • 當閾值升高時:
    • 只有高置信度的預測框被保留 → 誤檢減少(Precision 升高),但漏檢可能增加(Recall 降低)

對于每一個閾值,根據預測分數與該閾值的比較結果,我們可以計算出當前閾值下的精確率(Precision)和召回率(Recall)

將每個閾值下的精確率和召回率作為坐標點,繪制在二維平面上,橫軸為召回率,縱軸為精確率,從而形成一條曲線

在這里插入圖片描述

理想曲線:靠近右上角(高召回率下仍保持高精確率)。

實際曲線:通常呈下降趨勢,反映模型在精確率與召回率間的權衡。

6.2 AP
  • 在 PR 曲線中,曲線上每個點表示了在對應召回率下的最大精確率值。當 P=R 時成為平衡點(BEP),如果這個值較大,則說明學習器的性能較好。所以 PR 曲線越靠近右上角性能越好。即 PR 曲線的面積越大,表示分類模型在精確率和召回率之間有更好的權衡,性能越好
  • 常用的評估指標是 PR 曲線下的面積,即 AP(Average Precision),通過 PR 曲線下的面積來計算 AP,從而綜合評估模型在不同置信度閾值下的性能,值越接近 1 越好
  • 平均精度(Average Precision, AP)通過計算每個類別在不同置信度閾值下的 Precision(查準率)和 Recall(查全率)的平均值來綜合評估模型的性能。AP 被廣泛應用于評估模型在不同置信度閾值下的表現,并且是計算 mAP(平均平均精度)的基礎
  • AP 就是用來衡量一個訓練好的模型在識別某個類別時的表現好壞。AP 越高,說明模型在這個類別上的識別能力越強在這里插入圖片描述

在 PR 曲線中,曲線上每個點表示了在對應召回率下的最大精確率值。當 P=R 時成為平衡點(BEP),如果這個值較大,則說明學習器的性能較好。所以 PR 曲線越靠近右上角性能越好。即 PR 曲線的面積越大,表示分類模型在精確率和召回率之間有更好的權衡,性能越好

常用的評估指標是 PR 曲線下的面積,即 AP(Average Precision),通過 PR 曲線下的面積來計算 AP,從而綜合評估模型在不同置信度閾值下的性能,值越接近 1 越好

AP計算:

  • 11 點插值法:只需要選取當 Recall >= 0, 0.1, 0.2, …, 1 共11個點,找到所有大于等于該 Recall 值的點,并選取這些點中最大的 Precision 值作為該 Recall 下的代表值,然后 AP 就是這 11 個 Precision 的平均值
    AP=111∑r∈{0,0.1,...,1}pinterp(r)pinterp(r)=max?r~:r~≥rp(r~)r~表示大于或等于r實際召回率,并選擇這些召回率對應的精確率中的最大值作為插值精確率\mathrm{AP}=\frac{1}{11}\sum_{r\in\{0,0.1,...,1\}}p_{interp(r)}\\ p_{interp(r)}=\max_{\tilde{r}:\tilde{r}\geq r}p(\tilde{r}) \\ \tilde{r}表示大于或等于r實際召回率,并選擇這些召回率對應的精確率中的最大值作為插值精確率 AP=111?r{0,0.1,...,1}?pinterp(r)?pinterp(r)?=r~:r~rmax?p(r~)r~表示大于或等于r實際召回率,并選擇這些召回率對應的精確率中的最大值作為插值精確率
    在這里插入圖片描述

  • 面積法:需要針對每一個不同的Recall值(包括0和1),選取其大于等于這些 Recall 值時的 Precision 最大值,然后計算 PR 曲線下面積作為 AP 值,假設真實目標數為 M,recall 取樣間隔為 [0, 1/M, …, M/M],假設有 8 個目標,recall 取值 = [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]

    在這里插入圖片描述

  • 把各塊面積加起來就是 AP 值

在這里插入圖片描述

6.3 mAP平均平均精度

mAP 是所有類別的 AP 的平均值,用于衡量模型在多類別任務中的整體性能。
mAP=1N∑i=1NAPi\text{mAP} = \frac{1}{N} \sum_{i=1}^{N} \text{AP}_i mAP=N1?i=1N?APi?
mAP衡量模型整體性能的綜合指標,值越高表示模型在所有類別上的平均表現越好

NMS(非極大值抑制)后處理技術

NMS(Non-Maximum Suppression)是目標檢測中的關鍵后處理技術,用于解決冗余檢測框問題。其核心思想是:

  • 篩選局部最優解:在多個重疊的預測框中,保留置信度最高的框,抑制(刪除)與之高度重疊的低置信度框。
  • 基于IoU(交并比):通過計算預測框之間的重疊度,決定是否保留或剔除冗余框。

步驟:

YOLO 模型輸出的預測框需先經過 “置信度閾值過濾”(如只保留置信度≥0.25 的框,初步去除低置信度誤檢),再進入 NMS 流程。【這個過程就為 NMS 過濾減輕了計算壓力】

步驟 1:按置信度對預測框排序(降序)

按其置信度分數從高到低排序。此時,排序第一的框是當前 “最可能為真實目標” 的候選框(記為 best_box

步驟 2:計算best_box與其他所有框的 IOU

步驟 3:根據 IOU 閾值抑制冗余框

抑制重疊框:設定一個閾值(如 iou_threshold=0.5),若某候選框與 best_box 的 IoU 超過閾值,則認為該框是冗余的,從候選列表中移除。

步驟 4:重復操作,從剩余候選框中繼續選擇最高分的框,重復上述步驟,直到所有框處理完畢。

NMS 通過 “選最高置信度框→刪重疊框→循環至無冗余” 的流程,從大量預測框中篩選出唯一、精準的目標框。

在這里插入圖片描述

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

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

相關文章

進程狀態 —— Linux內核(Kernel)

&#x1f381;個人主頁&#xff1a;工藤新一 &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄進…

計算機視覺與深度學習 | 低照度圖像處理算法綜述:發展、技術與趨勢

文章目錄 一、發展歷程:從傳統模型到智能融合 (一)傳統模型構建階段(1970s-2016) (二)深度學習應用階段(2017-2020) (三)硬件-算法協同階段(2021至今) 二、技術分類與性能對比 (一)傳統方法體系 (二)深度學習方法 1. 監督學習模型 2. 無監督/自監督方法 3. 混…

責任鏈模式實踐-開放銀行數據保護及合規

責任鏈模式介紹什么是責任鏈模責任鏈模式是一種行為設計模式&#xff0c; 允許你將請求沿著處理者鏈進行發送。 收到請求后&#xff0c; 每個處理者均可對請求進行處理&#xff0c; 或將其傳遞給鏈上的下個處理者。責任鏈模式結構偽代碼基于責任鏈的開放銀行數據保護及合規實踐…

npm install --global @dcloudio/uni-cli 時安裝失敗

這個日志顯示在執行 npm install --global dcloudio/uni-cli 時安裝失敗&#xff0c;核心錯誤是 UNABLE_TO_GET_GET_ISSUER_CERT_LOCALLY&#xff08;無法獲取本地頒發者證書&#xff09;&#xff0c;屬于 HTTPS 證書驗證失敗 問題。錯誤原因npm 訪問官方 registry&#xff08;…

吱吱企業通訊軟件可私有化部署,構建安全可控的通訊辦公平臺

在當今激烈的市場競爭環境中&#xff0c;企業通訊已成為制勝的關鍵因素。吱吱作為一款專為企業管理設計的IM即時辦公通訊軟件&#xff0c;提供了高度安全的通訊辦公環境&#xff0c;確保信息在內部流通的安全性與高效性&#xff0c;為企業數字化轉型奠定了堅實的基礎。 一、私有…

暄桐:唯有認真思考過死亡,才足以應對日常

暄桐是一間傳統美學教育教室&#xff0c;創辦于2011年&#xff0c;林曦是創辦人和授課老師&#xff0c;教授以書法為主的傳統文化和技藝&#xff0c;皆在以書法為起點&#xff0c;親近中國傳統之美&#xff0c;以實踐和所得&#xff0c;滋養當下生活。初聽莊子在妻子離世后“鼓…

目標檢測領域基本概念

基于提議的方法&#xff0c;也常被稱為兩階段 (Two-stage) 方法&#xff0c;是目標檢測領域的經典范式。它們將目標檢測任務分解為兩個主要步驟&#xff1a;階段一&#xff1a;區域提議 (Region Proposal Generation) 目標&#xff1a; 在圖像中生成一系列可能包含物體的候選區…

【開題答辯全過程】以 基于SpringBoot的流浪貓狗領養系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

扣子(coze)實踐指南進階篇——創建工作流,并將工作流接入智能體

大家好&#xff0c;歡迎閱讀這份《智能體&#xff08;AIAgent&#xff09;開發指南》&#xff01; 在大模型和智能體快速發展的今天&#xff0c;很多朋友希望學習如何從零開始搭建一個屬于自己的智能體。本教程的特點是 完全基于國產大模型與火山推理引擎實現&#xff0c;不用翻…

【STM32】外部中斷(上)

【STM32】外部中斷前言一、中斷系統1.1 什么是中斷1.2 中斷優先級1.3 中斷嵌套1.4 中斷執行流程二、NVIC2.1NVIC基本結構2.2 NVIC優先級分組三、EXTI3.1 EXTI 外部中斷&#xff08;Extern Interrupt&#xff09;3.2 EXTI基本結構3.3 AFIO復用IO口3.4 EXTI內部框圖前言 【STM32…

TimeDP Learning to Generate Multi-Domain Time Series with Domain Prompts論文閱讀筆記

TimeDP Learning to Generate Multi-Domain Time Series with Domain Prompts 摘要 在跨域時序數據生成任務中&#xff0c;提出使用”時間序列語義原型“模塊定義時間序列原型來表示時間序列基&#xff0c;每個原型向量作為“詞”表示一些基本的時間序列特征。應用原型分配模塊…

Ubuntu安裝NVIDIA顯卡驅動

清理舊驅動 sudo apt purge nvidia* libnvidia* sudo apt autoremovesudo find /etc -name *nvidia* -exec sudo rm -rf {} sudo rm -rf /usr/local/cuda*禁用 nouveau echo blacklist nouveau options nouveau modeset0 | sudo tee /etc/modprobe.d/blacklist-nouveau.conf…

硬件工程師成長之路:從入門到精通的技術旅程

文章目錄前言第一階段&#xff1a;基礎知識的積累理論知識儲備動手實踐第二階段&#xff1a;專業技能的提升PCB設計嵌入式系統開發第三階段&#xff1a;專業方向的選擇射頻&#xff08;RF&#xff09;工程電源設計高速數字電路FPGA/ASIC設計第四階段&#xff1a;工程管理與視野…

PyTorch 張量(Tensor)詳解:從基礎到實戰

1. 引言在深度學習和科學計算領域&#xff0c;張量&#xff08;Tensor&#xff09; 是最基礎的數據結構。PyTorch 作為當前最流行的深度學習框架之一&#xff0c;其核心計算單元就是張量。與 NumPy 的 ndarray 類似&#xff0c;PyTorch 張量支持高效的數值計算&#xff0c;但額…

CPTS---Hospital

端口掃描 nmap -A -p- -n -Pn -T4 10.10.11.241 22/tcp open ssh OpenSSH 9.0p1 Ubuntu 1ubuntu8.5 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 256 e1:4b:4b:3a:6d:18:66:69:39:f7:aa:74:b3:16:0a:aa (ECDSA) |_ 256 96:c1:dc:d8:97:20:95:e7:01:5…

【貪心算法】day5

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的貪心算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

軟考中級【網絡工程師】第6版教材 第4章 無線通信網 (上)

考點分析: 重要程度:??? 選擇題考查1 ~ 3分,案例分析可能考查填空和簡答 高頻考點:802.11信道與頻段、CSMA/CA、無線網絡優化、無線認證、無線配置步驟 新教材變化:新增4G/5G、刪除無線城域網 本章將詳述蜂窩移動通信系統、無線局域網以及無線個人網的體系結構和實用技…

vscode+EIDE+Clangd環境導入keil C51以及MDK工程

我最近一直在使用vscodeclangd的編譯環境替代了vscode自帶的c/c插件。感覺clangd的環境更加優秀&#xff0c;能夠更好找到函數、全局變量等定義調用等。如果使用keil C51以及MDK環境開發51單片機或者STM32單片機就需要使用到了EIDE這個插件這個插件現在能夠自動生成compile_com…

FTP - 學習/實踐

1.應用場景 主要用于學習和使用FTP服務&#xff0c;同時研究其架構實現, 以及日常開發中的使用。 FTP&#xff08;文件傳輸協議&#xff09;是一種用于網絡文件傳輸的標準協議&#xff0c;基于客戶端-服務器模型運行&#xff0c;通過控制通道&#xff08;端口21&#xff09;和…

【瑞吉外賣】手機號驗證碼登錄(用QQ郵件發送代替)

目錄 介紹 一、獲取授權碼 二、前端代碼修改 三、后端代碼修改 ①pom依賴 ②yml配置 ③控制層 ④業務層 ⑤工具類 介紹 本文介紹了QQ郵箱驗證碼登錄功能的實現步驟&#xff1a; 獲取QQ郵箱授權碼并配置&#xff1b;前端修改登錄頁面&#xff0c;增加驗證碼發送接口調…