目標檢測排行榜:解讀指標及其潛在陷阱
歡迎來到我們最新一期的排行榜和模型評估深度探索。在上一篇文章中,我們探討了大型語言模型的評估。今天,我們將航向一個不同但同樣具有挑戰性的領域——目標檢測。
最近,我們釋出了目標檢測排行榜,根據某些指標對Hub中可用的目標檢測模型進行排名。在這篇部落格中,我們將展示模型的評估方式,並揭示目標檢測中常用的指標,從交併比(IoU)到平均精度(AP)和平均召回率(AR)。更重要的是,我們將重點關注評估過程中可能出現的固有差異和陷阱,確保您不僅能夠理解,還能批判性地評估模型效能。
每位開發者和研究人員都希望模型能夠準確地檢測和描繪目標。我們的目標檢測排行榜是尋找最適合其應用需求的開源模型的理想場所。但是,在這種背景下,“準確”究竟意味著什麼?應該相信哪些指標?它們是如何計算的?更重要的是,為什麼有些模型在不同報告中會呈現出不同的結果?所有這些問題都將在本部落格中得到解答。
那麼,讓我們一起開始這次探索,揭開目標檢測排行榜的秘密!如果您想跳過介紹,直接瞭解目標檢測指標的計算方法,請轉到指標部分。如果您希望根據目標檢測排行榜瞭解如何選擇最佳模型,您可以檢視目標檢測排行榜部分。
目錄
什麼是目標檢測?
在計算機視覺領域,目標檢測是指在影像中識別和定位單個物件的任務。與影像分類不同(影像分類的任務是確定影像中主要的物體或場景),目標檢測不僅對存在的物體類別進行分類,還提供空間資訊,在每個檢測到的物體周圍繪製邊界框。目標檢測器還可以為每次檢測輸出一個“分數”(或“置信度”)。它表示模型認為檢測到的物體屬於每個邊界框預測類別的機率。
例如,下圖顯示了五次檢測:一個“球”,置信度為98%;四個人“,置信度分別為98%、95%、97%和97%。

目標檢測模型用途廣泛,在各個領域都有廣泛的應用。一些用例包括自動駕駛汽車中的視覺、人臉檢測、監控和安全、醫學影像處理、增強現實、體育分析、智慧城市、手勢識別等。
Hugging Face Hub上擁有數百個目標檢測模型,這些模型在不同的資料集上進行了預訓練,能夠識別和定位各種目標類別。
零樣本(zero-shot)是一種特殊的目標檢測模型,它可以接收額外的文字查詢來搜尋文字中描述的目標物件。這些模型可以檢測它們在訓練期間從未見過的物件,而不受訓練期間使用的類別集的限制。
檢測器的多樣性不僅限於它們可以識別的輸出類別範圍。它們在底層架構、模型大小、處理速度和預測精度方面都有所不同。
一個用於評估目標檢測模型預測準確性的流行指標是**平均精度(Average Precision,AP)**及其變體,這將在本部落格後面進行解釋。
評估目標檢測模型包括幾個組成部分,如帶有真實標註的資料集、檢測結果(輸出預測)和指標。這個過程如圖2所示:

首先,選擇一個包含帶有真實邊界框標註的影像的基準資料集,並將其輸入到目標檢測模型中。模型預測每個影像的邊界框,為每個框分配相關的類別標籤和置信度分數。在評估階段,這些預測的邊界框與資料集中的真實框進行比較。評估會產生一組指標,每個指標都在[0, 1]之間,反映特定的評估標準。在下一節中,我們將詳細探討這些指標的計算。
指標
本節將深入探討平均精度和平均召回率的定義、它們的變體以及相關的計算方法。
什麼是平均精度以及如何計算?
平均精度(AP)是一個彙總“精度-召回率”曲線的單一數值。在解釋如何計算它之前,我們首先需要理解交併比(IoU)的概念,以及如何將一次檢測分類為真陽性(True Positive)或假陽性(False Positive)。
IoU 是一個介於 0 和 1 之間的數值指標,用於衡量預測邊界框與實際(真實)邊界框之間的重疊程度。它的計算方法是,將兩個框重疊區域的面積除以兩個框組合覆蓋的總面積。圖 3 透過一個預測框及其對應的真實框的示例直觀地展示了 IoU。

