YOLOv1 技術詳解:正負樣本劃分與置信度設計

🔍 YOLOv1 技術詳解:正負樣本劃分與置信度設計

一、前言

YOLOv1 是目標檢測領域中具有劃時代意義的算法之一,它將檢測任務統一為一個回歸問題,實現了“You Only Look Once”的端到端實時檢測。其中,正負樣本的劃分機制置信度(confidence)的設計 是理解其訓練流程的關鍵。

本文將從以下兩個方面深入解析:

  • YOLOv1 中的正負樣本是如何劃分的?
  • 置信度(confidence)到底是什么?它的計算方式和作用是什么?

二、YOLOv1 的輸出結構回顧

在進入正題之前,先簡單回顧一下 YOLOv1 的輸出結構:

? 輸出張量維度:

S × S × (B×5 + C)

其中:

  • S:網格數量(通常為 7)
  • B:每個網格預測的邊界框數量(通常為 2)
  • 5:每個 bounding box 包含的信息:x, y, w, h, confidence
  • C:類別數量(如 PASCAL VOC 為 20)

三、正樣本與負樣本的劃分機制

在訓練過程中,YOLOv1 并不是對所有預測框都進行監督學習,而是根據真實框的位置來選擇哪些預測框是負責預測該物體的。

🧠 核心思想:

  • 每個真實框(ground truth)只會被分配給一個 grid cell;
  • 這個 grid cell 內的多個 bounding box 中,IoU 最高的那個預測框作為正樣本
  • 其他不負責預測真實框的預測框可能被視為負樣本或忽略項。

📌 劃分步驟詳解:

  1. 確定真實框中心所在的 grid cell

    • 圖像被劃分為 S × S 的網格;
    • 真實框的中心點落在哪個格子,就由該格子負責預測;
  2. 在該 grid cell 的 B 個預測框中找出 IoU 最高的那個

    • 計算每個預測框與真實框的 IoU;
    • 只有這個 IoU 最高的預測框會被標記為“正樣本”,參與位置損失和置信度損失的計算;
  3. 其他預測框如何處理?

    • 如果某個預測框與任意真實框的 IoU 超過閾值(如 0.5),也可能會被標記為正樣本;
    • 否則,僅用于置信度損失計算(即認為“不含物體”);
  4. 負樣本定義

    • 所有未被選中的預測框,若其預測的邊界框與所有真實框的 IoU 都小于設定閾值,則視為“負樣本”;
    • 僅參與置信度損失的計算,不參與位置損失;

四、置信度(Confidence)詳解

置信度是 YOLOv1 中非常重要的一個概念,它不僅表示預測框是否包含物體,還結合了預測框與真實框之間的重疊程度(IoU)。

🧮 置信度的定義:

confidence = P ( object ) × IoU pred,truth \text{confidence} = P(\text{object}) \times \text{IoU}_{\text{pred,truth}} confidence=P(object)×IoUpred,truth?

其中:

  • P ( object ) P(\text{object}) P(object):當前預測框是否包含物體(0 或 1);
  • IoU pred,truth \text{IoU}_{\text{pred,truth}} IoUpred,truth?:預測框與真實框的交并比;

🎯 置信度的作用:

場景置信度含義
正樣本表示預測框準確地定位到了物體,并且 IoU 較高
負樣本應該趨近于 0,表示“這里沒有物體”
誤檢區域置信度應低,避免誤報

?? 損失函數中置信度的作用:

在損失函數中,置信度部分的損失分為兩部分:

  • 正樣本:希望置信度接近 IoU 值;
  • 負樣本:希望置信度趨近于 0;

公式如下:

L confidence = ∑ i = 0 S 2 ∑ j = 0 B [ 1 i j obj ? ( conf i j ? conf ^ i j ) 2 + λ noobj ? ( 1 ? 1 i j obj ) ? ( conf i j ) 2 ] \mathcal{L}_{\text{confidence}} = \sum_{i=0}^{S^2} \sum_{j=0}^{B} \left[ \mathbb{1}_{ij}^{\text{obj}} \cdot \left(\text{conf}_i^j - \hat{\text{conf}}_i^j \right)^2 + \lambda_{\text{noobj}} \cdot \left(1 - \mathbb{1}_{ij}^{\text{obj}} \right) \cdot \left(\text{conf}_i^j \right)^2 \right] Lconfidence?=i=0S2?j=0B?[1ijobj??(confij??conf^ij?)2+λnoobj??(1?1ijobj?)?(confij?)2]

其中 λ noobj \lambda_{\text{noobj}} λnoobj? 是一個較小的權重系數(一般設為 0.5),用于降低負樣本的影響。


五、正負樣本劃分的可視化說明(偽代碼示意)

