Video Object Segmentation using Space-Time Memory Networks

Jongchan Park
Lunit Team Blog
Published in
12 min readJun 4, 2020

Intro

안녕하세요, Lunit의 박종찬 연구원 입니다. 오늘 소개해드릴 논문은 ICCV2019에 소개된 연세대/Adobe Research video object segmentation관련 논문입니다. 본 연구를 수행한 팀은 이미 video segmentation에서 DAVIS 2018 challenge 1등[1]을 한 전력이 있습니다.. 본 연구는 이미 어느 정도 유명세를 타서 아시는 분도 많을텐데, Adobe MAX 2018 Sneaks에서 “Fask Mask”라는 이름으로 데모를 선보인 적 있고, GTC2019에서 Top Poster Award를 받았습니다. [arXiv링크]

Video object segmentation

아래 데모 영상을 보시면 어떤 task를 수행하는지 알 수 있습니다.

첫 frame에서 target foreground object에 대한 segmentation mask가 주어지면, 그 뒤에 이어지는 프레임에서 해당 object를 segmentation하게 됩니다. 데모에서 보여준 것 처럼 비디오에서 다양하게 활용될 수 있는 툴로 보입니다.

비디오 프레임이 뒤로 갈 수록, target object의 외관 (appearance)이 매우 크게 변화하거나, occlusion이 발생하면 task의 난이도가 많이 증가합니다. 기존 연구들은 주로 과거 프레임으로부터 정보를 활용해서 현재 프레임에서 segmentation을 수행합니다. 여기서 우리는 두 가지 질문을 던질 수 있습니다: (1) 어떤 프레임을 사용할 것인지? (2) 과거 프레임을 어떻게 사용할 것인지?

가장 중요한 프레임은 주로 첫번째 프레임직전 프레임 입니다. 첫번째 프레임은 가장 정확한 정보(robust)를 담고 있고, 직전 프레임은 현재 프레임과 가장 비슷(less appearance change/less occlusion)하기 때문에 두 프레임 모두 도움이 될 수 있습니다. 따라서 하나씩만 쓰거나, 둘 다 사용하는 방법론들이 제안되어왔습니다. 본 연구에서는 여러개의 intermediate frame을 사용하는 방법을 제안합니다. 모델에 variable length input이 들어온다는 것인데, 보통 CNN 아키텍쳐는 고정되어 있기 때문에 크기가 가변적인 입력은 사용하기 어렵습니다. 본 연구에서는 Memory구조를 활용하여, 전 프레임들의 정보를 저장하고, 현재 프레임에 도움이 되는 부분을 읽어서 사용합니다. 구체적인 memory구조는 뒤에서 설명하도록 하겠습니다.

프레임들을 활용하는 방법은 크게 두 가지로 나눌 수 있는데, online learningoffline learning입니다. Online learning은 주어진 첫 프레임으로 모델을 학습시키는 방법이고, offline learning은 학습을 하지는 않습니다. Online learning은 보통 성능이 높지만 모델 학습이 수행되어야해서 매우 느리고, offline learning은 빠른 대신 성능이 약간 낮습니다. 본 연구는 offline learning에 속합니다. 그리고 online learning 방법들보다 성능은 비슷하거나 더 좋지만, offline learning 방법만큼 속도가 빠릅니다. 특히, large scale dataset인 Youtube-VOS에서 기존 연구들 대비 매우 큰 성능 향상을 보여주었습니다.

(a)는 직전 프레임 (b)는 첫 프레임 ©는 둘 다 활용, (d)는 본 연구에서 제안한 방법으로 중간 프레임의 결과를 memory에 저장한 후 현재 프레임에 활용한다.

Memory

memory구조의 모습. VQA를 예시로 들었다.

