1. 程式人生 > 實用技巧 >Towards Real-Time Multi-Object Tracking 論文的一些理解

Towards Real-Time Multi-Object Tracking 論文的一些理解

每日一問

  • MOT最常被引述的方法是什麼?
  • 這些方法可以分成哪些主要派別?
  • 每個派別的主要特色(優點和缺點)是什麼?
  • 這個領域大家認為重要的關鍵問題有哪些?
  • 這些優點與缺點通常在哪些應用場合會比較被重視?
  • 在哪些場景下不會被重視?

精讀一篇論文應該的收穫

  • 這篇論文的主要假設是什麼,這些假設在現實條件下容易成立嗎?
  • 這篇論文的主要好處?
  • 這些好處主要表現在哪些公式上,哪些模型上?
  • 這一派的主要缺點是什麼?

Abstract

對於tracking-by-detection的方法, 檢測追蹤是分兩步走: 1.檢測模型用來定位目標, 2.追蹤模型用來對資料建立聯絡. 那麼一個直觀的感受就是執行時間是這兩個模組的簡單疊加.

作者提出了一個模型,它能夠同時輸出檢測結果和對應的embeddings. 那麼這個模型是一個multi-task learning.作者論文中說達到了實時.

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^RkD,其中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是嵌入的維度.
密集預測圖的三個任務:

  1. 檢測框的分類結果: 2AHW
  2. 檢測狂的座標 4AHW
  3. 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=n11i=1n[ylny^+(1y)ln(1y^)
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)=logjexp(x[j])exp(x[class])=x[class]+log(jexp(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)=n1izi
在這裡插入圖片描述

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

又需要再進一步更新.