End-to-End Video Instance Segmentation with Transformers
PDF, Video, Yuqing Wang, Zhaoliang Xu, Xinlong Wang, Chunhua Shen, Baoshan Cheng, Hao Shen, Huaxia Xia, arXiv 2020
Summary
Video instance segmentation(VIS) task를 수행하는 모델입니다.
DETR과 유사한 구조를 갖으며 segmentation task를 수행하기 위해 segmentation branch가 추가되었고, video data를 다루기 때문에 temporal axis가 추가되었습니다.
기존 VIS task를 수행하는 모델들은 segmentation을 위한 pixel-level similarity 와 tracking을 위한 instances 사이의 similarity 를 학습했습니다. 해당 논문에서는 유사도를 기반으로 long-range dependency을 modeling하는 transformer를 활용합니다. similarity가 핵심이 되는 task에서 similarity 기반인 transformer를 적용한다면 뛰어난 성능을 얻을 수 있을 것입니다.
VisTR은 다수의 이미지 frame으로 구성된 video clip을 입력 받아 video 내에 존재하는 각 instance에 대한 mask의 sequence를 순서대로 출력합니다.
VisTR은 4가지 요소를 포함합니다.
(1) CNN backbone
input video clip의 pixel-level feature sequence를 추출합니다. 각각의 프레임에 CNN을 적용하여 각 frame에 대한 lower-resolution activation map을 생성합니다. resnet50을 사용하고 DETR과 동일한 파라미터를 사용합니다.
(2) Transformer encoder
1x1 conv를 적용해 C 채널을 d 채널로 축소하여 transformer encoder로 전달합니다. TxdxHxW 차원이 된 feature map은 spatial, temporal 차원이 하나의 차원으로 flatten 합니다. 즉, d x (TxHxW) 차원이 됩니다.
트랜스포머는 permutation-invariant한 속성을 갖고 있는 반면에 segmentation task에서는 정확한 위치 정보가 필요합니다. 따라서 fixed Temporal and spatial positional encoding을 더합니다.
(3) Transformer decoder
각 프레임에 n개의 instance가 존재하고 T개의 frame이 존재합니다. 따라서 N=n*T 개수를 지닌 instance queries를 사용합니다. 쿼리는 pixel feature와 동일한 차원을 갖으며 모델에 의해 학습됩니다. encoder의 출력값 E와 N개의 instance quries Q를 입력 받아 N개의 instance features인 O를 출력합니다.
주의할 점은 출력값이 input frame order와 서로 다른 이미지에 대한 instance prediction의 순서가 같아야합니다. 이를 구현하기 위해 Instance Sequence Matching module을 사용합니다.
(4) Instance Sequence Matching
decoder의 출력값 O에 FFN을 적용해 box prediction(중심좌표, 상대적인 높이 너비)를 출력합니다. 이제 DETR과 동일하게 구현합니다. 각 예측값에 gt를 할당하는 optimal matching 알고리즘을 적용합니다. 각 frame에 n개의 instance를 갖고 있는데 이미지에 존재하는 instance가 n보다 작으면 백그라운드를 나타내는 $\theta$로 padding 합니다.
위 loss를 최소가 되도록 예측값에 gt를 할당하는 optimal assignment를 수행하고 gt가 할당된 박스와 gt 사이의 헝가리안 loss를 추가합니다. DETR과 차이점은 mask loss가 추가되었습니다.
(4) Instance Sequence Segmentation
Instance Sequence Segmentation module은 각 instance에 대한 mask sequence를 예측합니다.
이게 좀 복잡하고 직관과 맞아 떨어지지가 않는 것 같습니다.
mask features는 decoder의 출력값 O와 encoder 출력값 E 사이의 각 프레임에 대한 유사도 맵을 계산합니다. 그리고 계산한 유사도 맵, backbone 출력값 B와 encoder 출력값 E를 함께 fuse 합니다. deformable conv를 적용하면 서로 다른 frame의 각 instance에 대한 mask featuremap이 얻어집니다.
그리고 각 frame을 concat하여 시간축을 추가한 뒤, 3D Conv 를 적용하여 서로 다른 frame에서 동일한 instance에 대한 mask feature 정보를 섞습니다.
t 프레임에서 instance i에 대한 mask feature map에 대한 차원은 다음과 가습니다.
a는 채널입니다. 여기에 T frame을 concat하여 다음의 차원을 형성합니다.
3D Conv를 적용하여 mask sequence를 출력합니다.
Experiment
Youtube VIS dataset으로 학습합니다.
Video의 시간 정보가 중요하다는 것을 보여주는 실험
time order가 중요하다는 것을 보여주는 실험
instance quries 개수에 따른 실험 결과
positional embedding 도 중요합니다.
다른 방법과 비교
my github