為什么基于卷積網絡的目標檢測模型在預測后要使用非極大值抑制
基于卷積網絡的目標檢測模型可能會在目標的相鄰區域生成多個相互重疊框,每個框的預測結果都是同一個目標,引起同一目標的重復檢測。造成這一現象的原因主要有兩個,
- 基于卷積網絡的目標檢測模型是在Feature Map上進行預測的,Feature Map上的每個像素在原圖上都對應一塊感受野,并由這塊感受野經過一層層卷積映射而來。Feature Map上兩個像素越相鄰,兩者在原圖上的感受野的重疊部分就越大,在卷積核權重參數分布平均的情況下(卷積核在訓練時使用了L2正則化,每個權重參數接近于0,且近似相等),這兩塊感受野經過相同的卷積運算后映射值相似。如果Feature Map上兩個相鄰像素中有一個像素經過預測頭后,能預測出物體,由于相鄰像素是相似的,那么另一個像素經過預測頭后有很大可能預測出同一個物體,從而引起同一物體的重復預測。
- 一個樣本中的目標相鄰區域可能在另一個樣本中是作為正樣本(目標存在區域)進行訓練的,所以就可能導致這個樣本的目標相鄰區域經過卷積層和預測頭后,得到目標信息。進而產生同一目標的重復預測。
為了解決這種重復預測現象,提高檢測精度,就需要用到非極大值抑制——在所有重疊框中選擇置信度最大的那個框作為最終結果,同時刪除與該框IOU大于0.5的其它重疊框。
DETR
- 圖片先經過一個卷積骨干網絡(ResNet50)提取局部特征,然后利用Transformer的Encoder進一步提取圖片上下文信息。這些上下文信息均被輸入到Decoder中,作為Key和Value。DETR使用的Decoder也可以視作Transformer的Encoder,因為它的多頭注意力機制并沒有進行因果掩碼處理,所以DETR的Decoder是并行地預測目標框。
- DETR的Decoder的輸入是一組可訓練的Objects Query,作為第一層多頭注意力的Query。DETR的Decoder的輸出是一個長度固定的集合,集合中有目標框以及背景框。
- 圖片中的目標數量和Decoder的預測數量往往不相等的。假如真實目標數量是3個,Decoder的預測數量固定為100個。那么在訓練時,這三個真實目標應該與100個預測框中的哪三個框進行損失值計算呢?DERT是這樣解決的:這三個真實目標分別與100個預測框進行組合(每個預測框只能與一個真實目標進行組合),然后計算損失值,這時總共有100*99*98=970200種不同的損失值,選取其中值最小的損失作為梯度下降的優化目標,同時將該最小損失對應的預測框與真實目標綁定,其余未與真實目標組合的預測框則全視作背景框。