從 YOLOv1 到 YOLOv2:目標檢測的進化之路

引言

你有沒有想過,當你用手機拍一張照片,里面的人、車、狗是怎么被自動識別出來的?這背后靠的就是目標檢測技術。目標檢測是計算機視覺中的一個重要領域,它不僅要回答“圖片里有什么”,還要告訴你“這些東西在哪里”。今天,我們要聊的是目標檢測領域的兩個經典模型:YOLOv1YOLOv2。它們的名字聽起來很酷——“You Only Look Once”(你只看一次),不僅名字帥,性能也很強。這篇博客將帶你走進 YOLO 的世界,聊聊它們的原理、區別,以及那些聽起來高大上的概念,比如 mAP、FPS、IoU 等。我們會盡量用大白話解釋,并在后面深入講解數學公式和代碼實現,讓你輕松看懂!


第一部分:YOLOv1——目標檢測的“快男”

YOLOv1 的誕生

YOLOv1 是 2015 年由 Joseph Redmon 等人提出的,它最大的特點就是“快”。在它之前,很多目標檢測模型(比如 R-CNN 系列)需要先找“可能有東西”的區域(region proposal),再去分類,這樣速度很慢。而 YOLOv1 說:“我不要兩步走,我要一步到位!”它把目標檢測看成一個回歸問題,直接從整張圖片預測出物體的位置和類別。

YOLOv1 的原理

想象你在玩一個游戲,面前有一張網格地圖,地圖被分成 7×7 的小格子。你的任務是:每個格子告訴我,里面有沒有東西(比如人、車、貓),如果有,它是什么,在格子里的具體位置是哪兒。YOLOv1 就是這么干的。它把圖片分成 S×S 的網格(默認是 7×7),每個格子負責預測:

  1. 有沒有物體(用一個概率值表示,叫做“置信度”)。
  2. 物體的邊界框(bounding box,用 4 個數字表示:中心點 x、y 坐標,寬度 w,高度 h)。
  3. 物體是什么類別(比如 20 個類別,就預測 20 個概率值)。

每個格子可以預測 B 個邊界框(YOLOv1 里 B=2),所以一張圖片總共預測 S×S×B 個邊界框。最終,模型會輸出一個巨大的張量(tensor),比如 7×7×30(后面會解釋為什么是 30)。

網絡架構

YOLOv1 的網絡靈感來自 GoogleNet,用了 24 個卷積層(卷積層就像是圖片的“特征提取器”)和 2 個全連接層(全連接層負責把特征整合起來做預測)。輸入一張 448×448 的圖片,經過層層卷積,最后輸出 7×7×30 的張量。為什么是 30 呢?因為每個格子預測 2 個邊界框(每個框有 5 個數:x, y, w, h + 置信度),加上 20 個類別的概率,所以是 2×5 + 20 = 30。

損失函數詳解

損失函數是模型的“老師”,告訴它預測得好不好。YOLOv1 的損失函數有三部分,我們來詳細拆解一下:

別被公式嚇到,我們拆解開來看。

通俗解釋

簡單說,YOLOv1 的損失函數就像一個評分表:框的位置準不準(定位),有沒有物體猜得對不對(置信度),類別分得清不清楚(分類)。通過調整權重(𝜆coordλcoord? 和 𝜆noobjλnoobj?),讓模型更關注框的位置,而不是過多懲罰沒物體的格子。

優點與缺點

  • 優點:快!因為只看一次圖片,FPS(每秒幀數)能達到 45,比 R-CNN 快得多。
  • 缺點:準度不夠高。因為每個格子只能預測 2 個框,小物體或密集物體容易漏掉,mAP(平均精度均值)只有 63.4% 左右。

第二部分:YOLOv2——更快更準的升級版

YOLOv2 的誕生

YOLOv1 雖然快,但精度不高,漏檢多。于是 2016 年,團隊推出了 YOLOv2(也叫 YOLO9000),目標是“更快、更準、能識別更多東西”。YOLOv2 不僅改進了架構,還能識別 9000 種物體,簡直是“全能選手”。

YOLOv2 的原理

YOLOv2 保留了“只看一次”的核心思想,但做了很多改進。比如,它不再固定用 7×7 網格,而是引入了錨框(anchor boxes)。錨框是什么?想象你在超市買東西,每個貨架上有不同形狀的盒子,YOLOv2 會先猜一些“標準盒子”(錨框),然后根據這些盒子微調出真實的邊界框。這樣,每個格子可以預測更多框(默認 5 個),小物體和密集物體檢測效果更好。

網絡架構

YOLOv2 拋棄了 GoogleNet,設計了一個新網絡叫 Darknet-19。它有 19 個卷積層和 5 個池化層,輸入圖片大小變成了 416×416(不是 448×448 了),輸出是 13×13 的網格。為什么是 13×13?因為 416 除以 32(卷積過程中的步幅)剛好是 13。每個格子預測 5 個錨框,輸出張量變成了 13×13×(5×(5+類別數))。

損失函數詳解

YOLOv2 的損失函數和 YOLOv1 類似,但優化了細節:

解釋一下:

通俗解釋

