---
# System prepended metadata

title: YOLO 物件偵測模型
tags: [機器學習]

---

# YOLO 物件偵測模型

**YOLO (You Only Look Once)** 是一種用於**物件偵測**的深度學習模型，能在**單次神經網路運算**中，同時完成物件的**分類**和**定位**。它的特色是**高速且準確**，特別適用於需要即時反應的應用，例如自駕車、監控系統或機器人視覺。YOLO 的模型會將整張影像分割為多個網格，每個網格都負責預測該區域內的物件類別與邊界框（bounding box）。  

>**YOLO 的核心概念 :**
>1. **單次預測：**  
   YOLO 將物件偵測任務轉化為**迴歸問題**，由輸入影像直接預測出邊界框及類別，而不需要像傳統方法一樣進行多次區域提案及分類。
>
>2. **高效：**  
   因為 YOLO 只需一次前向傳遞（forward pass），相比其他演算法如 R-CNN 等，它在速度上有極大優勢，可以達到每秒數十張影像（FPS）。
>
>3. **全局資訊考量：**  
   YOLO 是基於整張影像進行偵測，因此對背景和前景的區分會較準確，不容易將背景誤認為物件。

> **YOLO 的應用場景 :**
>- **自駕車**：即時偵測行人、車輛、交通標誌等物體。
>- **安全監控**：辨識可疑行為或入侵者。
>- **零售業**：商品識別或貨架管理。
>- **醫學影像**：檢測病灶或異常區域。

