非極大值抑制
偵測器跑完後,單一個真實物件通常會觸發許多重疊的框——相鄰的錨框與格點全都對同一隻狗反應。非極大值抑制就是把每一團近乎重複的框收斂成一個的清理步驟。直覺是一條簡單的委員會規則:在明顯描述同一件事物的框當中,保留最有信心的那個,捨棄其餘。
經典的貪婪演算法(逐類別執行):把所有框依信心排序;取最頂端的框並接受它;移除剩下每一個與這個被接受框的 IoU 超過門檻(常用 0.5)的框;對剩下的重複此程序,直到沒有框為止。被接受的框即為最終偵測。IoU 門檻是關鍵旋鈕——太高,兩個真正不同但相近的物件會同時存活(誤報);太低,真正的第二個物件會被抹除(漏偵)。
貪婪 NMS 有個已知的失效情形:在人群中,兩個不同物件可能合理地大量重疊,而硬性抑制會刪掉其中一個。Soft-NMS 對此的解法是:不刪除重疊框,而是依重疊程度衰減其分數,使重疊強烈的鄰居被降級、但若原本非常有信心仍可能存活。其他變體還包括加權框融合(對重疊框取平均)與類別無關 NMS(當一個區域只可能是一個物件時跨類別抑制)。
NMS 是一個不可微、手工打造的後處理步驟,有自己要調的門檻,而且是在網路之後執行,並非被學習出來的。這在哲學上並不令人滿意,在密集場景中更是真正的瓶頸——這正是 DETR 與其他集合預測偵測器之所以因完全移除 NMS 而備受推崇的原因:它們以二分匹配損失訓練,迫使每個物件恰好由一個預測認領,因此根本不會產生重複框。
三個分數為 0.95、0.90、0.40 的「狗」框彼此重疊(兩兩 IoU > 0.6)。貪婪 NMS 保留 0.95,接著因 0.90 與 0.40 各自與 0.95 框的重疊超過門檻而丟棄它們——最終輸出:一個框。
NMS 預設逐類別執行:標為「行人」的框絕不會抑制標為「車」的框,即使兩者大量重疊,因為對重疊區域而言兩個標籤都可能正確(車內的人)。唯有當一個區域確實不可能同時容納兩個類別時,才使用類別無關 NMS。