如果真實框和檢測框共享相同的座標,表示影像中的同一區域,則它們的 IoU 值為 1。相反,如果框在任何畫素處都不重疊,則 IoU 被視為 0。
在對檢測精度有高期望(例如自動駕駛汽車)的場景中,預測的邊界框應與真實框緊密對齊。為此,首選接近1的IoU閾值( )。另一方面,對於檢測到的邊界框相對於目標物件的精確位置不重要的應用,閾值可以放寬,將 設定得更接近0。
模型預測的每個框都被認為是“陽性”檢測。交併比(IoU)標準根據我們定義的置信度閾值,將每個預測分類為真陽性(TP)或假陽性(FP)。
根據預定義的 ,我們可以定義真陽性和真陰性
- 真陽性(TP):一次正確檢測,其中 IoU ≥ 。
- 假陽性(FP):一次不正確檢測(漏檢),其中 IoU < 。
相反,負樣本是根據真實邊界框進行評估的,可以定義為假陰性(FN)或真陰性(TN)。
- 假陰性(FN):指模型未能檢測到的真實物體。
- 真陰性(TN):表示正確的未檢測。在目標檢測領域,影像中無數的邊界框不應該被識別,因為它們不代表目標物件。考慮影像中所有可能不代表目標物件的框——數量相當龐大,不是嗎?:) 這就是為什麼我們不考慮TN來計算目標檢測指標。
現在我們已經能夠識別我們的TP、FP和FN,我們可以定義精度和召回率了。
- 精度(Precision)是模型僅識別相關物件的能力。它是正確陽性預測的百分比,由以下公式給出:
它表示正確陽性預測在所有檢測框中的比例。
- 召回率(Recall)衡量模型找到所有相關案例(所有真實邊界框)的能力。它表示在所有真實值中檢測到的TP的比例,公式如下:
請注意,TP、FP和FN取決於預定義的IoU閾值,精度和召回率也是如此。
平均精度衡量模型正確分類和定位物件的能力,同時考慮不同的精度和召回率值。為此,我們將透過繪製特定目標類別(例如“狗”)的“精度-召回率”曲線來闡釋精度和召回率之間的關係。我們將採用一箇中等IoU閾值=75%來劃分我們的TP、FP和FN。隨後,我們可以計算精度和召回率值。為此,我們需要改變我們檢測的置信度分數。
圖 4 展示了一個精度-召回率曲線的示例。要更深入地探討此曲線的計算方法,Padilla 等人的論文《An Empirical Study of Object Detection Metrics with a Companion Open-Source Toolkit》和《A Survey on Performance Metrics for Object-Detection Algorithms》提供了更詳細的玩具示例,演示瞭如何計算此曲線。

精度-召回率曲線說明了精度和召回率之間基於檢測器邊界框不同置信度水平的平衡。每個繪圖點都是使用不同的置信度值計算的。
為了演示如何計算平均精度圖,我們將使用前面提到的一篇論文中的一個實際例子。考慮一個包含7張影像的資料集,其中有15個相同類別的真實物件,如圖5所示。為簡化起見,我們假設所有框都屬於同一類別,“狗”。

我們的假設目標檢測器在資料集中檢索了24個物件,用紅色框表示。為了計算精度和召回率,我們使用所有置信度水平下的精度和召回率方程來評估檢測器在該基準資料集上針對該特定類別的表現。為此,我們需要建立一些規則:
- 規則1:為簡單起見,如果IoU≥30%,我們認為我們的檢測結果為真陽性(TP);否則,為假陽性(FP)。
- 規則2:對於一個檢測框與多個真實框重疊的情況(如影像2至7),IoU最高的預測框被視為TP,其他則為FP。
根據這些規則,我們可以將每次檢測分類為TP或FP,如表1所示。

請注意,根據規則2,在影像1中,“E”是TP,而“D”是FP,因為“E”與真實值之間的IoU大於“D”與真實值之間的IoU。
現在,我們需要考慮每次檢測的置信度值來計算精度和召回率。一個好的方法是按置信度值對檢測結果進行排序,如表2所示。然後,對於每一行的每個置信度值,我們計算精度和召回率,同時考慮累積TP(acc TP)和累積FP(acc FP)。每一行的“acc TP”在每次檢測到TP時增加1,“acc FP”在每次檢測到FP時增加1。“acc TP”和“acc FP”列基本上告訴我們給定特定置信度水平下的TP和FP值。表2中每個值的計算可以在此電子表格中檢視。
例如,考慮表2的第12行(檢測“P”)。“acc TP = 4”的值意味著,如果我們將模型在這個特定資料集上以0.62的置信度進行基準測試,我們將正確檢測到四個目標物件,並錯誤檢測到八個目標物件。這將導致:
和 。

現在,我們可以用這些值繪製精度-召回率曲線,如圖6所示