> **YT 實際運用 YOLO 完成特定任務的影片 :**
> - [YOLOv8 Comparison with Latest YOLO models](https://youtu.be/QOC6vgnWnYo?si=bZcOAGwy5FjKiqBp)  (30 秒)
> - [Coffee Shop AI - Barista Tracking](https://youtu.be/dHcxTmU6atk?si=cUYAXK8gNtzJdw-W)  (26 秒)
    p.s 看 YT 留言這應該只是 YOLO8 + 計時動態影像，但我覺得應該沒那麼單純。
因為 YOLO 若要精細辨識每位員工的命名，需要較大的資料量。但咖啡廳並不像監視系統可以調閱大量的監視器錄像，一個咖啡廳也不太可能向員工索取大量的影像訓練模型。
我認為它可能加入了動態追蹤技術，因為在員工不會離開該監視器拍攝範圍的前提下，我只要一開始就設定好每個藍色框的名稱，就能達到相同的效果；而且影片中，模型會顯示每個員工的移動軌跡，這就很有動態追蹤技術的味道。但這樣做的缺點就是每天上班前都要重新設定每個藍色框的名稱，相較麻煩....

接下來我們來深入了解 YOLO 到底是什麼吧 !
以下內容是從多篇 YOLO 相關的論文中，整理而成。
其中加入了不少自己的理解與補充，若內容有誤歡迎留言討論~ 謝謝!!


## Atract

> 我們提出了 <font color='yellow'>YOLO，一種新的物件檢測方法。以前的物件檢測工作重新使用分類器進行檢測。相反，我們將物件檢測視為一個回歸問題，以空間分離的邊界框和相應的類別概率為目標。</font>一個單一的神經網絡可以在一次評估中直接從完整圖像中預測邊界框和類別概率。由於整個檢測流程是一個單一的網絡，因此可以直接優化檢測性能，實現端到端的最佳化。

> 我們的統一架構極其快速。我們的基本 YOLO 模型以每秒 45 幀的速度實時處理圖像。網絡的縮小版本，Fast YOLO，在仍然實現其他實時檢測器雙倍 mAP 的情況下，每秒處理驚人的 155 幀。<font color='yellow'>與最先進的檢測系統相比，YOLO 可能會產生更多的定位錯誤，但不太可能對背景進行假陽性的預測。最後，YOLO 泛化能力極高，對於大多數的物件我們都能使用它。</font>甚至從自然圖像推廣到其他領域（如藝術品）時，它優於其他檢測方法，包括 DPM 和 R-CNN。

## **1. Introduction**

> 人類在瞬間瀏覽一張圖像並立即知道圖像中有哪些物體，它們在哪裡以及它們之間的互動方式。人類視覺系統迅速而準確，使我們能夠執行像開車這樣的複雜任務，而幾乎不需要意識的思考。對於物體檢測的快速、準確的算法將使計算機能夠在沒有專門的傳感器的情況下駕駛汽車，使輔助設備能夠向人類用戶傳遞實時場景信息，並發揮通用、反應靈敏的機器系統的潛力。

> <font color='yellow'>目前的檢測系統重新利用分類器進行檢測。為了檢測一個物體，這些系統使用該物體的分類器並在測試圖像的不同位置和尺度上評估它。</font>像可變形部件模型<font color='PINK'>（DPM）這樣的系統使用滑動窗口方法</font>，在整個圖像上均勻分布的位置上運行分類器。

> 更近期的方法，如<font color='PINK'>R-CNN，使用區域提議方法首先在圖像中生成潛在的邊界框</font>，然後對這些提議的框運行分類器。在分類之後，使用後處理來精煉邊界框，消除重複的檢測，並根據場景中的其他物體對這些框進行重新評分。這些複雜的流程速度緩慢，難以優化，因為每個單獨的組件必須單獨訓練。

> <font color='yellow'>我們將目標檢測重新構想為一個單一的回歸問題，直接從圖像像素轉換為邊界框座標和類別概率。使用我們的系統，您只需一次（YOLO）查看圖像，即可預測出存在哪些物體以及它們的位置。</font>

![image](https://hackmd.io/_uploads/HymUjc3gJl.png)

> <font color='yellow'>YOLO令人耳目一新地簡單：參見圖1。一個卷積網路同時預測多個邊界框和這些框的類別概率。</font> YOLO在完整圖像上進行訓練，直接優化檢測性能。這種統一的模型相比於傳統的物體檢測方法具有幾個優勢。

> <font color='pink'>首先，YOLO極為快速。由於我們將檢測視為回歸問題，因此不需要複雜的流程。</font>在測試時，我們只需在新圖像上運行神經網絡以預測檢測結果。我們的基本網絡在Titan X GPU上以每秒45幀運行，而快速版本在150多幀以上運行。這意味著我們可以實時處理流式視頻，延遲不到25毫秒。此外，YOLO的平均精度優於其他實時系統的兩倍以上。有關我們系統實時運行攝像頭演示的詳細信息，請參見我們的項目網頁：http://pjreddie.com/yolo/。

> <font color='pink'>其次，YOLO在進行預測時對圖像進行全局推理。</font>與基於滑動窗口和區域提議的技術不同，YOLO在訓練和測試時均看到整個圖像，因此它隱含地編碼了有關類別以及它們外觀的上下文信息。Fast R-CNN，一種頂級的檢測方法，在圖像辨識中，就常犯下將背景補丁認為對象的錯誤，因為它無法看到更大的上下文。與Fast R-CNN相比，YOLO的背景錯誤數量不到一半。

> <font color='pink'>第三，YOLO學習到對象的通用表示(泛化能力)。</font>當在自然圖像上進行訓練並在藝術作品上進行測試時，YOLO在性能上遠優於像DPM和R-CNN等頂級檢測方法。由於YOLO具有很強的通用性，因此在應用於新的領域或意外輸入時，它不太容易崩潰。

> <font color='pink'>但YOLO在準確性上仍然落後於最先進的檢測系統。原因在於雖然它能夠快速識別圖像中的對象，但在精確定位某些物件，特別是小對象方面存在困難，導致其準確度因此降低</font>。我們在實驗中進一步探討了這些權衡。

> 我們所有的訓練和測試代碼均為開源。還提供了各種預訓練模型供下載。


## **2. Unified Detection**

> 我們將目標檢測的各個組件統一為單一的神經網絡。我們的網絡使用整個圖像的特徵來預測每個邊界框。它還同時為圖像中的所有類別預測所有邊界框。這意味著我們的網絡在整個圖像和圖像中的所有物體上進行全局推理。YOLO的設計實現了端到端的訓練和實時速度，同時保持高平均精度。

> 我們的系統將輸入圖像分為一個 *S × S* 的網格。如果物體的中心落入網格單元格中，該網格單元格負責檢測該物體。

> <font color='yellow'>每個網格單元格預測 *B* 個邊界框和這些邊界框的置信度分數。</font> 這些置信度分數反映了模型認為該框包含對象的信心程度，以及它認為它所預測的框的準確性。正式地，我們將<font color='pink'>置信度定義為 $Pr(Object) \times IOU^{truth}_{pred}$</font> 。如果該單元格中不存在對象，則置信度分數應為零。否則，我們希望置信度分數等於預測框與地面實況之間的交集與聯集（IOU）。

> <font color='yellow'>每個**邊界**框包含 5 個預測：*x、y、w、h* 和 置信度。</font>其中 (*x, y*) 座標表示該框相對於網格單元格邊界的中心。寬度 (*w*) 和高度 (*h*) 相對於整個圖像進行預測。最後，置信度預測表示預測框與任何實際框之間的 IOU。

> <font color='yellow'>每個**網格**單元還會預測 *C* 個條件類別概率，即 $Pr(Class_i | Object)$ 。</font>這些概率是以網格單元包含一個對象為條件的。我們每個網格單元只預測一組類別概率，而不管框的數量 *B*。

> <font color='yellow'>在測試時，我們將條件類別概率和單個框的置信度預測相乘，這為我們提供了每個框的特定類別置信度分數。</font>這些分數既編碼了該類別出現在框中的概率，也編碼了預測框與對象的契合程度。

>**註:**
>在目標檢測中，當模型預測物體位置時，其預測的邊界框可能與真實物體的位置不完全吻合。為了衡量這種預測的準確性，可以使用交集與聯集的比例，即 IOU（Intersection over Union）。
>
>* 交集指的是預測框和真實框相交的區域的大小。
>
>* 聯集指的是預測框和真實框合併後的區域的大小。
>
><font color='pink'>IOU 被定義為交集區域面積除以聯集區域面積，其值範圍在 0 到 1 之間。</font>當預測框完全精確地與真實框重合時，IOU 為 1；當預測框與真實框完全不重合時，IOU 為 0。這個度量通常用來評估目標檢測模型的準確性和性能

![image](https://hackmd.io/_uploads/r1e3s52lJl.png)

![image](https://hackmd.io/_uploads/BJO3j92xJg.png)


### **2-1. Network Design**

> 我們將這個模型實現為一個卷積神經網絡，並在PASCAL VOC檢測數據集上進行評估。網絡的初始卷積層從圖像中提取特徵，而完全連接的層則預測輸出的概率和坐標。

> <font color='yellow'>我們的網絡架構受到GoogLeNet圖像分類模型的啟發。我們的網絡有24個卷積層，後面跟著2個全連接層。我們沒有使用GoogLeNet的inception模塊，而是使用1×1的減少層，然後是3×3的卷積層，類似於Lin等人的方法。完整的網絡顯示在圖3中。</font>

![image](https://hackmd.io/_uploads/rJ3eh9nlye.png)

>**註 :**
>- 關於 1×1 的卷積層(K=1, P=0, S=1)....
>當你提到 1×1 卷積層減少了特徵空間時，它實際上是指透過 1×1 卷積操作，可以對特徵通道數量進行調整，而不是對特徵空間（feature space）進行減少。這種操作可以用來控制特徵的維度，從而影響模型的計算量和表示能力。
>
>- 關於 分辨率....
>至於分辨率，它是指圖像的清晰度或像素密度，通常以像素為單位表示。分辨率的計算是根據圖像的寬度和高度來進行的，例如，一張 224 × 224 的圖像意味著它有 224 個像素的寬度和 224 個像素的高度。
    在這個情境中，模型在 ImageNet 分類任務上使用一半分辨率的圖像（224 × 224）進行預訓練，然後在目標檢測任務中，將圖像的分辨率加倍。這意味著模型在預訓練時使用較低分辨率的圖像進行訓練，但在目標檢測時，會使用較高分辨率的圖像進行處理和預測。這樣的設計有助於在不同任務之間共享模型權重，同時在更高分辨率的圖像上進行目標檢測。
    
> 此外，我們還訓練了一個旨在推動快速目標檢測極限的YOLO快速版本。Fast YOLO使用的神經網絡具有較少的卷積層（9個而不是24個）和這些層中的較少濾波器。除了網絡的大小外，YOLO和Fast YOLO之間的所有訓練和測試參數都是相同的。

> 我們網絡的最終輸出是7 × 7 × 30的預測張量。

### **2-2. Training**

> 我們在ImageNet 1000類別競賽數據集上預先訓練我們的卷積層。對於預訓練，我們使用圖3中的前20個卷積層，然後是一個平均池層和一個全連接層。我們對這個網絡進行了大約一周的訓練，在ImageNet 2012驗證集上實現了88%的單次裁剪top-5準確性，與Caffe的Model Zoo中的GoogLeNet模型相當。我們使用Darknet框架進行所有訓練和推斷。

> 然後，我們轉換模型以進行檢測。Ren等人顯示，將預訓練的網絡添加卷積層和連接層可以提高性能。在他們的示例中，我們添加了四個卷積層和兩個帶有隨機初始化權重的全連接層。檢測通常需要細緻的視覺信息，因此我們將網絡的輸入分辨率從224 × 224增加到448 × 448。

> 我們的最後一層同時預測類別機率和邊界框座標。我們將邊界框的寬度和高度標準化為圖像的寬度和高度，使它們介於0和1之間。我們使用參數化的方式將邊界框的*x*和*y*座標設置為特定網格單元位置的偏移，以便它們也被限制在0和1之間。

> 我們對最後一層使用線性激活函數，而所有其他層使用以下<font color='yellow'>帶泄漏的矩形線性激活函數：</font>

![image](https://hackmd.io/_uploads/B1RA2q2lyg.png)

> 我們針對模型輸出的總平方誤差進行優化。<font color='yellow'>我們使用總平方誤差是因為這很容易優化，但它並不完全符合我們最大化平均精度的目標。</font>它將<font color='Lime'>定位錯誤與分類錯誤同等加權，這可能不是理想的。</font>此外，在每個圖像中，<font color='Lime'>許多網格單元不包含任何對象。這將這些單元的“置信度”分數推向零，通常會壓倒包含對象的單元的梯度。這可能導致模型不穩定，使訓練在早期發散。
</font>

> 為了補救這個問題，我們增加了對邊界框座標預測的損失，並減少了對不包含物體的邊界框的置信度預測的損失。我們使用<font color='Lime'>兩個參數， $λ_{coord}$ 和 $λ_{noobj}$ 來完成這個操作。</font>我們設置 $λ_{coord} = 5$ 和 $λ_{noobj} = 0.5$ 。

> <font color='Cyan'>總平方誤差還同等加權大框和小框中的錯誤。</font>我們的誤差度量應該反映出在大框中的小偏差比在小框中的小偏差更不重要。為了**部分**解決這個問題，我們<font color='Cyan'>預測的是框寬和高的平方根，而不是直接預測寬和高。
</font>

> <font color='Violet'>YOLO在每個格子中預測多個邊界框。在訓練時，我們只希望每個物體有一個邊界框預測器負責。我們指定一個預測器“負責”基於當前預測與地面實況的IOU最高，這導致邊界框預測器之間的專業化。</font>每個預測器在預測某些尺寸、長寬比或對象類別方面變得更好，提高整體召回率。

> 在訓練期間，我們優化以下的<font color='yellow'>多部分損失函數：</font>

![image](https://hackmd.io/_uploads/BkKla5hg1l.png)

> 其中， $1^{obj}_{i}$ 表示物體是否出現在單元格 $i$ 中， $1^{obj}_{ij}$ 表示在單元格 $i$ 中第 $j$ 個邊界框預測器“負責”該預測。

> <font color='pink'>請注意，損失函數只在該單元格中存在物體時懲罰分類錯誤（因此前面提到的條件類別概率）。它還只在該預測器“負責”地面實際框時（即在該單元格中具有最高 IOU 的任何預測器）懲罰邊界框坐標錯誤。</font>

> 我們在PASCAL VOC 2007和2012的訓練和驗證數據集上訓練網絡約 135 個時期。在2012年的測試中，我們還包括VOC 2007的測試數據進行訓練。在整個訓練過程中，我們使用了64的批量大小，動量為0.9，衰減為0.0005。

> 我們的學習率安排如下：在最初的幾個時期，我們將學習率從 $ 10^{-3} $ 慢慢提升到 $ 10^{-2} $ 。如果我們從一個很高的學習率開始，我們的模型通常會因為不穩定的梯度而發散。我們繼續使用 $ 10^{-2} $ 進行75個時期的訓練，然後使用 $ 10^{-3} $ 進行30個時期的訓練，最後使用 $ 10^{-4} $ 進行30個時期的訓練。

> 為了避免過度擬合，我們使用了輸出層後dropout（丟棄）和大量的數據擴增。在第一個全連接層後使用dropout層，dropout率為0.5，以防止層之間的協同適應。對於數據擴增，我們引入了對原始圖像大小的20%的隨機縮放和平移。我們還在HSV色彩空間中對圖像的曝光和飽和度進行隨機調整，最大調整倍率為1.5。

### **2-3. Inference**

> 就像在訓練中一樣，對測試圖像進行檢測只需要進行一次網絡評估。在PASCAL VOC上，該網絡對每張圖像預測98個邊界框和每個框的類別概率。由於YOLO在測試時只需要進行一次網絡評估，因此非常快速，這與基於分類器的方法不同。

> 網格設計強制在邊界框預測中實施空間多樣性。通常，對象位於哪個網格單元內是明確的，網絡只對每個對象預測一個框。但是，對於一些大對象或靠近多個單元格邊界的對象可能被多個單元格很好地定位，非極大值抑制可以用來修復這些多重檢測。雖然YOLO對於性能的要求，可能不像對於R-CNN或DPM那樣重要，但非極大值抑制可以增加2-3%的mAP。

### **2-4. Limitations of YOLO**

> YOLO對邊界框的預測施加強烈的空間限制，因為<font color='yellow'>每個網格單元僅預測兩個框 (在本實驗中B=2)，並且只能有一個類別。這種空間約束限制了我們的模型可以預測的附近對象的數量。我們的模型在出現成群的小對象時效果不佳，例如一群鳥。</font>

> <font color='yellow'>由於我們的模型從數據中學習預測邊界框，它在推理具有新的或不尋常的縱橫比或配置的對象時效果較差。</font>由於我們的架構從輸入圖像具有多個下採樣層，因此我們的模型還使用相對粗糙的特徵來預測邊界框。

> 最後，<font color='yellow'>儘管我們基於一個近似檢測性能的損失函數進行訓練(即開根號框寬與框高)，但我們的損失函數在小邊界框和大邊界框中對待錯誤是相同的。</font>在大邊界框中的小錯誤通常是無害的，但在小邊界框中的小錯誤對IOU有更大的影響。我們的主要錯誤源於不正確的定位。


## **3. Comparison to Other Detection Systems**

> 物體檢測是計算機視覺中的核心問題。檢測流程通常始於從輸入圖像中提取一組強健的特徵（如Haar、SIFT、HOG、卷積特徵）。然後，使用分類器或定位器在特徵空間中識別物體。這些分類器或定位器在整個圖像上以滑動窗口方式運行，或者在圖像的某些區域子集上運行。我們將YOLO檢測系統與幾個頂級檢測框架進行比較，突顯主要的相似性和區別。

> **Deformable parts models.** 可變形部件模型（DPM）使用滑動窗口方法進行物體檢測。DPM使用一個不連接的流程來提取靜態特徵，對區域進行分類，預測高分區域的邊界框等。我們的系統用單一的卷積神經網絡替換了所有這些不同的部分。該網絡同時執行特徵提取、邊界框預測、非極大值抑制和上下文推理。網絡不使用靜態特徵，而是在線培訓特徵並將其優化為檢測任務。我們的統一架構使得模型比DPM更快、更準確。

> **R-CNN.** R-CNN及其變種使用區域提議而不是滑動窗口來在圖像中找到物體。Selective Search生成潛在的邊界框，卷積網絡提取特徵，一個SVM對這些框進行打分，一個線性模型調整邊界框，非極大值抑制消除重復檢測。這個復雜的流程的每個階段都必須被獨立精確調整，結果系統非常緩慢，在測試時每張圖像需要超過40秒。

> YOLO與R-CNN有一些相似之處。每個網格單元提出潛在的邊界框並使用卷積特徵對這些框進行打分。然而，我們的系統對網格單元提出了空間約束，有助於減輕對同一物體的多次檢測。我們的系統還提出的邊界框要少得多，每個圖像只有98個，而Selective Search約有2000個。最後，我們的系統將這些個別的組件合併成一個單一、聯合優化的模型。

> **Other Fast Detectors** 其他快速檢測器如Fast和Faster R-CNN專注於加速R-CNN框架，通過共享計算並使用神經網絡提出區域，而不是使用Selective Search。雖然它們在速度和準確性上相對於R-CNN有所提升，但仍無法達到實時性能。

> 許多研究工作都集中在加速DPM管線。它們加速HOG計算，使用級聯，並將計算推送到GPU。然而，只有30Hz的DPM實際上運行在實時模式。

> 不同於試圖優化龐大檢測管道的各個組件，YOLO完全放棄了這個管道，其快速設計是其特點。

> 針對單一類別的檢測器，如臉部或人物，可以進行高度優化，因為它們需要應對較少的變異。 YOLO是一個通用檢測器，能夠同時學習檢測多種物體。

> **Deep MultiBox.** 不同於R-CNN，Szegedy等人訓練一個卷積神經網絡來預測感興趣區域，而不是使用Selective Search。MultiBox也可以通過將置信度預測替換為單一類別預測來執行單一對象檢測。然而，MultiBox無法執行通用物體檢測，仍然只是更大檢測流程中的一部分，需要進一步進行圖像補丁分類。YOLO和MultiBox都使用卷積網絡來預測圖像中的邊界框，但YOLO是一個完整的檢測系統。

> **OverFeat.** Sermanet等人訓練了一個卷積神經網絡來執行定位，並適應該本地化器以執行檢測。OverFeat有效地執行滑動窗口檢測，但它仍然是一個不連貫的系統。OverFeat優化的是定位而不是檢測性能。與DPM一樣，本地化器在進行預測時僅看到局部信息。OverFeat無法推理全局上下文，因此需要進行大量後處理以生成連貫的檢測結果。

> **MultiGrasp.** 我們的工作在設計上與Redmon等人對抓取檢測的工作相似。我們對於邊界框預測的網格方法基於MultiGrasp系統的抓取回歸。然而，抓取檢測比物體檢測要簡單得多。MultiGrasp只需為包含一個物體的圖像預測一個可抓取的區域。它不必估計物體的大小、位置或邊界，也不必預測它的類別，只需找到一個適合抓取的區域。而YOLO在圖像中為多個物體的多個類別同時預測邊界框和類別概率。

>**註 :**
>MultiGrasp 是一種針對抓取檢測的系統，與傳統物體檢測有所不同。其主要目標是尋找圖像中適合抓取的區域，而不是預測物體的大小、位置、邊界或類別。
>
>其運作方式如下：
>
>1. **抓取檢測焦點：** MultiGrasp 的目標是找到圖像中適合抓取的區域。這可能是物體表面的某個部分，例如可以輕易被機器手臂夾取的位置或特定的結構。
>
>2. **不需預測物體屬性：** 這種系統不需要預測物體的大小、位置、邊界或類別。相比於物體檢測，它不需要理解圖像中的物體是什麼，也不需要準確定位物體的邊界框。
>
>3. **單一區域預測：** MultiGrasp 只需為包含單個物體的圖像預測一個適合抓取的區域。這個區域可能是物體的一部分，並不需要對整個物體進行檢測或定位。
>
> 在這部份，我認為作者的意思是 MultiGrasp 著眼於找到適合抓取的區域，而不需理解物體的完整性、定位邊界框或預測物體的類別。這種方法更加簡化了任務，因為它專注於檢測可供機器手臂抓取的位置，而不需深入物體的特性或認知。


## **4. Experiments**

> 首先，我們將YOLO與其他實時檢測系統在PASCAL VOC 2007上進行比較。為了了解YOLO與R-CNN變體之間的差異，我們探索了YOLO和Fast R-CNN（R-CNN的性能最高版本之一）在VOC 2007上的錯誤。基於不同的錯誤特點，我們展示了YOLO可以用於重新評分Fast R-CNN的檢測結果，減少背景誤報的錯誤，從而顯著提升性能。我們還呈現了VOC 2012的結果，並將mAP與當前最先進的方法進行了比較。最後，我們展示了YOLO在兩個藝術品數據集上比其他檢測器更好地泛化的情況。

### **4-1. Comparison to Other Real-Time Systems**

> 許多物體檢測的研究工作集中在加速標準的檢測流程上。然而，只有Sadeghi等人實際上製作了一個實時運行的檢測系統（每秒30幀或更快）。我們將YOLO與他們的DPM GPU實現進行比較，該實現運行速度為30Hz或100Hz。雖然其他努力未達到實時里程碑，但我們也比較它們的相對mAP和速度，以檢查物體檢測系統中可用的準確性和性能的折衷。

> Fast YOLO是PASCAL上最快的物體檢測方法；據我們所知，它是現存速度最快的物體檢測器。憑藉52.7％的mAP，其準確性超過先前關於實時檢測的工作的兩倍。YOLO將mAP提升到63.4％，同時仍然保持實時性能。

> 我們還使用VGG-16來訓練YOLO。這個模型更準確，但相對於YOLO也明顯更慢。它對於與依賴VGG-16的其他檢測系統進行比較是有用的，但由於它比實時更慢，因此本文的其餘部分專注於我們更快速的模型。

> Fastest DPM有效地加速了DPM，而幾乎沒有犧牲太多的mAP，但它仍然達不到實時性能的要求，速度相比神經網絡方法仍然慢了一倍。它也受限於DPM在檢測方面相對較低的準確性，與神經網絡方法相比。

> R-CNN去除了R，將Selective Search替換為靜態邊界框提議。雖然它比R-CNN快得多，但仍然達不到實時性能，並由於缺乏良好的提議而在準確性上受到重大打擊。

![image](https://hackmd.io/_uploads/BJZX1i2eJe.png)

> Fast R-CNN加速了R-CNN的分類階段，但它仍然依賴於可能需要約2秒的選擇性搜索來生成邊界框建議的方法。因此，它具有較高的mAP，但以每秒0.5幀的速度仍然遠遠不及實時。

> 最近的Faster R-CNN將選擇性搜索替換為一個神經網絡，以提出邊界框，類似於Szegedy等人的方法。在我們的測試中，它們最準確的模型達到了7幀每秒的速度，而一個更小、不太準確的模型則以18幀每秒的速度運行。Faster R-CNN的VGG-16版本比YOLO高出10個mAP，但也慢了6倍。Zeiler-Fergus Faster R-CNN比YOLO慢2.5倍，但也不太精確。

### **4-2. VOC 2007 Error Analysis**

> 為了進一步研究YOLO和最先進的檢測器之間的區別，我們詳細分析了在VOC 2007上的結果。我們將YOLO與Fast R-CNN進行比較，因為Fast R-CNN是PASCAL上性能最優的檢測器之一，其檢測結果是公開的。

> 我們使用Hoiem等人的方法和工具。在測試時，我們對每個類別查看前N個該類別的預測。每個預測要麼是正確的，要麼根據錯誤的類型進行分類：

- 正確：正確的類別且IOU > 0.5
- 定位：正確的類別，0.1 < IOU < 0.5
- 相似：類別相似，IOU > 0.1
- 其他：類別錯誤，IOU > 0.1
- 背景：對於任何對象，IOU < 0.1

![image](https://hackmd.io/_uploads/HJbIJo3gkg.png)

> 上圖顯示了在所有 20 類別中平均的每種錯誤類型的細分。

> YOLO 在正確定位物體方面表現困難。相較於其他所有來源的錯誤，定位錯誤佔了 YOLO 錯誤的更大部分。Fast R-CNN 的定位錯誤要少得多，但背景錯誤要多得多。它的頂部檢測中有 13.6% 是不包含任何物體的誤報。Fast R-CNN 預測背景檢測的可能性幾乎是 YOLO 的 3 倍。

### **4-3. Combining Fast R-CNN and YOLO**

> YOLO 的背景錯誤遠少於 Fast R-CNN。通過使用 YOLO 來消除 Fast R-CNN 的背景檢測，我們在性能上獲得了顯著的提升。對於 R-CNN 預測的每個邊界框，我們檢查 YOLO 是否預測了類似的框。如果是，我們將根據 YOLO 預測的概率和兩個框之間的重疊來增強該預測。

> 在 VOC 2007 測試集上，最佳的 Fast R-CNN 模型達到了 71.8% 的 mAP。當與 YOLO 結合時，其 mAP 提高了 3.2%，達到了 75.0%。我們還嘗試將頂級的 Fast R-CNN 模型與其他幾個版本的 Fast R-CNN 結合。這些合奏使 mAP 在 0.3% 到 0.6% 之間略微提高，詳見表 2。

![image](https://hackmd.io/_uploads/Bk9w1o3eyg.png)

> YOLO 的提升不僅僅是模型集成的副產物，因為組合不同版本的 Fast R-CNN 幾乎沒有好處。相反，正是因為 YOLO 在測試時出現不同類型的錯誤，它才能夠有效地提升 Fast R-CNN 的性能。

> 不幸的是，這種組合並未從 YOLO 的速度中獲益，因為我們分別運行每個模型，然後將結果組合在一起。然而，由於 YOLO 非常快速，與 Fast R-CNN 相比，它不會增加顯著的計算時間。

### **4-4. VOC 2012 Results**

> 在 VOC 2012 測試集上，YOLO 獲得 57.9% 的 mAP。這比當前的領先技術低，接近使用 VGG-16 的原始 R-CNN，請參閱表3。相對於最接近的競爭對手，我們的系統在處理小物體時存在困難。在瓶子、羊和電視/顯示器等類別中，YOLO 的分數比 R-CNN 或 Feature Edit 低 8-10%。然而，在貓和火車等其他類別中，YOLO 實現了更高的性能。

> 我們結合的 Fast R-CNN + YOLO 模型是表現最好的檢測方法之一。Fast R-CNN 通過與 YOLO 的結合獲得了2.3%的改善，在公共排行榜上上升了5個名次。

![image](https://hackmd.io/_uploads/SJwY1s3eJx.png)

### **4-5. Generalizability: Person Detection in Artwork**

> 學術界用於物體檢測的數據集從相同的分佈中提取訓練和測試數據。在現實世界的應用中，很難預測所有可能的用例，測試數據可能會偏離系統之前見過的數據。我們將YOLO與其他檢測系統在Picasso數據集和People-Art數據集上進行比較，這兩個數據集用於測試對藝術品上的人物檢測。

![image](https://hackmd.io/_uploads/SJF51snxkg.png)

> 圖5顯示了YOLO與其他檢測方法之間的性能比較。作為參考，我們提供了在人這個類別上的VOC 2007檢測AP，其中所有模型僅在VOC 2007數據上訓練。在Picasso數據集上，模型在VOC 2012上進行訓練，而在People-Art數據集上，它們是在VOC 2010上進行訓練的。

> R-CNN在VOC 2007上具有較高的AP。然而，當應用於藝術品時，R-CNN的性能明顯下降。R-CNN使用Selective Search生成邊界框提議，這是針對自然圖像進行調整的。R-CNN中的分類器步驟僅查看小區域並需要良好的提議。

> DPM在應用於藝術品時能夠保持其AP。先前的研究理論認為，DPM的性能良好是因為它對物體的形狀和佈局有強大的空間模型。儘管DPM的性能不像R-CNN那樣嚴重下降，但它的起始AP較低。

> YOLO在VOC 2007上表現良好，且應用於藝術品時其AP的下降程度比其他方法小。與DPM類似，YOLO對物體的大小和形狀，以及物體之間的關係和物體通常出現的位置進行建模。儘管藝術品和自然影像在像素級別上有很大區別，但它們在物體的大小和形狀方面相似，因此YOLO仍然能夠預測出良好的邊界框和檢測結果。


## **5. Real-Time Detection In The Wild**

> YOLO是一種快速、準確的物體檢測器，非常適合計算機視覺應用。我們將YOLO連接到網絡攝像頭，並驗證其保持實時性能，包括從攝像頭獲取圖像並顯示檢測結果的時間。

> 得到的系統是互動且引人入勝的。雖然YOLO逐個處理圖像，但當連接到網絡攝像頭時，它就像一個跟蹤系統，可以檢測物體隨著移動並在外觀上發生變化。您可以在我們的項目網站上找到系統的演示和源代碼：http://pjreddie.com/yolo/。


## **6. Conclusion**

> 我們介紹了YOLO，這是一個統一的目標檢測模型。我們的模型構建簡單，可以直接在完整圖像上進行訓練。與基於分類器的方法不同，YOLO是根據直接對應到檢測性能的損失函數進行訓練，整個模型是聯合訓練的。

> <font color='yellow'>Fast YOLO是文獻中最快的通用目標檢測器，而YOLO則推動了實時目標檢測的最新技術(例:連接到網絡攝像頭、犯罪預防系統)。YOLO在新領域中也表現出良好的泛化能力，使其成為依賴於快速、強大目標檢測的應用程序的理想選擇。</font>

![image](https://hackmd.io/_uploads/SJc6Jo3ekx.png)


## 資料來源:

Joseph Redmon *(University of Washington)*,

Santosh Divvala *(University of Washington, Allen Institute for AI)*,

Ross Girshick *(Facebook AI Research)*,

Ali Farhadi *(University of Washington, Allen Institute for AI)*

http://pjreddie.com/yolo/
