Swin-Transformer再次助力奪冠 | Kaggle第1名方案解讀(工程人員建議必看)


在報告中介紹了two-step “detect-then-match”的視頻實例分割方法。第1步對每一幀進(jìn)行實例分割得到大量的instance mask proposals。第2步是利用光流進(jìn)行幀間instance mask matching。用high quality mask proposals證明了一個簡單的匹配機(jī)制可以促使得到更好的跟蹤。本文的方法在2021年UVO比賽中取得了第1名的成績。
1實例分割
這里作者采用了先檢測后進(jìn)行語義分割的Pipeline的方法。
首先,訓(xùn)練一個目標(biāo)檢測器為視頻的每一幀生成邊界框。 然后,取前100個bounding box proposals,裁剪帶有這些bounding box的圖像,并將調(diào)整大小后的圖像塊輸入前景/背景分割網(wǎng)絡(luò),以獲得Instance Mask。
1、檢測網(wǎng)絡(luò)
作者采用Cascade Region Proposal Network作為Baseline,采用Focal loss和GIoU loss進(jìn)行分類和邊界框回歸。
在訓(xùn)練過程中,作者使用2個獨立的SimOTA采樣器進(jìn)行正/負(fù)樣本采樣,其中一個用于分類,另一個用于邊界框回歸。與此同時作者也放寬了邊界框回歸采樣器的選擇標(biāo)準(zhǔn),以獲得更多的正樣本。
與分類頭和邊界框回歸頭并行增加一個IoU分支,用于預(yù)測預(yù)測邊界框與ground truth之間的IoU。
為了解決目標(biāo)檢測中分類任務(wù)和回歸任務(wù)之間的沖突問題,作者采用了decoupled head算法。
為了節(jié)省內(nèi)存,所有金字塔的頭部都有相同的權(quán)重。
將decoupled head的第1卷積層替換為DCN。
作者在FPN中添加了CARAFE塊,并使用Swin-Transformer作為Backbone。
2、語義分割
前面使用檢測網(wǎng)絡(luò)預(yù)測的邊界框來裁剪圖像,并將它們的大小調(diào)整為512×512。裁剪后的圖像路徑被輸入到分割網(wǎng)絡(luò)以獲得Instance Mask。
作者采用了Upernet架構(gòu)和Swin-Transformer作為Backbone。
該分割網(wǎng)絡(luò)是一種二值分割網(wǎng)絡(luò),如果像素屬于目標(biāo),則被預(yù)測為前景,否則被預(yù)測為背景。
2幀間Mask匹配