Memory구조는 주로 Visual Question Answering (VQA)에서 사용되었는데, contents (from visual)는 memory에 저장하고 정답은 주어진 query (=question)에 의거하여 답해야하기 때문이다. 이 구조를 보면, memory는 keyvalue로 이루어져있는데, 그림 상에서 Memory로 표시된 좌측이 key, 우측이 value입니다. Python dictionary구조랑 연관지어서 생각하면 이해하기가 편합니다. Query는 key로 embedding되어서 memory내의 key와 similarity를 구합니다(주로 dot product), 그리고 similarity의 softmax로 memory value를 weighted sum하는데, 이게 최종 read되는 memory입니다. (본 연구에서 multi hop은 사용하지 않았으므로 생략.)

Method and Experiments

Overview

Architecture overview.

위의 그림은 전체적인 architecture의 모습입니다. 왼쪽처럼 이전 프레임들 (RGB frame + Foreground Mask)가 memory에 저장되고, 오른쪽에서는 현재 주어진 프레임을 기반으로 메모리에서 정보를 가져온 후 예측합니다. 이렇게 예측된 foreground probability map은 다시 메모리에 저장됩니다. Encoder는 ResNet50의 stage4 feature(ch=512)를 기반으로 encoding되고, key는 1/8 사이즈로 embedding, value는 1/2 사이즈로 embedding됩니다. EncM은 4채널 입력을 받고 EncQ는 3채널 입력을 받습니다. Decoder는 동일 저자의 작년 논문[2] 구조를 사용했다고 합니다.

Space-time Memory Read

Memory 모듈 구조. 좌측은 query value / key이고, 우측은 memory key / value를 나타낸다.

위의 그림은 memory 구조를 나타내고 있습니다. 이 그림이 익숙한 분들도 있을텐데요, 작년 CVPR2018 에서 발표되었던 “non-local neural networks(루닛 블로그 링크)”[3]와 매우 흡사한 구조입니다. NL과 다른 점은, 이 구조가 self-attention이 아니라 이전 프레임들의 정보를 가져다 쓰는 memory의 역할을 한다는 점 입니다. 구조적으로 특별하지는 않지만 기발하게 잘 사용했다고 여겨집니다. 구조를 자세히 들여다보면, Query key와 memory key의 similarity를 dot product로 계산하고, softmax값으로 memory value에서 weighted sum을 합니다. 이렇게 read된 memory는 query value와 concat되어서 최종 read output이 됩니다. 여기서 중요한 점은, memory read의 단위가 각 프레임의 픽셀이라는 점 입니다. 따라서 Space (h,w)-time(frame)을 펼쳐두고 메모리 저장 및 읽기를 수행하는 것 입니다. 현재 프레임(query)의 각 픽셀은 과거 프레임들의 모든 픽셀들과 비교 후 참조할 수 있습니다.

Training / Inference

학습은 두 단계로 진행이 됩니다. 첫번째 단계는 비디오가 아닌 이미지와 이미지에 대한 segmentation mask를 이용합니다. 간단하게 생각하면, random affine transformation으로 하나의 이미지를 여러개의 augmented frame으로 변형합니다. 변형된 다수의 이미지들을 비디오 프레임이라고 생각하고 학습할 수 있습니다. 데이터셋은 object mask가 있는 데이터셋이면 사용 가능합니다(예를 들어 MS-COCO segmentation). 두번째 단계는 비디오를 이용해서 학습합니다. 데이터셋은 Youtube-VOS / DAVIS-2017를 이용합니다. 비디오에서는 3개의 프레임을 골라 사용하는데, 이 프레임 간의 간격이 클수록 난이도가 올라가기 때문에, 프레임 간 의 간격을 0부터 25까지 점진적으로 늘려갑니다. Inference할 때 모든 프레임을 메모리에 저장하면 overflow가 나고 느려질 수 있기 때문에, 첫 프레임 / 마지막 프레임은 반드시 사용하고, 매 5프레임마다 메모리에 저장하도록 합니다.

Experiment result (Quantitative)

실험은 Youtube-VOS(YV)와 DAVIS 2016/2017, 2종류의 벤치마크에서 진행되었습니다. DAVIS 데이터셋에서의 실험에는 YV학습 데이터를 같이 쓴 모델도 있습니다. Evaluation metric은 DAVIS challenge에서 사용된 region similarity와 contour accuracy 두 종류가 있습니다.