透過檢查曲線,可以推斷精度和召回率之間的潛在權衡,並根據選定的置信度閾值找到模型的最佳工作點,即使該閾值未明確顯示在曲線上。
如果檢測器的置信度導致少量假陽性(FP),則它可能具有高精度。然而,這可能會導致錯過許多真陽性(TP),從而導致高假陰性(FN)率,進而導致低召回率。另一方面,接受更多陽性檢測可以提高召回率,但也可能增加FP計數,從而降低精度。
為目標類別計算的精度-召回率曲線下的面積(AUC)代表該特定類別的平均精度值。COCO評估方法將“AP”稱為影像資料集中所有目標類別之間的平均AUC值,其他方法也稱之為平均平均精度(mAP)。
對於大型資料集,檢測器可能會輸出具有各種置信度水平的框,從而導致鋸齒狀的精度-召回率曲線,使其難以精確計算其AUC(平均精度)。不同的方法採用不同的方法來近似曲線面積。一種流行的方法稱為N插值,其中N表示從精度-召回率藍色線中取樣的點數。
例如,COCO方法使用101點插值,它計算等間隔的召回率值(0、0.01、0.02、...、1.00)的101個點,而其他方法使用11個點(11點插值)。圖7顯示了具有11個等間隔召回點(藍色)的精度-召回率曲線。

紅色點的位置按照以下方式確定:
其中 是在召回率 處測量的精度值。
在這個定義中,插值精度 是透過考慮召回率值大於 的最大精度獲得的,而不是使用在每個召回率水平 處觀察到的精度值 。
對於這種方法,代表平均精度的AUC由所有點的平均值近似表示,並由以下公式給出:
什麼是平均召回率以及如何計算?
平均召回率(AR)是常與AP一起使用的指標,用於評估目標檢測模型。AP在不同置信度閾值下評估精度和召回率以提供模型效能的單一數值摘要,而AR則只關注召回率方面,不考慮置信度並將所有檢測視為陽性。
COCO 的方法將 AR 計算為在 IoU > 0.5 和類別下的最大召回率的平均值。
透過使用 IoU 範圍 [0.5, 1] 並在該區間內平均召回值,AR 評估模型預測的物件定位能力。因此,如果您的目標是評估模型的高召回率和精確物件定位,AR 可能是一個值得考慮的有價值的評估指標。
平均精度和平均召回率有哪些變體?
根據預定義的IoU閾值以及與真實物件相關的區域,可以獲得不同版本的AP和AR:
- AP@.5:設定IoU閾值為0.5,並計算影像資料集中每個目標類別的精度-召回率AUC。然後,將每個類別的計算結果相加併除以類別數量。
- AP@.75:使用與AP@.50相同的方法,但IoU閾值為0.75。由於更高的IoU要求,AP@.75被認為比AP@.5更嚴格,應用於評估在檢測中需要達到高水平定位精度的模型。
- AP@[.5:.05:.95]:也被cocoeval工具稱為AP。這是AP@.5和AP@.75的擴充套件版本,因為它使用不同的IoU閾值(0.5、0.55、0.6、...、0.95)計算AP,並對計算結果進行平均,如以下公式所示。與AP@.5和AP@.75相比,此指標提供了全面的評估,涵蓋了模型在更廣泛定位精度範圍內的效能。
- AP-S:它應用AP@[.5:.05:.95],考慮面積小於 畫素的(小)真實物件。
- AP-M:它應用AP@[.5:.05:.95],考慮面積在 到 畫素之間的(中等大小)真實物件。
- AP-L:它應用AP@[.5:.05:.95],考慮面積在 畫素之間的(大)真實物件。
對於平均召回率(AR),使用10個IoU閾值(0.5、0.55、0.6、...、0.95)來計算召回率值。AR的計算方法是限制每張影像的檢測數量,或者根據物件的面積限制檢測數量。
- AR-1:每張影像最多考慮1個檢測結果。
- AR-10:每張影像最多考慮10個檢測結果。
- AR-100:每張影像最多考慮100個檢測結果。
- AR-S:考慮面積小於 畫素的(小)物件。
- AR-M:考慮面積在 到 畫素之間的(中等大小)物件。
- AR-L:考慮面積大於 畫素的(大)物件。
目標檢測排行榜
我們最近釋出了目標檢測排行榜,用於比較Hub中開源模型的準確性和效率。