圖1顯示了本文方法的概述。
作者的想法類似于IoU-tracker。利用預(yù)測的光流將前一幀的跟蹤器wrapped 到當(dāng)前幀,然后通過計算被wrapped Mask與detected Mask之間的IoU將跟蹤器與當(dāng)前幀的detected Mask匹配。
用M表示所有幀的 mask proposals,表示幀t的mask proposal。t表示視頻長度,F(xiàn)表示光流,其中表示幀t與幀t+1之間的光流。
首先,用第1幀中的mask proposal初始化跟蹤器。 然后,使用光流將跟蹤器的warpped mask到第2幀。 然后,通過計算它們之間的IoU,將warpped mask與detected Mask 匹配。
作者認(rèn)為只有當(dāng)IoU大于固定閾值時匹配才會成功。如果跟蹤器與detected Mask匹配,則用匹配的Mask替換跟蹤器的最新Mask。如果跟蹤器和中的Mask之間沒有匹配,則使用warpped mask更新其最新的Mask。如果跟蹤器沒有連續(xù)匹配5幀,從跟蹤器列表中刪除這個跟蹤器。對于中沒有匹配跟蹤器的Mask,作者用這些Mask初始化新的跟蹤器,并將這些跟蹤器添加到跟蹤器列表中使用非最大抑制(NMS)來去除最新Mask IoU大于0.7的跟蹤器。
給每個跟蹤器分配一個分?jǐn)?shù),這個分?jǐn)?shù)是被跟蹤的幀數(shù)和檢測分?jǐn)?shù)之和的乘積。
3復(fù)現(xiàn)細(xì)節(jié)
1、檢測模型
作者使用MMDetection來訓(xùn)練檢測器。對于Backbone網(wǎng)絡(luò),作者通過ImageNet 22k預(yù)訓(xùn)練了Swin-Transformer。
這里所有的檢測器都經(jīng)過了Detectron ‘1x’ setting的訓(xùn)練。2個SimOTA采樣的中心比設(shè)置為0.25,分類頭的top-K數(shù)設(shè)置為10,回歸頭的top-K數(shù)設(shè)置為20,以獲得更多的正樣本。
分類分支和回歸分支使用4個的卷積層,IoU分支和回歸分支共享相同的卷積層。為了訓(xùn)練以Swin-Transformer為Backbone的檢測器,作者采用AdamW作為優(yōu)化器,初始學(xué)習(xí)率設(shè)置為1e-4。批量大小設(shè)置為16。在COCO上進(jìn)行訓(xùn)練后,結(jié)合6個epoch的UVO-Sparse和UVO-Dense數(shù)據(jù)集對檢測器進(jìn)行微調(diào)。所有的檢測器都是以 class-agnostic的方式訓(xùn)練的。在推理過程中增加測試時間,進(jìn)一步提高網(wǎng)絡(luò)性能。
2、語義分割
作者使用MMSegmentation來訓(xùn)練分割網(wǎng)絡(luò)。這里使用與檢測網(wǎng)絡(luò)相同的Backbone。
在訓(xùn)練過程中,給定一幅圖像和一個Instance Mask,首先生成一個bounding box,bounding box包含Instance Mask,然后在bounding box的各個方向上添加20像素的邊界。
作者使用生成的邊界框來裁剪圖像,并調(diào)整圖像補(bǔ)丁的大小為。隨機(jī)翻轉(zhuǎn)、隨機(jī)光度失真和隨機(jī)bounding box抖動被用作數(shù)據(jù)增強(qiáng)。
作者還采用多元學(xué)習(xí)率策略,初始學(xué)習(xí)率設(shè)置為6e-5。批大小被設(shè)置為32,AdamW被用作優(yōu)化器。
首先,在OpenImage, PASCALVOC和COCO數(shù)據(jù)集的組合上訓(xùn)練網(wǎng)絡(luò)為300k iter, 然后,在UVO-Density和UVO-Sparse數(shù)據(jù)集的組合上優(yōu)化網(wǎng)絡(luò)為100k迭代,初始學(xué)習(xí)率設(shè)置為6e-6。
所有的分割網(wǎng)絡(luò)都是用class-agnostic的方式訓(xùn)練的,因此,分割裁剪路徑中的目標(biāo)成為一個前景/后景分割問題。推理過程中僅使用翻轉(zhuǎn)試驗增強(qiáng)。
3、光流估計
作者在FlyingTh-ings上訓(xùn)練的模型。FlyingThings是一個用于光流估計的大規(guī)模合成數(shù)據(jù)集。數(shù)據(jù)集是通過隨機(jī)化從ShapeNet數(shù)據(jù)集中收集的相機(jī)的運(yùn)動和合成對象生成的。先在FlyingThings上對光流估計模型進(jìn)行預(yù)訓(xùn)練,每次迭代10萬次,BS為12;然后在FlyingThings3D上進(jìn)行10萬次迭代,BS為6。
指標(biāo)與可視化結(jié)果


在圖2中,作者展示了一些視頻實例分割結(jié)果。本文的方法可以適用于不同形狀的物體。
潛在的改進(jìn)點
本文簡單的“檢測然后匹配”框架可以作為視頻實例分割的Baseline。它嚴(yán)重依賴于每幀mask proposals的質(zhì)量。該方法的性能可能受到嚴(yán)重遮擋、物體出現(xiàn)/消失/重新出現(xiàn)等因素的影響。通過在Mask匹配過程中考慮目標(biāo)層理,可以很好地解決這些問題。
4參考
[1].1st Place Solution for the UVO Challenge on Video-based Open-World Segmentation 2021
5推薦閱讀

YOLOv5-Lite 樹莓派實時 | 更少的參數(shù)、更高的精度、更快的檢測速度(C++部署分享)

HR-Former | 隨遲但到,HRNet+Transformer輕裝歸來(非常值得學(xué)習(xí)!?。。?/p>

Kaggle第一人 | 詳細(xì)解讀2021Google地標(biāo)識別第一名解決方案(建議全文背誦)
長按掃描下方二維碼添加小助手。
可以一起討論遇到的問題
聲明:轉(zhuǎn)載請說明出處
掃描下方二維碼關(guān)注【集智書童】公眾號,獲取更多實踐項目源碼和論文解讀,非常期待你我的相遇,讓我們以夢為馬,砥礪前行!