Youtube-VOS의 실험 결과는 기존 연구들보다 월등히 높은 성능을 보여줍니다. Youtube-VOS의 train/val 샘플 갯수랑 클래스 갯수가 DAVIS보다 훨씬 많은 점을 고려하면 실제 large-scale에서의 성능 검증이 잘 되었다고 볼 수 있습니다. 하지만 DAVIS에서 성능을 리포팅한 최근 논문들 (아래 DAVIS표의 DyeNet / OnAVOS / PReMVOS 등)은 Youtube-VOS에서 비교하지 않아 아쉬움이 남습니다.

Youtube-VOS 실험 결과.

DAVIS에서도 아주 좋은 성능을 보여주었습니다. 빠른 속도인 offline learning방법들 중에서는 가장 좋은 성능이 나왔고, online learning과는 비슷한 성능을 보여줍니다. YV데이터셋을 사용한 모델은 가장 좋은 성능을 보여주었지만, 기존 SOTA모델에서는 YV를 포함한 실험이 없어서 직접적인 비교가 안 되어 약간 아쉽습니다. 물론, 성능이 더 좋게 나오는 online learning모델들이 있지만 시간 차이를 고려하면 본 논문의 모델의 강점이 돋보입니다.

DAVIS-2016 실험 결과.

Experiment Result (Qualitative)

Figure 5에서는 occlusion이 발생한 샘플에서의 결과를 보여줍니다. 특히 두번째 샘플과 마지막 샘플이 인상적인데요, 메모리를 사용하기 때문에 occlusion이 발생하더라도 그 전 frame에서의 정보를 활용할 수 있기 때문에 잘 잡는 듯 합니다.

아래의 그림은 현재 프레임의 마스크를 만들 때 메모리의 어떤 부분을 참조했는지 시각화한 결과입니다. Non-local처럼 각 픽셀별로 어떤 부분을 참조했는지 보여주었으면 하는 아쉬움이 있습니다. 예를 들어, 다리부분 mask를 생성할 때 다른 프레임의 다리에서 메모리 참조가 일어난다면 직관적으로 이해가 될 듯 합니다. 하지만 뒤돌아있는 프레임 보다는 비슷한 자세를 취하거나 정면일 때를 많이 참조하는 듯 합니다. (0,0) 위치에서 맵이 뜨는건 좀 신기합니다.

Conclusion (TL;DR)

  • 본 연구에서는 video object segmentation (VOS)에서 memory구조를 활용합니다.
  • 기존 연구의 프레임 참조 방식의 문제점을 지적하며, space-time에 대해서 memory를 활용합니다.
  • 구조는 기존 VOS 아키텍쳐를 사용했고 memory구조는 non-local block을 변형해서 사용하였습니다.
  • Youtube-VOS / DAVIS실험에서 offline learning방법 중 SOTA를 찍었고, online learning방법들과는 비슷한 성능을 보여주었습니다.
  • 데모와 정성적인 결과에서 메모리 구조가 occlusion등의 상황에 강인한 것을 볼 수 있습니다.

혹시 궁금한 점이 있으시거나, 본 글에서 오류를 찾으셨다면 이메일(jcpark@lunit.io)로 연락 주시기 바랍니다. 본 글은 여기서 마치겠습니다.

[1] Oh, Seoung Wug, Joon-Young Lee, Ning Xu, and Seon Joo Kim. “Fast User-Guided Video Object Segmentation by Interaction-and-Propagation Networks.” CVPR 2019.
[2] W. Oh, J.-Y. Lee, K. Sunkavalli, and S. J. Kim. Fast video object segmentation by reference-guided mask propagation. In IEEE Conference on Computer Vision and Pattern Recog- nition (CVPR), 2018.
[3] Wang, Xiaolong, Ross Girshick, Abhinav Gupta, and Kaiming He. “Non-local neural networks.” In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 7794–7803. 2018.

--

--

Jongchan Park
Lunit Team Blog

Deep Learning Researcher, working at Lunit Inc. Mainly interested in computer vision for recognition. https://sites.google.com/view/jongchanpark