Towards Real-Time Multi-Object Tracking 論文的一些理解
每日一問
- MOT最常被引述的方法是什麼?
- 這些方法可以分成哪些主要派別?
- 每個派別的主要特色(優點和缺點)是什麼?
- 這個領域大家認為重要的關鍵問題有哪些?
- 這些優點與缺點通常在哪些應用場合會比較被重視?
- 在哪些場景下不會被重視?
精讀一篇論文應該的收穫
- 這篇論文的主要假設是什麼,這些假設在現實條件下容易成立嗎?
- 這篇論文的主要好處?
- 這些好處主要表現在哪些公式上,哪些模型上?
- 這一派的主要缺點是什麼?
Abstract
對於tracking-by-detection的方法, 檢測追蹤是分兩步走: 1.檢測模型用來定位目標, 2.追蹤模型用來對資料建立聯絡. 那麼一個直觀的感受就是執行時間是這兩個模組的簡單疊加.
Introduction
之前主流的工作將MOT分解成兩個步驟: 1.檢測步驟,單個視訊幀中的目標已經本地化(localized); 2. 關聯步驟, 分配被檢測的目標分配給已經存在的軌跡中.
總的推理時間是兩個分量的和,並且隨著目標數量的增加而增加.(這個應該主要體現在步驟二的時間增加上).
為了節省計算, 一個可行(fesible)的方法是繼承檢測器和embedding模型到一個網路中. 目的是共享同一組低階特徵,避免了重新計算.
Joint Learning of Detection and Embedding Problem Settings
JDE的目的是在單次前向傳播中同時輸出目標的位置和外觀嵌入。 假定有一個數據集{I,B,Y},I表示影象幀,B表示此幀中k個目標的邊界框註釋,y表示部分身份標籤標註,其中-1表示目標沒有身份標籤。JDE的目的是暑促預測的邊界框B和外觀嵌入
F
^
∈
R
k
∗
D
\hat{F}\in \mathbb{R}^{k*D}
F^∈Rk∗D,其中D標識embedding的維度. JDE應該滿足以下兩個目標:
第一個目標要求模型能夠準確度檢測目標;
第二個目標是要求外觀嵌入具有以下特性. 連續幀中相同身份的檢測框之間的距離應小於不同身份之間的距離. 距離度量d可以是歐式距離或者餘弦距離.
Architecture Overview
使用特徵金字塔(FPN)的體系結構, FPN從多個尺度進行預測,從而在目標尺度變化很大的檢測中帶來了改進.
輸入的視訊幀首先經過骨幹網路分別獲得三個尺度的特徵圖(1/32, 1/16, 1/8的下采樣),然後通過 skip connection將多個特徵圖融合. Predicion Head 由幾個堆疊的卷基層組成, 並輸出一個大小為(6A+D) * H *W的密集預測圖. A是分配給該比例anchor template的數量,D是嵌入的維度.
密集預測圖的三個任務:
- 檢測框的分類結果: 2AHW
- 檢測狂的座標 4AHW
- embedding map DHW
接下來是分模組的討論
檢測用什麼檢測,嵌入用什麼嵌入.
Learning to Detect
檢測分支類似於RPN. 兩點修改: 1. 根據數量,比例,長寬比重新設計錨; 2. 為前景/背景分配的雙重閾值非常重要.
分類loss: 交叉熵損失函式:
L
C
r
o
s
s
E
n
t
r
o
p
y
=
−
1
n
−
1
∑
i
=
1
n
[
y
l
n
y
^
+
(
1
−
y
)
l
n
(
1
−
y
^
)
L_{CrossEntropy} = -\frac{1}{n-1}\sum _{i=1}^n[yln\hat{y} + (1-y)ln(1-\hat{y})
LCrossEntropy=−n−11i=1∑n[ylny^+(1−y)ln(1−y^)
pytorch中的交叉熵loss描述如下,其實沒有看太懂
l
o
s
s
(
x
,
c
l
a
s
s
)
=
−
l
o
g
e
x
p
(
x
[
c
l
a
s
s
]
)
∑
j
e
x
p
(
x
[
j
]
)
=
−
x
[
c
l
a
s
s
]
+
l
o
g
(
∑
j
e
x
p
(
x
[
j
]
)
loss(x, class) = -log\frac{exp(x[class])}{\sum_j exp(x[j])} = -x[class] + log(\sum _{j}exp(x[j])
loss(x,class)=−log∑jexp(x[j])exp(x[class])=−x[class]+log(j∑exp(x[j])
迴歸loss: smooth-L1 loss:
l
o
s
s
(
x
,
y
)
=
1
n
∑
i
z
i
loss(x, y) = \frac{1}{n}\sum _i z_i
loss(x,y)=n1i∑zi
Learning Appearance Embeddings
外觀嵌入問題作者並沒有給出一個具體的模型, 只是說這是一個度量學習問題, 即學習一個嵌入空間, 其中相同身份的例項彼此靠近, 而不同身份的例項相距甚遠. 這不禁讓我想到了學習pytorch時使用的tensorboard, embedding.
FPN網路輸出的高維embedding應該是無序的底層特徵, 需要使用一個演算法來對它進行類似聚類的操作?
作者借鑑了triplet loss的工作,將其和cross-entropy loss類比,最後選擇了交叉熵損失函式作為embedding loss.
Automatic Loss Balancing
關於三個loss的權重問題,作者借鑑了獨立任務不確定性的概念 . 總的losss可以寫為:
Online Association
對於給定的視訊,JDE模型處理每個幀並輸出邊框和相應的外觀嵌入。我們計算觀測值的嵌入(當前幀embedding的輸出) 與之前存在的軌跡池中的嵌入之間的關聯矩陣(affinity matrix).
使用Hungarian 演算法將觀測值(當前幀的檢測結果)分配給軌跡(之前幀); kalman濾波器用於平滑軌跡並預測先前軌跡在當前幀的位置. 如果分配的observation embedding 在空間上與卡爾曼濾波器預測的位置太遠, 那麼該分配將被拒絕. 然後, 對一個跟蹤器的embedding 進行如下更新:
如果沒有任何觀察值分配給Tracklet, 則將該 Tracklet標記為丟失,如果丟失的時間大於給定的閾值, 則標記為已丟失的跟蹤,從當前的跟蹤池中刪除; 或者在分配步驟中重新找到.
Experiments
又需要再進一步更新.