MOTR解读
最新的一篇MOT領域基于Transformer的工作,是第一個真正嚴格意義上端到端的多目標跟蹤框架,超越了此前的TransTrack和TrackFormer等工作。
簡介
多目標跟蹤的關鍵挑戰在于軌跡上目標的時序建模,而現有的TBD方法大多采用簡單的啟發式策略,如空間和外觀相似度。盡管這些方法具有通用性,但它們過于簡單,不足以對復雜的變化進行建模,例如通過遮擋進行跟蹤。 本質上,現有方法缺乏時間建模的能力。 這篇論文中,作者提出了MOTR,這是一個真正的完全端到端的跟蹤框架。MOTR能夠學習建模目標的長程時間變化,它隱式地進行時間關聯,并避免了以前的顯式啟發式策略。基于Transformer和DETR,MOTR引入了track query這個概念,一個track query負責建模一個目標的整個軌跡,它可以在幀間傳輸并更新從而無縫完成目標檢測和跟蹤任務。時間聚合網絡(temporal aggregation network,TAN)配合多幀訓練被用來建模長程時間關系。實驗結果表明MOTR達到了SOTA效果。
-
論文標題
MOTR: End-to-End Multiple-Object Tracking with TRansformer
-
論文地址
http://arxiv.org/abs/2105.03247
-
論文源碼
https://github.com/megvii-model/MOTR
介紹
多目標跟蹤是在視頻序列的每一幀中定位所有的目標并確定它們的移動軌跡的一個任務。多目標跟蹤是極具挑戰的一個任務,因為每幀中的目標都可能因為環境的變化而被遮擋,而且跟蹤器要想進行長期跟蹤或者低幀率的跟蹤是比較困難的。這些復雜多樣的跟蹤場景為MOT方法的設計帶來了諸多挑戰。
現有的多目標跟蹤方法基本上都遵循tracking-by-detection(TBD)范式,它將軌跡的生成分為兩個步驟:目標定位和時序關聯。對目標定位而言,使用檢測器逐幀檢測目標即可。而對于時序關聯,現有的方法要么使用空間相似性(即基于IoU關聯)要么使用外觀相似性(即基于ReID關聯)。對于基于IoU的方法,計算兩幀檢測框的兩兩之間的IoU矩陣,若兩個目標之間的IoU高于某個閾值則賦予同一個ID,如下圖的(a)所示。基于ReID的方法思路類似,兩幀之間目標兩兩計算特征相似度,具有最高相似度的兩個目標賦予同一個ID,不過,單獨訓練一個檢測器和ReID模型代價太大,最近的主流思路是一個模型聯合訓練檢測和ReID分支,這類方法稱為JDT(joint detection and tracking)方法,如下圖(b)所示。
上述的時序關聯方法都是啟發式的,并且是相當簡單的,因此它們難以建模長時間的物體復雜的空間和外觀變化。本質上看,其不具備對時間變化建模的能力,這和深度學習“端到端學習”的理念是不一致的。這些方法也許大多數情況下工作正常,但是對于一些挑戰性的場景缺乏魯棒性,這些場景下IoU和外觀是不可信的,而這些復雜場景才是MOT任務的關鍵。因此,作者為了解決這個問題,構建了一個不需要任何數據關聯處理的端到端跟蹤框架。
最近,DETR提出了一套端到端目標檢測的策略,它開創性地提出了“object query”這個概念,這是目標的顯式解耦表示(representation),這種表示簡化了Transformer框架的學習。首次啟發,論文作者拓展“object query”到目標跟蹤領域,形成了“track query”,每個track query負責預測一個對象的完整軌跡。如上圖?所示,和分類和回歸分支并行,MOTR對每一幀預測track query集合,這個track query集輸入到decoder網絡中以產生當前幀的跟蹤預測和更新的track query,更新后的track query傳遞到下一幀的decoder中。這個query傳遞和預測的處理過程會在整個視頻序列上一幀幀重復進行,因此稱為連續query傳遞(continuous query passing)。由于一個query一旦和某個目標匹配,這個query就會一直跟隨這個目標,因此continuous query passing可以很自然地消除數據關聯和一些手工操作,如NMS。
接著,為了建模長期時間關系,作者進一步引入了多幀訓練以及時間聚合網絡(TAN),TAN建立了一個query memory bank來收集歷史幀中和已跟蹤目標對應的query,當前幀的track query會和memory 板塊中的每個query通過多頭注意力進行交互。
作者認為,MOTR是簡單且高效的,并且嚴格意義上它是第一個端到端的MOT框架。通過多幀時間聚合學習的track query有強大的時間建模能力,因而MOTR不需要時間關聯處理或者手工操作。相反,此前基于Transformer的工作并非完全端到端的,它們依然需要IoU匹配或者Tracking NMS等操作。在MOT16和MOT17上的實驗結果表明,MOTR達到SOTA性能并且比之前的方法具有更低的復雜度。
MOTR
Deformable DETR
DETR是Transformer在目標檢測領域的經典成功案例之一。在DETR中,object query是固定數量的可學習位置嵌入,表示可能的目標的proposal。一個object query只會對應一個目標,這種對應關系是通過二分圖匹配構建的。考慮到DETR較高的復雜度和較慢的收斂速度,Deformable DETR將Transformer中的self-attention替換為了multi-scale deformable attention。為了表示object query如何通過decoder與特征交互,作者重新設計了Deformable DETR的解碼器。
令q∈RCq \in R^{C}q∈RC表示object query集且f∈RCf \in R^{C}f∈RC表示從encoder獲得的特征圖,這里的CCC表示特征的維度。解碼器的處理過程可以描述如下式,其中k∈1,…,Kk \in 1, \ldots, Kk∈1,…,K(KKK為decoder的層數),qkq^kqk表示第kkk個decoder層的output query。GsaG_{sa}Gsa?表示DETR中的self-attention操作,GcaG_{ca}Gca?則表示multi-scale deformable attention操作。
qk=Gca(Gsa(qk?1),f)q^{k}=G_{c a}\left(G_{s a}\left(q^{k-1}\right), f\right) qk=Gca?(Gsa?(qk?1),f)
Framework
MOTR中,作者引入track query和continuous query passing來進行端到端的跟蹤,temporal aggregation network進一步被提出用來增強多幀的時間信息。下面就逐一闡述這幾個核心模塊。
End-to-End Track Query Passing
Track Query:
DETR中的object query并不負責預測特定的目標,因此一個object query在不同的幀上可能預測不同的目標。如上圖所示,DETR對MOT數據集進行檢測,同一個object query在兩個不同幀中預測的目標是不一樣的(如上圖中(a)綠色框所示),因此將query的id用于軌跡關聯是不合理的。(作者這里其實想表述的是,object query只是對一個區域目標負責,并不具體到id級別。)
針對上述問題,作者拓展object query進行跟蹤任務,拓展后的稱為track query,每個track query負責一個目標的整個軌跡的預測。如上圖(b)所示,一旦一個track query在某一幀和某個目標匹配之后,這個track query將一直預測這個目標直到該目標消失。因此,同一個track query的所有預測結果就形成了一個目標的軌跡,不需要顯式的數據關聯步驟,至于track query之間的order-preserving則是依據特定目標的track query監督的。當然,還有一個問題,那就是新目標的產生,因此作者進一步提出了empty query來負責新目標的檢測。
Continuous Query Passing:
基于上述提出的track query,作者進一步提出了continuous query passing機制,在這個機制下,track query隨著幀的變化而改變representation和匹配的目標的localization。然后,作者提出了基于continuous query passing的端到端MOT框架,即MOTR。在MOTR中,目標的時間變化建模是編碼器的多頭注意力隱式學習的,因此不需要顯式的數據關聯。
MOTR的整體結構如上圖所示,視頻序列首先會送入CNN中,隨后進入Deformable DETR的編碼器提取基本特征f={f0,f1,…,fN}f=\left\{f_{0}, f_{1}, \ldots, f_{N}\right\}f={f0?,f1?,…,fN?},這里的f0f_0f0?表示第T0T_0T0?幀的特征。對第T0T_0T0?幀而言,特征f0f_0f0?和empty query set qeq_eqe?被輸入到decoder網絡中定位所有初始化目標并生成原始的track query set qot1q_{ot}^1qot1?。到這里,對應到上圖就是最左側的那部分,需要注意,這里的continuous query passing其實將T0T_0T0?的qot0q^0_{ot}qot0?傳遞到了下一幀。 qot0q^0_{ot}qot0?通過QIM模塊生成了下一幀(
T1T_1T1?)的track query輸入,也就是圖上對應的qt1q^1_tqt1?。所以從上圖可以看出來,整個模型迭代式地處理每一幀TiT_iTi?(i∈[1,N]i \in[1, N]i∈[1,N]),QIM根據上一幀地輸出產生的qtiq^i_tqti?會和empty query set qeq_eqe?級聯到一起,級聯后的query set qeq_eqe?回合特征fif_ifi?一起送入decoder中直接產生當前幀的預測結果,并且更新query set qoti+1q_{ot}^{i+1}qoti+1?將其送入到下一幀。
Query Interaction Module
在上面的敘述中,QIM負責接受上一幀的track query輸出并生成當前幀的track query輸入,在這一節將具體闡述Query Interaction Module(QIM)。QIM主要包括目標進出機制(object entrance and exit mechanism)和時間聚合網絡(temporal aggregation network)。
Object Entrance and Exit: 首先來看目標進出機制,我們知道,每個track query表示一個完整軌跡,然而,一些目標可能在中間某一幀出現或者消失,因此MOTR需要輸出一些邊界框{boxi,…,boxj}\left\{b o x_{i}, \ldots, b o x_{j}\right\}{boxi?,…,boxj?}假定目標在TiT_iTi?幀出現但在TjT_jTj?幀消失。
MOTR是如何處理目標進出的情況呢?在訓練時,track query的學習可以通過二分圖匹配的GT來監督。但是,在推理時,使用跟蹤得分預測來決定一個軌跡的出現和消失。來看下圖,這是QIM的結構圖,對TiT_iTi?幀而言,track query set qtiq^i_tqti?通過QIM從Ti?1T_{i-1}Ti?1?幀生成,然后和empty query set qeq_eqe?級聯到一起,級聯的結果繼而輸入到decoder并產生原始的包含跟蹤得分的track query set qotiq_{ot}^iqoti?。qotiq_{ot}^iqoti?隨機被分割為兩個query set,即qeni=qot?i[:de]q_{e n}^{i}=q_{\text {ot }}^{i}\left[: d_{e}\right]qeni?=qot?i?[:de?]和qcei=qoti[de:]q_{c e}^{i}=q_{o t}^{i}\left[d_{e}:\right]qcei?=qoti?[de?:],這里的ded_ede?是qeq_eqe?中query的數量。qeniq_{en}^iqeni?包含進入的目標而qceiq_{ce}^iqcei?包含跟蹤著的和離開的目標。對目標的進入,qeniq_{en}^iqeni?中的query(下圖的“3”)如果跟蹤得分大于進入閾值τen\tau_{e n}τen?則被保留,其余的被移除。表示如下式,sks_ksk?表示qeniq_{en}^iqeni?的第kkk個query qkq_kqk?的分類得分。
qˉeni={qk∈qeni∣sk>τen}\bar{q}_{e n}^{i}=\left\{q_{k} \in q_{e n}^{i} \mid s_{k}>\tau_{e n}\right\} qˉ?eni?={qk?∈qeni?∣sk?>τen?}
對目標的退出,qceiq_{ce}^iqcei?的query(上圖的“2”)如果跟蹤得分連續M幀低于退出閾值τex\tau_{ex}τex?,將被移除,剩下的query(上圖的“1”)則被保留,式子如下,實驗中設置τen=0.8,τex=0.6\tau_{e n}=0.8, \tau_{e x}=0.6τen?=0.8,τex?=0.6且M=5M=5M=5。
qˉci={qk∈qcei∣max?{ski,…,ski?M}>τex}\bar{q}_{c}^{i}=\left\{q_{k} \in q_{c e}^{i} \mid \max \left\{s_{k}^{i}, \ldots, s_{k}^{i-M}\right\}>\tau_{e x}\right\} qˉ?ci?={qk?∈qcei?∣max{ski?,…,ski?M?}>τex?}
Temporal Aggregation Network: 接著,來看時間聚合網絡TAN,TAN的目的是增強時間相關性并為跟蹤目標提供上下文先驗信息。還是上面那張圖,首先構建了一個memory bank以便于跟蹤目標的時間聚合。memory bank qbank={q~ci?M,…,q~ci}q_{bank} = \left\{\widetilde{q}_{c}^{i-M}, \ldots, \tilde{q}_{c}^{i}\right\}qbank?={q?ci?M?,…,q~?ci?}首先收集歷史query(也就是和已跟蹤目標相關聯的query),然后這些memory bank中的query將被級聯到一起,如下式所示。
tgt=q~ci?M⊕?q~ci?1⊕q~cit g t=\widetilde{q}_{c}^{i-M} \oplus \cdots \tilde{q}_{c}^{i-1} \oplus \tilde{q}_{c}^{i} tgt=q?ci?M?⊕?q~?ci?1?⊕q~?ci?
級聯之后,這些query被送入多頭注意力模塊,它們既是value也是key,繼而生成注意力權重。qˉc?\bar{q}_{c}^{\imath}qˉ?c??被作為MHA(多頭注意力)的query,因此有下面的點積注意力的式子,其中的σs\sigma_sσs?表示softmax函數而ddd表示track query的維度。
qsai=σs(tgt?tg?tTd)?qˉciq_{s a}^{i}=\sigma_{s}\left(\frac{t g t \cdot \operatorname{tg} t^{T}}{\sqrtze8trgl8bvbq}\right) \cdot \bar{q}_{c}^{i} qsai?=σs?(d?tgt?tgtT?)?qˉ?ci?
之后,qsaiq_{sa}^iqsai?被FFN網絡進一步調整,這里的FC表示線性投影層而LN表示層標準化,σr\sigma_rσr?表示ReLU激活函數。
tg~t=LN(qsai+qˉci)q^ci=LN(FC(σr(FC(gg~t))+tg~t)\begin{array}{c} t \tilde{g} t=L N\left(q_{s a}^{i}+\bar{q}_{c}^{i}\right) \\ \hat{q}_{c}^{i}=L N\left(F C\left(\sigma_{r}(F C(\tilde{g g} t))+t \tilde{g} t\right)\right. \end{array} tg~?t=LN(qsai?+qˉ?ci?)q^?ci?=LN(FC(σr?(FC(gg~?t))+tg~?t)?
TAN的輸出q^c\hat{q}_{c}q^?c?和qˉeni\bar{q}_{e n}^{i}qˉ?eni?串聯到一起來產生Ti+1T_{i+1}Ti+1?幀的track query set qti+1q_t^{i+1}qti+1?。
Overall Optimization
既然是端到端的結構,那么優化就顯得非常重要,MOTR是以視頻序列作為輸入并且逐幀計算跟蹤損失的,整體的跟蹤損失是每一幀的損失的和并根據GT數目標準化的結果,如下式所示,這里的NNN表示視頻序列的長度,YiY_{i}Yi?和Y^i\hat{Y}_{i}Y^i?分別表示TiT_iTi?幀的預測和對應的GT。Vi=Vti+VeiV_{i}=V_{t}^{i}+V_{e}^{i}Vi?=Vti?+Vei?表示TiT_iTi?幀上所有的GT數目,VtiV_{t}^{i}Vti?和VeiV_{e}^{i}Vei?分別是已跟蹤的目標數目和新軌跡的數目。
Lot(Y,Y^)=∑n=0N(Lt(Yi,Y^i))∑n=0N(Vi)L_{o t}(Y, \hat{Y})=\frac{\sum_{n=0}^{N}\left(L_{t}\left(Y_{i}, \hat{Y}_{i}\right)\right)}{\sum_{n=0}^{N}\left(V_{i}\right)} Lot?(Y,Y^)=∑n=0N?(Vi?)∑n=0N?(Lt?(Yi?,Y^i?))?
LtL_tLt?是單幀的跟蹤損失,和Deformable DETR中的檢測損失是類似的,單幀損失LtL_tLt?可以用下面的式子表示,其中LclsL_{c l s}Lcls?是focal loss,Ll1L_{l_{1}}Ll1??表示L1損失而Lgiou?L_{\text {giou }}Lgiou??表示GIoU損失,λcls,λl1\lambda_{c l s}, \lambda_{l_{1}}λcls?,λl1??和λgiou?\lambda_{\text {giou }}λgiou??則是相應的權重系數。
Lt(Yi,Y^i)=λclsLcls+λl1Ll1+λgiou?Lgiou?L_{t}\left(Y_{i}, \hat{Y}_{i}\right)=\lambda_{c l s} L_{c l s}+\lambda_{l_{1}} L_{l_{1}}+\lambda_{\text {giou }} L_{\text {giou }} Lt?(Yi?,Y^i?)=λcls?Lcls?+λl1??Ll1??+λgiou??Lgiou??
MOTR的跟蹤損失和Deformable DETR的檢測損失主要的不同在于標簽分配的方式不同,對檢測損失而言,標簽的分配完全由匈牙利的分配結果決定,但是對跟蹤損失而言,每個track query負責特定的目標,因此其GT是由對應ID的目標決定的,對empty query而言,它的GT才是通過匈牙利匹配得到的。
實驗
首先是和其他SOTA的比較,MOTR確實取得了相當不錯的效果,相比此前基于Transformer的方法也有了不小的提高。
也進行了一些模塊的消融實驗,如下。
總結
論文基于Transfomer提出了一個真正的端到端的多目標跟蹤框架MOTR并超越了之前的方法,該框架真正意義上不需要數據關聯和NMS等后處理操作,并且在基準數據集上達到了SOTA效果,是很值得關注的工作。本文也只是我本人從自身出發對這篇文章進行的解讀,想要更詳細理解的強烈推薦閱讀原論文。最后,如果我的文章對你有所幫助,歡迎一鍵三連,你的支持是我不懈創作的動力。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: Linux闲时自动抢占GPU脚本
- 下一篇: 0005-Longest Palindr