|
|
||
|---|---|---|
| .. | ||
| lab | ||
| ObjectDetection.ipynb | ||
| README.md | ||
README.md
物件偵測
我們之前討論的影像分類模型,主要是將影像輸入並產生一個分類結果,例如在 MNIST 問題中,分類結果是「數字」類別。然而,在許多情況下,我們不僅僅想知道影像中有物件存在,我們還希望能夠確定它們的精確位置。這正是物件偵測的目的所在。
課前測驗
圖片來源:YOLO v2 網站
一個簡單的物件偵測方法
假設我們想在一張圖片中找到一隻貓,一個非常簡單的物件偵測方法可能如下:
- 將圖片分割成多個小區塊。
- 對每個區塊進行影像分類。
- 將分類結果中激活值足夠高的區塊視為包含目標物件。
圖片來源:練習筆記本
然而,這種方法並不理想,因為它只能非常粗略地定位物件的邊界框。要更精確地定位,我們需要進行某種回歸來預測邊界框的座標,而這需要特定的數據集。
用回歸進行物件偵測
這篇部落格文章提供了一個非常好的物件偵測入門介紹。
物件偵測的數據集
在進行物件偵測時,你可能會遇到以下數據集:
- PASCAL VOC - 包含 20 個類別
- COCO - 常見物件的上下文。包含 80 個類別、邊界框和分割遮罩
物件偵測的評估指標
交集比聯集 (Intersection over Union, IoU)
在影像分類中,衡量算法表現相對容易,但在物件偵測中,我們需要同時衡量類別的正確性以及推測邊界框位置的精確性。對於後者,我們使用所謂的交集比聯集 (IoU),它衡量兩個框(或任意兩個區域)的重疊程度。
圖片來源:這篇優秀的 IoU 部落格文章
概念很簡單——將兩個區域的交集面積除以它們的聯集面積。對於完全重疊的區域,IoU 值為 1;對於完全不相交的區域,IoU 值為 0。其他情況下,IoU 值介於 0 到 1 之間。我們通常只考慮 IoU 超過某個值的邊界框。
平均精度 (Average Precision, AP)
假設我們想衡量某個類別 C 的物件識別效果。為了衡量它,我們使用平均精度指標,其計算方式如下:
- 考慮精度-召回曲線,顯示隨著偵測閾值(從 0 到 1)變化的準確性。
- 根據閾值,我們會在影像中偵測到更多或更少的物件,並得到不同的精度和召回值。
- 曲線看起來如下:
圖片來源:NeuroWorkshop
某個類別 C 的平均精度是該曲線下的面積。更精確地說,召回軸通常分為 10 個部分,精度在所有這些點上進行平均:
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
AP 和 IoU
我們只考慮那些 IoU 超過某個值的偵測。例如,在 PASCAL VOC 數據集中,通常假設 \mbox{IoU Threshold} = 0.5,而在 COCO 數據集中,AP 是針對不同的 \mbox{IoU Threshold} 值進行測量的。
圖片來源:NeuroWorkshop
平均平均精度 - mAP
物件偵測的主要評估指標是平均平均精度 (Mean Average Precision, mAP)。它是所有物件類別的平均精度值,有時也包括不同的 \mbox{IoU Threshold}。更詳細的 mAP 計算過程可以參考
這篇部落格文章,以及這裡的程式碼範例。
不同的物件偵測方法
物件偵測算法主要分為兩大類:
- 區域提案網絡 (Region Proposal Networks)(如 R-CNN、Fast R-CNN、Faster R-CNN)。主要思想是生成感興趣區域 (ROI),並對其進行 CNN 分析以尋找最大激活值。這與簡單方法有些相似,但 ROI 是以更聰明的方式生成的。這類方法的一個主要缺點是速度較慢,因為需要多次對影像進行 CNN 分析。
- 單次通過 (One-pass) 方法(如 YOLO、SSD、RetinaNet)。這些架構設計的網絡能在一次通過中同時預測類別和 ROI。
R-CNN: 基於區域的 CNN
R-CNN 使用 Selective Search 生成 ROI 區域的層次結構,然後通過 CNN 特徵提取器和 SVM 分類器來確定物件類別,並通過線性回歸來確定邊界框座標。官方論文
圖片來源:van de Sande et al. ICCV’11
圖片來源:這篇部落格
F-RCNN - 快速 R-CNN
這種方法與 R-CNN 類似,但區域是在卷積層應用後定義的。
Faster R-CNN
這種方法的主要思想是使用神經網絡來預測 ROI,即所謂的區域提案網絡。論文,2016
圖片來源:官方論文
R-FCN: 基於區域的全卷積網絡
這種算法比 Faster R-CNN 更快。主要思想如下:
- 使用 ResNet-101 提取特徵。
- 特徵通過位置敏感分數圖處理。每個類別
C的物件被分成k\times k區域,我們訓練網絡來預測物件的部分。 - 對於
k\times k區域中的每個部分,所有網絡對物件類別進行投票,選擇得票最多的物件類別。
圖片來源:官方論文
YOLO - You Only Look Once
YOLO 是一種即時的單次通過算法。主要思想如下:
- 將影像分成
S\times S區域。 - 對每個區域,CNN 預測
n個可能的物件、邊界框座標以及置信度=概率 * IoU。
圖片來源:官方論文
其他算法
- RetinaNet: 官方論文
- PyTorch 實現
- Keras 實現
- RetinaNet 物件偵測(Keras 範例)
- SSD (單次偵測器): 官方論文
✍️ 練習:物件偵測
繼續學習以下筆記本:
結論
在本課中,你快速瀏覽了各種物件偵測方法!
🚀 挑戰
閱讀以下文章和筆記本,並嘗試使用 YOLO:
課後測驗
回顧與自學
- 物件偵測 作者:Nikhil Sardana
- 物件偵測算法的良好比較
- 深度學習物件偵測算法回顧
- 物件偵測算法的逐步介紹
- Python 中 Faster R-CNN 的物件偵測實現
作業:物件偵測
免責聲明:
本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或誤讀概不負責。