for each ground_truth_box in ground_truth_boxes:# Step 1: 找到對應 grid cellgrid_x, grid_y = get_grid_cell(image_size, S, ground_truth_box.center)# Step 2: 在該 grid cell 的 B 個預測框中計算 IoUious = [iou(pred_box, ground_truth_box) for pred_box in predicted_boxes[grid_x][grid_y]]# Step 3: 選取 IoU 最大的預測框作為正樣本best_idx = np.argmax(ious)positive_boxes.append(predicted_boxes[grid_x][grid_y][best_idx])# Step 4: 其余預測框判斷是否也為正樣本(IoU > threshold)for j in range(B):if j != best_idx and ious[j] > iou_threshold:positive_boxes.append(predicted_boxes[grid_x][grid_y][j])else:negative_boxes.append(predicted_boxes[grid_x][grid_y][j])

六、總結

模塊內容
正樣本劃分每個真實框只分配給一個 grid cell,該 cell 中 IoU 最高的預測框作為正樣本
負樣本劃分不包含物體的預測框作為負樣本,僅參與置信度損失
置信度設計 P ( object ) × IoU P(\text{object}) \times \text{IoU} P(object)×IoU,衡量預測框的準確性和置信程度
置信度作用控制模型是否相信某個預測框含有物體,影響最終檢測結果

七、結語

YOLOv1 通過統一建模的方式,首次實現了端到端的目標檢測流程。其中,正負樣本的劃分機制置信度的設計 是其訓練穩定性和檢測精度的重要保障。

雖然后續版本(如 YOLOv2、YOLOv3、YOLOX)對此進行了優化,但理解 YOLOv1 的這些核心機制,有助于我們更好地掌握現代目標檢測框架的發展脈絡。


📌 歡迎點贊 + 收藏 + 關注我,我會持續更新更多關于計算機視覺、目標檢測、深度學習、YOLO系列等內容!


🎯 下期預告:
《YOLOv2 技術詳解:引入 Anchor Boxes 與多尺度預測》
敬請期待!🚀

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

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

相關文章

為 Nginx 配置 HTTPS(以 n8n 為例)完整教程【CentOS 7】