為了衡量準確性,我們使用12種涉及平均精度和平均召回率的指標,採用COCO樣式,在COCO val 2017資料集上進行基準測試。
如前所述,不同的工具在評估過程中可能採用不同的特殊性。為了防止結果不匹配,我們選擇不實現我們自己的指標版本。相反,我們選擇使用COCO的官方評估程式碼,也稱為PyCOCOtools,程式碼可在此處獲取。
在效率方面,我們透過計算整個資料集(包括預處理和後處理步驟)的平均評估時間來計算每個模型的每秒幀數(FPS)。鑑於每個模型的GPU記憶體需求不同,我們選擇使用批次大小為1進行評估(此選擇也受到我們預處理步驟的影響,我們將在後面深入探討)。然而,值得注意的是,這種方法可能與實際效能不完全一致,因為通常使用更大的批次(通常包含多張影像)以獲得更好的效率。
接下來,我們將提供基於指標選擇最佳模型的提示,並指出哪些引數可能會影響結果。理解這些細微差別至關重要,因為這可能會在社群內引發疑問和討論。
如何根據指標選擇最佳模型?
選擇合適的指標來評估和比較目標檢測器需要考慮幾個因素。主要考慮因素包括應用目的和用於訓練和評估模型的資料集特徵。
對於整體效能,如果您希望模型在不同IoU閾值下具有全面的效能,並且對檢測到的物件的定位沒有嚴格要求,那麼AP(AP@[.5:.05:.95])是一個不錯的選擇。
如果您需要一個具有良好物體識別能力且物體位置大致正確的模型,您可以關注 AP@.5。如果您更喜歡一個在邊界框放置上更精確的模型,AP@.75 更合適。
如果您對物件大小有限制,那麼AP-S、AP-M和AP-L就派上用場了。例如,如果您的資料集或應用程式主要包含小物件,AP-S可以提供關於檢測器識別這些小目標的有效性的見解。這在檢測遠距離車輛或醫學成像中的小偽影等場景中至關重要。
哪些引數會影響平均精度結果?
從Hub中選擇目標檢測模型後,如果我們使用模型預處理和後處理步驟中不同的引數,我們可以改變輸出框。這些可能會影響評估指標。我們確定了一些可能導致結果變化的常見因素:
- 忽略置信度低於某個閾值的檢測結果。
- 使用
batch_sizes > 1
進行推理。 - 移植的模型輸出的logits與原始模型不同。
- 一些真實物件可能會被評估器忽略。
- 計算 IoU 可能很複雜。
- 文字條件模型需要精確的提示。
讓我們以DETR(DEtection TRansformer)(facebook/detr-resnet-50)模型為例。我們將展示這些因素如何影響輸出結果。
評估前設定檢測閾值
我們的示例模型使用DetrImageProcessor
類來處理邊界框和 logits,如下所示:
from transformers import DetrImageProcessor, DetrForObjectDetection
import torch
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# PIL images have their size in (w, h) format
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.5)
post_process_object_detection
函式中的 threshold
引數用於根據檢測框的置信度分數過濾檢測結果。
如前所述,精度-召回率曲線是透過測量[0,1]範圍內所有置信度值的精度和召回率構建的。因此,在評估前限制檢測結果會產生偏差,因為我們會遺漏一些檢測結果。
改變批處理大小
批處理大小不僅影響處理時間,還可能導致檢測到的框不同。影像預處理步驟可能會根據輸入影像的大小改變其解析度。
正如DETR 文件中所述,預設情況下,DetrImageProcessor
會調整輸入影像的大小,使其最短邊為 800 畫素,然後再次調整大小,使其最長邊最多為 1333 畫素。因此,批處理中的影像可以具有不同的大小。DETR 透過將影像填充到批處理中的最大大小,並建立畫素掩碼來指示哪些畫素是真實的/哪些是填充來解決此問題。
為了說明這個過程,讓我們考慮圖9和圖10中的例子。在圖9中,我們考慮批次大小=1,因此兩張影像都使用DetrImageProcessor
獨立處理。第一張影像被調整為(800,1201),使檢測器預測28個帶有vase
類別的框,22個帶有chair
類別的框,10個帶有bottle
類別的框等。

圖10顯示了批次大小=2時的處理過程,其中相同的兩張影像在同一批次中由DetrImageProcessor
處理。兩張影像都調整為相同的形狀(873,1201),並應用了填充,因此影像中包含內容的部分保持其原始寬高比。然而,例如,第一張影像輸出了不同數量的物件:31個帶有vase
類別的框,20個帶有chair
類別的框,8個帶有bottle
類別的框等。請注意,對於第二張影像,當批次大小=2時,檢測到一個新類別dog
。這發生是因為模型能夠根據影像解析度檢測不同大小的物件。

