《You Only Look Once: Unified, Real-Time Object Detection》YOLO一种实时目标检测方法 阅读笔记(未完成版)
文章目錄
- 1. one-stage與two-stage檢測算法
- 1. 模型過程
- 1.1 grid cell
- 1.2 bounding box與confidence score
- 1.3 類別預測
- 1.4 預測目標
- 2. 網絡的學習
- 2.1 網絡輸出的數據與預測集數據
- 2.2 損失函數
- 2.3 網絡的設計
1. one-stage與two-stage檢測算法
two-stage:
one-stage目標檢測算法:一步到位,速度較快。
yolo_v1的基本思想:預測框的位置、大小和物體分類都通過CNN暴力predict出來。
1. 模型過程
yolo v1進行目標檢測的過程如下圖所示
就拿yolo如何檢測出這只小狗的過程來說,引出yolo是如何進行目標檢測和在這個過程中的相關概念。
1.1 grid cell
首先,將圖片分為7*7的網格,每個網格叫做grid或則和grid cell。所以一張圖片有49個grid。如果一個目標的中心位置落在某個格子,那么這個格子就負責檢測出這個目標(If the center of an object falls into a grid cell, that grid cell is responsible for detecting that object.)。比如下面狗的中心落在(5,2)grid,所以該grid負責預測狗。
1.2 bounding box與confidence score
上文中含有小狗中心的那個grid cell會預測2個bounding boxes(邊界框)和這些框框的confidence scores(置信度分數)。
這些confidence scores反映了模型對框中包含對象的置信度,以及它認為框預測的準確性。也就是一個bounding box對應一個confidences score。
在這里,需要明確一點,一個grid cell會有多個bounding box,而每個bounding box會有一個confidence score。比如,下面的一個grid cell就有三個bounding box。每個bounding box會對應一個confidences score。
其中,confidences score的定義公式為:
置信度=Pr(Object)?IOUpredtruth置信度=Pr(Object)*IOU^{truth}_{pred} 置信度=Pr(Object)?IOUpredtruth?
其中,Pr(Object)代表bounding box對應的grid cell中是否有含有物體中心。若有,為1,若沒有,則為0(沒有的話,計算IOU沒有任何意義)。
關于IOU,它表示的是真實框與預測框的交并比。其意義如下圖所示。
所以confidences score代表其所對應的bounding box預測能力的強弱。
每個bounding box有5個屬性,x、y、w、h和confidence core。(x,y)表示的是某個grid cell下的bounding box的中心(The (x, y) coordinates represent the center of the box relative to the bounds of the grid cell.)。w和h表示預測的圖片的寬和高(個人理解,w和h就是bounding box的寬和高)。最后,confidence反應的是預測圖像和真實圖像的IOU。
1.3 類別預測
每個grid cell有預測C個條件概率:Pr(Classi|Object),即在一個grid cell包含一個Object的前提下,它屬于某個類的概率。 每個網格單元預測一組類概率,不管框的數量是多少。也就是說,類別預測只是跟grid cell是相關的,與這個grid cell有多少個bounding box無關。
最終每個網格會得到一個30維度向量。
所以,最后一張圖片會生成一個7730的張量。
其中,置信度confidence score計算為
所以上面說的類別預測的條件概率乘以單個盒子的置信度即:
=Pr(Classi)?IOUpredtruth=Pr(Class_{i})*IOU^{truth}_{pred} =Pr(Classi?)?IOUpredtruth?
這個給了我們每個box一個分數特殊類別預測。這些分數編碼了類出現在框中的概率以及預測框與對象的匹配程度。
1.4 預測目標
在測試階段,將每個網格的類別預測與每個 bounding box的 confidence相乘:
在有目標中心的情況下,即Pr(Object)不等于0
Pr(Classi∣Object)?置信度=Pr(Classi∣Object)?Pr(Object)?IOUpredtruth=Pr(Classi)?IOUpredtruthPr(Class_{i}|Object)*置信度=Pr(Class_{i}|Object)*Pr(Object)*IOU^{truth}_{pred} =Pr(Class_{i})*IOU^{truth}_{pred} Pr(Classi?∣Object)?置信度=Pr(Classi?∣Object)?Pr(Object)?IOUpredtruth?=Pr(Classi?)?IOUpredtruth?
這是我看到的一篇博客的圖。
在訓練過程中,關于拿如何把狗這個對象預測出來。整個過程有三點:
首先,將整個圖片分成S*S個grid cell(網格)。每個grid cell會預測B個(多個)
2. 網絡的學習
對于上面的過程,可能會有如下疑問:
2.1 網絡輸出的數據與預測集數據
由1中可知,神經網絡每次回輸出7730(即SS(B*5+C))的張量。
對于每個網格會輸出一個30維張量。
同時,我們的數據集經過處理過后,會有一個25維的張量(一個真實框+類別)。
拿預測的值和真實值進行對比。以此達到訓練的目的。
所以:
2.2 損失函數
損失函數的設計目標就是讓坐標(x,y,w,h),confidence,classification 這個三個方面達到很好的平衡。
2.3 網絡的設計
YOLO的檢測網絡分為24個卷積層和2個全連接層,如下圖所示:
其中,卷積層用來提取圖像特征,全連接層用來預測圖像位置和類別概率。
總結
以上是生活随笔為你收集整理的《You Only Look Once: Unified, Real-Time Object Detection》YOLO一种实时目标检测方法 阅读笔记(未完成版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow学习笔记之四(MNI
- 下一篇: log4j2使用笔记