實時物體檢測:YOLO,YOLOv2和YOLOv3(一)
作者:Jonathan Hui
編譯:ronghuaiyang
導讀
昨天介紹了YOLOv3,發現大家對這一系列很感興趣,從今天開始,會連載YOLO,YOLOv3,YOLOv3的相關內容,讓大家更加清楚YOLO這一系列發展的過程。今天先介紹YOLO。
YOLO是一個以實時處理為目標的物體檢測系統。我們將在本文中介紹YOLO、YOLOv2和YOLO9000。對於那些只對YOLOv3感興趣的人,請轉到文章底部。以下是YOLO網站提供的準確性和速度對比。

我們從下面我們自己的測試影象開始。

使用YOLO進行物體檢測:

網格單元
為了便於討論,我們對原始照片進行了剪裁。YOLO將輸入影象劃分為 S × S 個網格。每個網格單元僅預測 一個 物件。例如,下面的黃 色 網 格單元格嘗試預測中心(藍點)位於網格單元格內的“person”物件。

每個網格單元預測固定數量的邊界框。在本例中,黃 色 網 格單元格預測兩個邊界框(藍色框)來定位人員的位置。

然而,一個網格只預測一個物體的規則限制了檢測到的物體之間的距離。因此,YOLO對物體之間的距離有一定的限制。如下圖所示,左下角有9個聖誕老人,而YOLO只能檢測到5個。

對於每個網格單元格,
- 預測 B 個邊界框,每個框有一個 box置信度得分
- 只檢測 一個 物件,而不考慮邊界框B的數量
- 預測 C個條件類的概率 (每個類有一個概率)
在Pascal VOC上進行評估,YOLO使用7×7網格(S×S),2個邊界框(B)和20個類(C)。

讓我們來了解更多的細節。每個邊界框包含5個元素:( x, y, w, h )和 box置信度得分 。置信度分數反映框中包含物件的可能性( object )以及邊界框的準確性。我們通過影象的寬度和高度對邊界框的寬度 w 和高度 h 進行規範化。 x 和 y 是對應單元格的偏移量。因此, x, y, w 和 h 都在0和1之間。每個單元格有20個條件類概率。條件類probability是檢測到的物體屬於特定類的概率(每個單元格的每個類別有一個概率)。所以YOLO的預測輸出的尺寸為(S, S, B×5 + C) = (7、7、2×5 + 20) = (7、7、30)。

YOLO的主要概念是建立一個CNN網路來預測一個(7,7,30)的張量。它使用一個CNN網路得到1024個通道的7×7的輸出。YOLO用兩個全連線層來進行7×7×2個邊界框的預測(下圖)。為了做出最終的預測,我們保留那些邊界框置信度得分高(大於0.25)的盒子邊界框作為最終的預測(右圖)。

每個預測框的 類置信度得分 計算為:

它度量分類和定位的(物體所在的位置)的置信度。
我們可以很容易地混淆那些得分和概率項。這是數學上的定義,供你以後參考。

網路設計

YOLO有24個卷積層,然後是2個全連線層(FC)。有些卷積層使用了1x1的卷積核來降低特徵圖的通道數。對於最後一個卷積層,它輸出一個形狀為(7,7,1024)的張量。然後張量被壓扁。使用2個全連線層,它輸出7×7×30個引數然後reshape成(7、7、30),即每個位置2個邊界框。
YOLO的一個更快但準確率較低的版本叫做Fast YOLO,只使用了9個卷積層和更少的feature map數量。
損失函式
YOLO預測每個網格單元有多個邊框。為了計算true positive的損失,我們只希望它們中的一個對該物體負責。為此,我們選擇了和ground truth具有最高IoU的那個。這種策略導致邊界框預測之間的專門化。每種預測都能更好地預測特定的尺寸和縱橫比。
YOLO使用預測和ground truth之間的平方和誤差來計算損失。損失函式包括:
- 分類損失 。
- 定位損失 (預測邊界框與ground truth之間的誤差)。
- 置信度損失 。
分類損失
如果物體被檢測到了,每個單元格的分類損失為每個類的條件概率類的平方誤差:

定位損失
定位損失測量的是預測的邊界框的位置和尺寸的誤差。我們只計算負責檢測物體的框。

我們不希望在大框和小框中對絕對誤差進行同等的加權。例如,一個大框的2畫素誤差和一個小框的2畫素誤差是一樣的。為了部分解決這個問題,YOLO預測邊框寬度和高度的平方根,而不是寬度和高度。此外,更加重視邊界框的準確性,我們將這個損失乘以λcoord(預設值是5)。
置信度損失
如果在一個框中,有物體被檢測到了,置信度的損失為:

如果在一個框中,沒有物體檢測到,置信度損失為:

大多數框不包含任何物體。這就造成了類不平衡的問題,即我們訓練模型檢測背景的頻率比檢測物體的頻率要高。為了彌補這一點,我們將這個損失的權重降低,通過一個因子λnoobj(預設值為0.5)。
損失
最終的損失包括定位損失、置信度損失和分類損失。

推理:非極大值抑制
YOLO會對同一物體進行重複檢測。為了解決這個問題,YOLO使用了非最大抑制來刪除置信度較低的重複的框。非最大抑制在對mAP能增加2-3%。
下面是其中一種非最大抑制實現:
- 根據置信度得分對預測進行排序。
- 從最高分開始,如果我們發現任何一個預測,和之前的預測有相同的類並且IoU > 0.5,那麼就忽略掉當前的預測。
-
重複步驟2,直到檢查完所有預測。
YOLO的優點
- 快,適合實時處理。
- 預測(物體位置和類)由單個網路進行。可進行端到端訓練,提高精度。
- YOLO更一般化。當從自然影象推廣到其他領域(如藝術品)時,它的效能優於其他方法。

- 區域建議方法將分類器限制在特定區域。YOLO在預測邊界框時訪問整個影象,YOLO在背景區域顯示的假陽性更少。
- YOLO每個網格單元檢測一個物件。它加強了預測的空間多樣性。
<未完,明天繼續>
英文原文:https://medium.com/@jonathan_hui/real-time-object-detection-with-yolo-yolov2-28b1b93e2088
https://www.toutiao.com/a6722781602394407438/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2653127/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物體檢測實戰:使用 OpenCV 進行 YOLO 物件檢測OpenCVYOLO物件
- C 語言實現物體檢測:使用 YOLO 模型YOLO模型
- 物體檢測(YOLO)示例:使用 C 語言YOLO
- 借用Ultralytics Yolo快速訓練一個物體檢測器YOLO
- 使用 YOLO 進行實時目標檢測YOLO
- 使用 C++ 呼叫 YOLOv3 模型進行物體檢測C++YOLO模型
- YoloDotNet v2.1:實時物體檢測的利器YOLO
- 【目標檢測】2萬字詳解 RCNN系列 YOLO系列 YOLOv3程式碼實現全流程詳解 pytorchCNNYOLOPyTorch
- 使用 Rust 和 OpenCV 進行物體檢測RustOpenCV
- AI影片物體檢測AI
- 目標檢測之YOLO系列YOLO
- YOLO演算法(三)—— Yolov3 & Yolo系列網路優缺點YOLO演算法
- 30秒輕鬆實現TensorFlow物體檢測
- 這才是目標檢測YOLOv3的真實面目YOLO
- OPCV 移動物體檢測
- yolo5+gradio影片檢測案例YOLO
- Halcon缺陷檢測例項轉OpenCV實現(三) 物體凸缺陷檢測OpenCV
- 《DNK210使用指南 -CanMV版 V1.0》第四十一章 YOLO2物體檢測實驗YOLO
- 實驗18-使用TensorFlow完成影片物體檢測
- 目標檢測網路之 YOLOv3YOLO
- 深度有趣 | 11 TensorFlow物體檢測
- openCV檢測物體是否運動OpenCV
- 基於OpenCV和YOLOv3深度學習的目標檢測OpenCVYOLO深度學習
- pytorch實現yolov3(5) 實現端到端的目標檢測PyTorchYOLO
- 【YOLO目標檢測實戰 】3.使用YOLO11訓練COCO128資料集YOLO
- 目標檢測 YOLO v3 訓練 人臉檢測模型YOLO模型
- 物體檢測、影像分割技術概述
- 3D物體檢測、行為預測和運動檢測全涵蓋,一文解析鐳射雷達中時序融合的研究現狀和發展方向3D
- SSD物體檢測演算法詳解演算法
- 整合多種YOLO改進點,面向小白科研的YOLO檢測程式碼庫YOLOAirYOLOAI
- 三分鐘:極速體驗JAVA版目標檢測(YOLO4)JavaYOLO
- WINDOWS下 YOLOV3/YOLOV4 CPU 檢測驗證WindowsYOLO
- 從零開始PyTorch專案:YOLO v3目標檢測實現PyTorchYOLO
- 目標檢測 YOLO v3 驗證 COCO 模型YOLO模型
- 單級式目標檢測方法概述:YOLO與SSDYOLO
- AI學習筆記(十二)物體檢測(上)AI筆記
- 基於ARkit和SceneKit檢測相機位置和設定2個物體碰撞的事件事件
- 使用 Go 語言與 OpenCV 進行物體檢測GoOpenCV