移植模型應輸出與原始模型相同的 logits
在Hugging Face,我們將模型移植到程式碼庫時非常小心。不僅要考慮架構、清晰的文件和編碼結構,我們還需要保證移植後的模型在給定相同輸入的情況下,能夠生成與原始模型相同的logits。
模型輸出的logits經過後處理以生成置信度分數、標籤ID和邊界框座標。因此,logits的微小變化可能會影響指標結果。您可能還記得上面的示例,我們討論了計算平均精度的過程。我們展示了置信度水平會排序檢測結果,微小變化可能導致不同的順序,從而導致不同的結果。
重要的是要認識到,模型可以生成各種格式的框,這也可能需要考慮在內,以便進行評估器所需的正確轉換。
- (x, y, width, height):這表示左上角座標,後跟絕對尺寸(寬度和高度)。
- (x, y, x2, y2):此格式表示左上角和右下角的座標。
- (rel_x_center, rel_y_center, rel_width, rel_height):這些值表示中心點的相對座標和框的相對尺寸。
某些基準測試資料集中的一些真實值被忽略
某些資料集有時會使用特殊標籤,這些標籤在評估過程中會被忽略。
例如,COCO 使用標籤 iscrowd
來標記大量物件(例如,籃子裡有很多蘋果)。在評估過程中,標記為 iscrowd=1
的物件會被忽略。如果不考慮這一點,您可能會得到不同的結果。
計算 IoU 需要仔細考慮
根據定義,IoU 的計算可能看起來很簡單。然而,有一個關鍵的細節需要注意:如果真值和檢測結果完全沒有重疊,甚至連一個畫素都沒有,那麼 IoU 應該為 0。為了避免在計算並集時出現除以零的情況,可以在分母中新增一個很小的值(稱為 epsilon)。但是,必須仔細選擇 epsilon:大於 1e-4 的值可能不夠中立,無法給出準確的結果。
文字條件模型需要正確的提示
在某些情況下,我們可能希望評估文字條件模型,例如 OWL-ViT,它可以接收文字提示並提供所需物件的位置。
對於此類模型,不同的提示(例如“找到狗”和“狗在哪裡?”)可能會導致相同的結果。但是,我們決定遵循每篇論文中描述的程式。例如,對於 OWL-ViT,我們使用提示“一張{}的影像”來預測物件,其中 {} 被基準資料集的類別替換。
結論
在這篇文章中,我們介紹了目標檢測問題,並描繪了用於評估它們的主要指標。
如前所述,評估目標檢測模型可能比看起來要複雜。必須仔細考慮每個模型的特殊性,以防止出現偏差結果。此外,每個指標代表同一模型的不同視角,選擇“最佳”指標取決於模型的應用和所選基準資料集的特徵。
下表說明了特定用例的推薦指標,並提供了現實世界場景作為示例。但是,需要注意的是,這些僅是建議,理想的指標可能因每個應用程式的獨特特殊性而異。
用例 | 真實世界場景 | 推薦指標 |
---|---|---|
通用目標檢測效能 | 監控,體育分析 | AP |
低精度要求(寬泛檢測) | 增強現實,手勢識別 | AP@.5 |
高精度要求(緊密檢測) | 人臉檢測 | AP@.75 |
檢測小物體 | 自動駕駛汽車中的遠處車輛,醫學影像中的微小偽影 | AP-S |
中等大小物體檢測 | 機場安檢中的行李檢測 | AP-M |
大型物體檢測 | 停車場中的車輛檢測 | AP-L |
每張影像檢測 1 個物件 | 影片中的單目標跟蹤 | AR-1 |
每張影像最多檢測 10 個物件 | 街頭攝像機中的行人檢測 | AR-10 |
每張影像最多檢測 100 個物件 | 人群計數 | AR-100 |
小物體召回率 | 用於微小異常的醫學影像 | AR-S |
中等大小物體召回率 | 運動員體育分析 | AR-M |
大型物體召回率 | 廣闊景觀中的野生動物追蹤 | AR-L |
我們 🤗 目標檢測排行榜中顯示的結果是使用社群廣泛用於模型基準測試的獨立工具 PyCOCOtools 計算的。我們的目標是收集不同領域的資料集(例如醫學影像、體育、自動駕駛車輛等)。您可以使用討論頁面來請求資料集、模型和功能。渴望在我們的排行榜上看到您的模型或資料集功能?不要猶豫!介紹您的模型和資料集,進行微調,然後讓我們將其排名!🥇
附加資源
- 目標檢測指南
- 目標檢測任務
- 論文 What Makes for Effective Detection Proposals
- 論文 A Comparative Analysis of Object Detection Metrics with a Companion Open-Source Toolkit
- 論文 A Survey on Performance Metrics for Object-Detection Algorithms
特別感謝 🙌 @merve、@osanseviero 和 @pcuenq 提供的反饋和精彩評論。🤗