在部署如 n8n 這類自動化平臺時,為了保障數據傳輸安全,我們通常會使用 HTTPS 訪問。本文將以 n8n.example.com 為例,介紹如何在 CentOS 7 系統中通過 Nginx 為本地運行在端口 5678 的 n8n 服務配置免費 SSL 證書(Let’s Encrypt&a…

Elasticsearch從安裝到實戰、kibana安裝以及自定義IK分詞器/集成整合SpringBoot詳細的教程ES(四)查詢、排序、分頁、高亮

基礎代碼 package com.test.xulk;import com.alibaba.fastjson.JSON; import com.test.xulk.es.esdoc.HotelDoc; import com.test.xulk.es.service.IHotelService; import org.apache.http.HttpHost; import org.elasticsearch.action.search.SearchRequest; import org.elast…

一個數組樣式上要分成兩個

如圖所示&#xff0c;要有一個區分來顯示&#xff0c;如果一開始就是這樣還可以有很多種處理方式&#xff0c;但是這個后期一直在調整所以不好重做因為開發已經完成&#xff0c;加上很多地方聯動改的地方太多&#xff0c;所以采用了一個比較笨的方法 <ul class"classif…

NLP進化史:從規則模板到思維鏈推理,七次范式革命全解析

“語言不是神的創造物&#xff0c;而是平凡人類的產物。”——諾姆喬姆斯基 自然語言處理&#xff08;NLP&#xff09;的發展史&#xff0c;就是人類試圖教會機器理解語言本質的探索史。本文將帶您穿越70年技術長河&#xff0c;揭示NLP領域關鍵的范式轉換里程碑。 一、規則驅動…

Yarn與NPM緩存存儲目錄遷移

Yarn與NPM緩存存儲目錄遷移 背景與需求 解釋Yarn和NPM緩存機制的作用及默認存儲路徑遷移緩存目錄的常見原因&#xff08;如磁盤空間不足、系統盤性能優化、多項目協作需求&#xff09; Yarn緩存目錄遷移方法 查看當前Yarn緩存目錄的命令&#xff1a;yarn cache dir修改Yarn…

Python爬蟲-批量爬取快手視頻并將視頻下載保存到本地

前言 本文是該專欄的第80篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文筆者以快手為例子,基于Python爬蟲來實現批量采集視頻,并將視頻下載以及保存到本地。 而具體的“視頻采集以及視頻下載,保存”思路邏輯,筆者將在正文中結合“完整代碼”來詳細介紹每個步驟。…

org.springframework.cloud.openfeign 組件解釋

我們來詳細解釋一下 org.springframework.cloud.openfeign 這個組件。 一句話概括&#xff1a;它是一個聲明式的、模板化的HTTP客戶端&#xff0c;旨在讓微服務之間的REST API調用變得像調用本地方法一樣簡單。 為了讓你徹底理解&#xff0c;我會從以下幾個方面來解釋&#x…

2025年06月13日Github流行趨勢

項目名稱&#xff1a;awesome-llm-apps 項目地址url&#xff1a;https://github.com/Shubhamsaboo/awesome-llm-apps項目語言&#xff1a;Python歷史star數&#xff1a;37,536今日star數&#xff1a;1,287項目維護者&#xff1a;Shubhamsaboo, Madhuvod, libw0430, AndrewHoh, …

Go語言底層(五): 深入淺出Go語言的ants協程池

在 Go 語言中&#xff0c;goroutine 的輕量特性使得高并發編程變得異常簡單。然而&#xff0c;隨著并發量的增加&#xff0c;頻繁創建對象和無限制啟動 goroutine 也可能帶來內存浪費、GC 壓力和資源搶占等問題。為了解決這些隱患&#xff0c;協程池成為常用的優化手段。用于控…

React Native【實戰范例】網格導航 FlatList

import React from "react"; import {FlatList,Image,SafeAreaView,StyleSheet,Text,View, } from "react-native"; interface GridItem {id: string;title: string;imageUrl: string; } // 網格布局數據 const gridData Array.from({ length: 30 }, (_, …

KJY0047-J1階段測試

KJY0047 - J1階段測試題解 題目1&#xff1a;SYAP0001. 闖關 解題思路&#xff1a; 暴力思路&#xff1a;每次碰到奇數都使用一次 f o r for for 循環將后續的數值 1 1 1, 時間復雜度 O ( n 2 ) O(n^2) O(n2) 優化思路&#xff1a;可以用一個計數器 c n t cnt cnt 來存…

鍵盤按鍵枚舉 Key 說明文檔

鍵盤按鍵枚舉 Key 說明文檔 該文檔介紹了 Key 枚舉中定義的鍵盤按鍵常量及其對應編號&#xff0c;適用于標準 105 鍵的美式鍵盤布局。常用于瀏覽器或桌面端的鍵盤事件監聽、游戲開發、快捷鍵映射等場景。 electron-jest ?? 功能鍵&#xff08;Function Keys&#xff09; …

函數調用過程中的棧幀變化

int add(int a, int b) {int c a b;return c; }int main() {int result add(1, 2);return 0; }生成匯編代碼&#xff1a;g -S Cplus.cpp -o Cplus.s .file "Cplus.cpp".text.globl _Z3addii.def _Z3addii; .scl 2; .type 32; .endef.seh_proc _Z3addii _Z3addii:p…

【Java面試筆記:實戰】41、Java面試核心考點!AQS原理及應用生態全解析

引言:AQS在Java并發體系中的核心地位 AQS(AbstractQueuedSynchronizer)作為Java并發包的底層基石,是理解ReentrantLock、Semaphore等同步工具的關鍵。 在Java架構師面試中,AQS的原理與應用是高頻考點,掌握其核心機制對理解JUC包和構建高并發系統至關重要。 本文將從原…

碩士課題常用命令

ros常用命令&#xff1a; 1.環境變量刷新 source devel/setup.bash2.ROS_INFO的信息在終端顯示為亂碼或者問號&#xff0c;則在main函數中加入&#xff1a; setlocale(LC_ALL, "");3.刷新bashrc文件 source ~/.bashrcPX4 roslaunch px4 mavros_posix_sitl.launc…

2.6 激光雷達消息格式

新建終端&#xff0c;執行命令 roslaunch wpr_simulation wpb_simple.launch 在新建終端&#xff0c;執行命令 roslaunch wpr_simulation wpb_rviz.launch 顯示/Scan話題消息&#xff0c;后面的參數是noarr無數組&#xff0c;防止刷屏 rostopic echo /scan --noarr 參考官…

常見的網絡協議有哪些

1.應用層 1.1 HTTP/HTTPS 前端與服務器通信的基礎協議&#xff0c;用于傳輸 HTML、CSS、JS、圖片等資源。 1.2WebSocket&#xff08;如社交聊天、股票實時報價、視頻會議、在線教育等&#xff09; WebSocket協議建立在TCP協議之上&#xff0c;實現了瀏覽器與服務器之間的實時…

Prometheus + Grafana 監控 RabbitMQ 實踐指南

文章目錄 Prometheus Grafana 監控 RabbitMQ 實踐教程一、前言二、環境搭建2.1 環境準備2.2 安裝 Prometheus2.3 安裝 Grafana 三、集成 RabbitMQ Exporter3.1 下載 RabbitMQ Exporter3.2 解壓文件3.3 配置環境變量3.4 啟動 RabbitMQ Exporter3.6 驗證 Exporter 狀態 四、Prom…

Babylon.js場景加載器(Scene Loader)使用指南

在3D開發中&#xff0c;Babylon.js的場景加載器(Scene Loader)是加載各種3D模型格式的核心工具。本文將詳細介紹如何高效使用Scene Loader加載多種格式的3D模型文件。 一、基本概念與支持格式 要加載特定類型的文件&#xff0c;Babylon.js需要先注冊對應的文件類型插件。目前…

編程學習網站大全(C++/OpenCV/QT方向)—— 資源導航與深度評測

工欲善其事&#xff0c;必先利其器 本文系統整理了C、OpenCV、QT三大方向的優質學習網站&#xff0c;結合技術特點與平臺優勢&#xff0c;助你精準選擇學習資源&#xff0c;少走彎路&#xff01; 一、C 學習網站精選 &#x1f4da; 1. cppreference.com 權威性最高&#xff1a…