YOLOv2 的損失函數更聰明了。它不再直接預測框的位置,而是預測相對于錨框的偏移量,這樣模型更容易學到規律。置信度也更依賴 IoU,讓“框得好不好”更科學。

新特性

  1. Batch Normalization:加在卷積層后,加速訓練,提升精度。
  2. 高分辨率訓練:先用低分辨率訓練,再切換到高分辨率。
  3. 多尺度訓練:隨機調整輸入大小(比如 320×320 到 608×608)。

優點與缺點

  • 優點:精度提升到 mAP 78.6%,FPS 還能保持 67,實時性超強。
  • 缺點:對極小物體仍不夠敏感,復雜場景下仍有改進空間。

第三部分:YOLOv1 vs YOLOv2——全方位對比

網絡架構

  • YOLOv1:24 個卷積層 + 2 個全連接層,輸入 448×448,輸出 7×7 網格。
  • YOLOv2:Darknet-19(19 個卷積層),輸入 416×416,輸出 13×13 網格,去掉全連接層。

損失函數

  • YOLOv1:直接預測坐標,權重不平衡。
  • YOLOv2:預測錨框偏移量,用 IoU 優化置信度。

檢測能力

  • YOLOv1:2 個框/格子,適合大物體。
  • YOLOv2:5 個錨框/格子,小物體檢測更好。

性能指標

  • FPS:YOLOv1 約 45,YOLOv2 高達 67。
  • mAP:YOLOv1 為 63.4%,YOLOv2 提升到 78.6%。

第四部分:概念掃盲——mAP、FPS、IoU 等

mAP(平均精度均值)

mAP 是“總成績”,先算每個類別的 AP(精度-召回率曲線下面積),再平均。越高越好。

FPS(每秒幀數)

FPS 是速度指標,越高越適合實時應用。

精準率(Precision)和召回率(Recall)

  • 精準率:預測對的占預測總數的比例。
  • 召回率:找到的占真實總數的比例。

IoU(交并比)

IoU = 重疊面積 / 總面積,衡量框的準度。

YOLOv1 和 YOLOv2 是目標檢測的里程碑。YOLOv1 用“快”打開新思路,YOLOv2 在速度和精度上找到平衡。

第五部分:代碼示例

from ultralytics import YOLO# 加載預訓練的YOLO模型
model = YOLO('yolov8n.pt')  # 使用YOLOv8 nano模型,適合輕量級應用# 進行目標檢測
results = model('image.jpg')  # 輸入圖像文件路徑# 處理檢測結果
for result in results:boxes = result.boxes  # 獲取檢測框for box in boxes:x, y, w, h = box.xywh[0]  # 獲取坐標和寬高conf = box.conf.item()    # 獲取置信度cls = box.cls.item()      # 獲取類別print(f"檢測到目標:類別={cls}, 置信度={conf:.2f}, 坐標=({x:.1f}, {y:.1f}), 寬高=({w:.1f}, {h:.1f})")# 可視化結果(保存或顯示)
results[0].save()  # 保存帶檢測框的圖像

以上是一個簡單的Python代碼示例,直接調用YOLO庫進行目標檢測,強調應用場景(如監控或自動駕駛)。

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

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

相關文章

數據的存儲---整型、浮點型

目錄 一、整型在內存中的存儲 1. 原碼、反碼、補碼 2. 大端與小端 二、浮點數在內存中的存儲 1.浮點數的存 2. 浮點數的取 3. 題目解析 一個變量的創建需要在內存中開辟空間,而開辟的空間大小是由數據類型決定的。下面我們就來討論一下整型、浮點型在內存中的…

Java 大視界 -- Java 大數據在智能教育虛擬實驗室建設與實驗數據分析中的應用(132)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

??Jolt -- 通過JSON配置來處理復雜數據轉換的工具

簡介:一個能夠通過JSON配置(特定的語法)來處理復雜數據轉換的工具。 比如將API響應轉換為內部系統所需的格式,或者處理來自不同來源的數據結構差異。例如,將嵌套的JSON結構扁平化,或者重命名字段&#xff0…

47.全排列 II

47.全排列 II 力扣題目鏈接 給定一個可包含重復數字的序列 nums ,按任意順序 返回所有不重復的全排列。 示例 1: 輸入:nums [1,1,2] 輸出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 輸入:nums [1,2,3] 輸出…

centos沒有ll

vi /etc/bashrc alias ll‘ls -l’ source /etc/bashrc

04 1個路由器配置一個子網的dhcp服務

前言 這是最近一個朋友的 ensp 相關的問題, 這里來大致了解一下 ensp, 計算機網絡拓撲 相關基礎知識 這里一系列文章, 主要是參照了這位博主的 ensp 專欄 這里 我只是做了一個記錄, 自己實際操作了一遍, 增強了一些 自己的理解 當然 這里僅僅是一個 簡單的示例, 實際場景…

網絡空間安全(31)安全巡檢

一、定義與目的 定義: 安全巡檢是指由專業人員或特定部門負責,對各類設施、設備、環境等進行全面或重點檢查,及時發現潛在的安全隱患或問題。 目的: 預防事故發生:通過定期的安全巡檢,及時發現并解決潛在的…

