我們之前處理的影像分類模型,會將影像輸入並產生一個分類結果,例如在 MNIST 問題中,分類為「數字」的類別。然而,在許多情況下,我們不僅僅想知道圖片中有物件,我們還希望能夠確定它們的精確位置。這正是物件偵測的目的。
圖片來源:YOLO v2 網站
假設我們想在一張圖片中找到一隻貓,一個非常簡單的物件偵測方法如下:
- 將圖片分割成多個小區塊。
- 對每個區塊進行影像分類。
- 將分類結果中激活值足夠高的區塊視為包含目標物件的區域。
圖片來源:練習筆記本
然而,這種方法並不理想,因為它只能非常粗略地定位物件的邊界框。為了更精確地定位,我們需要進行某種迴歸來預測邊界框的座標,而這需要特定的數據集。
這篇部落格文章對於偵測形狀提供了一個很好的入門介紹。
在這個任務中,你可能會遇到以下數據集:
- PASCAL VOC - 包含 20 個類別
- COCO - 常見物件的上下文。包含 80 個類別、邊界框和分割遮罩
對於影像分類來說,衡量演算法的表現相對簡單;但對於物件偵測,我們需要同時衡量類別的正確性以及推測邊界框位置的精確性。後者使用所謂的交集比聯集(IoU)來衡量,這是一種用來評估兩個框(或任意兩個區域)重疊程度的方法。
圖片來源:這篇優秀的 IoU 部落格文章
概念很簡單——將兩個區域的交集面積除以它們的聯集面積。對於完全相同的區域,IoU 值為 1;對於完全不相交的區域,IoU 值為 0。其他情況下,IoU 值介於 0 到 1 之間。我們通常只考慮 IoU 超過某個值的邊界框。
假設我們想衡量某個類別
- 考慮一條精度-召回曲線,該曲線顯示了檢測閾值(從 0 到 1)對應的準確性。
- 根據閾值,我們會在圖片中檢測到更多或更少的物件,並得到不同的精度和召回值。
- 曲線看起來如下:
圖片來源:NeuroWorkshop
對於給定類別
我們只考慮那些 IoU 超過某個值的檢測。例如,在 PASCAL VOC 數據集中,通常假設
圖片來源:NeuroWorkshop
物件偵測的主要評估指標稱為平均平均精度(mAP)。它是所有物件類別的平均精度值,有時也包括不同
物件偵測演算法大致分為兩類:
- 區域提議網路(R-CNN、Fast R-CNN、Faster R-CNN)。主要思想是生成感興趣區域(ROI),並對其運行 CNN,尋找最大激活值。這與簡單方法有些相似,但 ROI 是以更聰明的方式生成的。這類方法的主要缺點是速度較慢,因為需要對圖片進行多次 CNN 分類。
- 單次通過(YOLO、SSD、RetinaNet)方法。在這些架構中,網路設計為一次性預測類別和 ROI。
R-CNN 使用 Selective Search 生成層次結構的 ROI 區域,然後通過 CNN 特徵提取器和 SVM 分類器來確定物件類別,並通過線性迴歸確定邊界框座標。官方論文
圖片來源:van de Sande et al. ICCV’11
圖片來源:這篇部落格
這種方法與 R-CNN 類似,但區域是在卷積層應用之後定義的。
這種方法的主要思想是使用神經網路來預測 ROI,即所謂的區域提議網路。論文,2016
圖片來源:官方論文
這種演算法比 Faster R-CNN 更快。主要思想如下:
- 使用 ResNet-101 提取特徵。
- 特徵經過位置敏感分數圖處理。每個來自
$C$ 類別的物件被劃分為$k\times k$ 區域,並訓練網路預測物件的部分。 - 對於
$k\times k$ 區域中的每個部分,所有網路對物件類別進行投票,選擇得票最多的物件類別。
圖片來源:官方論文
YOLO 是一種實時的單次通過演算法。主要思想如下:
- 將圖片劃分為
$S\times S$ 區域。 - 對於每個區域,CNN 預測
$n$ 個可能的物件、邊界框座標以及置信度=概率 * IoU。
圖片來源:官方論文
繼續學習以下筆記本:
在本課中,你快速瀏覽了各種物件偵測的方法!
閱讀以下關於 YOLO 的文章和筆記本,並嘗試實作:
- 物件偵測 by Nikhil Sardana
- 物件偵測演算法的良好比較
- 深度學習物件偵測演算法回顧
- 物件偵測基本演算法的逐步介紹
- 用 Python 實現 Faster R-CNN 進行物件偵測