在IGH ethercat主站中Domain和Entry之間的關系

在 IGH EtherCAT 主站中,“domain”(域)和 “entry”(條目)存在著緊密的關系,具體如下: 數據組織與管理方面:“domain” 是 EtherCAT 主站中用于管理和處理從站配置、數據映射和數據…

信息學奧賽一本通 1449:【例題2】魔板

題目 1449:【例題2】魔板 分析 首先注意:輸入是按順時針給出的,但我們處理時需要按正常順序排,可以用以下代碼讀入 string s(8, 0); // 初始化全零字符串 cin>>s[0]>>s[1]>>s[2]>>s[3]; cin>>…

Unity開發的抖音小游戲接入抖音開放平臺中的流量主(抖音小游戲接入廣告)

前言:作者在進行小游戲審核版本的過程中,碰到了下列問題,所以對這個抖音小游戲接入廣告研究了下。 還有就是作者的TTSDK版本號是6.2.6,使用的Unity版本是Unity2022.3.29f1,最好和作者的兩個版本號保持一致,因為我發現TTSDK舊版的很多函數在新版中就已經無法正常使用了,必…

【xv6操作系統】系統調用與traps機制解析及實驗設計

【xv6操作系統】系統調用與traps機制解析及實驗設計 系統調用相關理論系統調用追溯系統調用實驗設計Sysinfo🚩系統調用總結(結合trap機制) traptrap機制trap代碼流程Backtrace實驗alarm實驗 系統調用 相關理論 隔離性(isolation)…

Docker文件夾上傳秘籍Windows下的高效傳輸之道

哈嘍,大家好,我是木頭左! 一、理解Docker容器與Windows文件系統的差異 在深入探討如何從 Windows 系統將文件夾及遞歸文件夾和文件上傳到 Docker 容器之前,有必要先明晰 Docker 容器與 Windows 文件系統之間存在的本質差異。 (一)Docker 容器的文件系統特性 Docker 容…

08 | 實現版本號打印功能

提示: 所有體系課見專欄:Go 項目開發極速入門實戰課;歡迎加入 云原生 AI 實戰 星球,12 高質量體系課、20 高質量實戰項目助你在 AI 時代建立技術競爭力(聚焦于 Go、云原生、AI Infra);本節課最終…

在微信小程序或前端開發中,picker 和 select 都是用戶交互中用于選擇的組件,但它們在功能、設計和使用場景上有一定的區別

在微信小程序或前端開發中,picker 和 select 都是用戶交互中用于選擇的組件,但它們在功能、設計和使用場景上有一定的區別。 1. picker 的特點 描述: picker 是微信小程序中的原生組件,通常用于選擇單項或多項值,如時…

PMP 證書的含金量怎么樣?

pmp含金量,這是一個很有爭議的話題,我根據我以往的面試跟工作經歷對 PMP 也有幾點看法,想跟大家聊一聊。 一、如果真心想做項目管理,PMP 一定要去考一個 現在的早已不是憑經驗做項目的時代了,各大企業都追求專業式的…

Springboot連接neo4j

?一、Spring Data Neo4j 核心知識體系 ?1. 核心概念 ?圖數據庫特性: 數據以 ?節點(Node)? 和 ?關系(Relationship)? 形式存儲,支持屬性(Property)。查詢語言:Cyp…

我與DeepSeek讀《大型網站技術架構》- 大型網站架構技術一覽與Web開發技術發展歷程

文章目錄 大型網站架構技術一覽1. 前端架構2. 應用層架構3. 服務層架構4. 存儲層架構5. 后臺架構6. 數據采集與監控7. 安全架構8. 數據中心機房架構 Web開發技術發展歷程一、靜態HTML階段二、CGI腳本模式階段三、服務器頁面模式階段 大型網站架構技術一覽 1. 前端架構 瀏覽器…

Python數據類型進階——詳解

—— 小 峰 編 程 目錄 1.整型 1.1 定義 1.2 獨有功能 1.3 公共功能 1.4 轉換 1.5 其他 1.5.1 長整型 1.5.2 地板除(除法) 2. 布爾類型 2.1 定義 2.2 獨有功能 2.3 公共功能 2.4 轉換 2.5 其他 做條件自動轉換 3.字符串類型 3.1 定義 3.2 獨有功能…

GNU Binutils 全工具指南:從編譯到逆向的完整生態

1. GNU Binutils 全工具指南:從編譯到逆向的完整生態 1. GNU Binutils 全工具指南:從編譯到逆向的完整生態 1.1. 引言1.2. 工具分類速查表1.3. 核心工具詳解 1.3.1. 編譯與匯編工具 1.3.1.1. as(匯編器)1.3.1.2. gcc(…

docker python:latest鏡像 允許ssh遠程

跳轉到家目錄 cd創建pythonsshdockerfile mkdir pythonsshdockerfile跳轉pythonsshdockerfile cd pythonsshdockerfile創建Dockerfile文件 vim Dockerfile將Dockerfile的指令復制到文件中 # 使用 python:latest 作為基礎鏡像 # 如果我的鏡像列表中沒有python:latest鏡像&…