[NeurIPS 2021] Aligning Pretraining for Detection via Object-Level Contrastive Learning

안녕하세요. 허재연입니다. 이번에는 object detection을 위한 self-supervised learning(SSL) 방법을 다룬 논문을 들고 왔습니다. NeurIPS 2021에서 spotlight를 받은 논문이며, Microsoft Research Asia 연구원들이 작성한 논문입니다. 기존의 SSL 방법론들이 object detection이나 segmentation같은 dense feature를 이용하는 downstream task에는 sub-optimal한 점을 파고든 논문입니다. 함께 살펴보겠습니다.

Introduction

컴퓨터비전에서 기존에는 이미지넷 데이터셋 등을 활용해 사전학습한 가중치를 전이학습하여 모델 가중치를 초기화하는 방법이 주류였지만, 점점 이러한 대규모 labeled dataset이용한 사전학습 방법에 대한 문제가 제기되었습니다. 새로운 데이터셋에 대하여 사전학습이 필요할 때, 해당 데이터셋을 수집하기도 어렵고, 특히 특정 task (segmentation이나 pose estimation, depth estimation 등)에서는 annotation에 대한 labeling cost가 너무 큰 문제가 있기 때문이었습니다. 이로 인해 라벨 값이 없는 데이터 자체만을 활용해 해당 데이터에 대한 표현력을 확보하고자 하는 self-supervised learning이 주목받게 되었고, 다양한 self-supervised learning 방법론들이 제안되어 2020년 이후에는 supervised pretraining에 버금가는 성능을 보이기 시작하였습니다.
당시 self-supervised learning에서는 사람이 휴리스틱하게 설계한 특정 pretext task로 사전학습하는 방법보다는, image instance 자체의 유사도 비교를 이용하는 방법들이 주목받고 있었습니다. 대표적인 방법들이 SimCLR, MoCo, BYOL, SwAV, Barlow Twins입니다. SimCLR로 예시를 들자면, 하나의 이미지를 서로 다르게 random augment한 다음에 feature extractor-projector를 거쳐 latent vector로 변환시킨 뒤 동일한 이미지에서 추출된 latent vector끼리의 코사인 유사도는 높아지도록, 다른 이미지에서 추출된 latent vector끼리의 코사인 유사도는 낮아지도록 학습을 반복합니다. image Instance 자체를 구별하는 작업을 반복해 feature extractor가 이미지 데이터 전반에 대한 좋은 표현력을 갖추도록 유도하는 것이죠. 다른 방법론들도 프레임워크 디테일에 대한 차이가 있긴 하지만, image instance에서 추출한 embedding vector간 비교를 활용하는 전반적인 과정을 공유합니다. 다음은 BYOL의 프레임워크이니, 참고하시면 좋을 것 같습니다.

위와 같은 사전학습 방법론들의 성능 비교 싸움은 보통 ImageNet dataset에 대한 classification 부문에서 이뤄집니다. 가장 간단하고 보편적인 비교 방법이기 때문인 것 같은데, 사실 instance discrimination 계열 SSL 방법론들이 object detection이나 segmentation에서도 나쁘지 않은 성능을 보이긴 하지만 classification에서만큼 좋은 결과를 보이지 못할 때가 있습니다.

사실 어떻게 보면 당연한게, detection이나 segmentation 같은 이미지 데이터의 local한 feature에 집중해야 하는 dense prediction task와, 하나의 image instance 전체를 고려하게 되는 classification task 간에는 task 자체에 어느 정도 gap이 있기 때문입니다. 그리고 위와 같은 instance discrimination 계열의 사전학습 방법들은 image instance 전체를 하나의 벡터로 변환하여 사전학습을 진행하게 되기에, 충분한 dense feature를 가지고 있지 않을 수 있습니다. 임베딩 벡터들 간 유사도 비교를 통해 positive pair끼리는 가깝게, negative pair끼리는 멀게 임베딩하는 과정을 반복하는 것은 어떻게 보면 각각 data instance가 하나의 class가 되는 classification으로 볼 수도 있습니다(이미지 1000개를 가지고 학습하면 class 1000개짜리 classification 학습을 한다고 해석할수도 있겠죠. 다른 데이터들은 유사하던 말던 negative pair로 묶어버리니까요).

또 한가지 문제는 네트워크 구조 자체에 gap이 있다는 것입니다. object detection 모델에는 FPN이나 R-CNN head처럼 특정 목적을 가지고 설계된 sub-network가 추가되는 경우가 많은데, 이미지 단위 contrastive learning을 한 백본 네트워크를 활용하면 이런 부분들에 대해서는 사전학습을 할 수 없게 됩니다.

저자들는 이런 misalignment에 대한 문제를 제기하고, object detection에 적합한 self-supervised pretraining 방법을 개발하는것을 목표로 합니다. object detection에 있어 object에 대한 표현은 bounding box 내부에 있게 될 것이고, 객체의 위치와 크기가 바뀌더라도 잘 인식하는 translation / scale invariance 특성을 갖고 있어야 할 것입니다. 이런 특성과 기존의 self-supervised learning 방법들에서 영감을 얻어, 저자들은 object-level self-supervised pretraining framework인 SoCo(Selective Object COntrastive Learning)라는 방법론을 제안합니다. SoCo는 image-level contrastive learning을 진행하는 기존 방법론들과 달리, selective search를 이용하여 object proposal을 생성한 뒤 이미지 내부의 각 object proposal를 독립적인 instance로 취급합니다. 각 object instance에 대해 scale/location augmentation을 적용한 뒤 augmented view 간 유사도를 높이는 방법으로 학습을 진행하게 됩니다. 또한, SoCo는 detector에서 사용되는 모든 network에 대한 사전학습이 가능하게 설계되어 기존 방법론들과 달리 detector의 모든 계층들을 잘 초기화할 수 있게 하였습니다.

Method

SoCo는 contrastive learning방법을 활용해 object detector에 알맞는 사전학습을 진행하게 됩니다. FPN이나 Mask R-CNN의 head와 같은 object detector의 모듈을 같이 학습시켜 detector의 최대한 모든 계층을 잘 초기화시키는것이 목적으로 하고, translation이나 scale 변화에 invariant한 object-level representation을 학습하고자 하기에 기존 사전학습 방법론들보다 framework가 약간 더 복잡합니다. 이를 달성하기 위해 multiple augmented view를 만들고 feature pyramid의 다른 level에서 assignment를 수행한 다음, 다르게 증강된 view에서 동일 object에 대해 feature 유사도를 최대화하는 contrastive learning을 진행하게 됩니다. 하나씩 살펴보겠습니다.

Data Preprocessing

Object Proposal Generation

일단 각 raw image에서 object proposal 집합을 생성하기 위해 R-CNN과 Fast R-CNN에서 사용되었던 unsupervised object proposal 생성 알고리즘인 selective search를 사용합니다. 사실 너무 예전 방식이기도 하고 RPN이 아닌 selective search를 사용하는 이유가 뭘까.. 고민해보았는데, 일단 해당 프레임워크는 real-time으로 동작할 필요가 없어 동작 시간에 대한 압박이 적고, object의 위치를 잘 찾는게 목적이 아니기 때문에 네트워크와 독립적이고 unsupervised로 동작하는 region proposal을 사용한 것 같다는 개인적인 결론을 내렸습니다. 각 object proposal은 b = {x,y,w,h} 형태로 표현되며, aspect ratio와 이미지 크기가 너무 크거나 작은 것은 제외시킵니다. selective search를 이용하기 때문에 object proposal 생성 단계는 offline으로 진행되고, 각 input image에 대해 K개의 proposal을 무작위로 선택하게 됩니다.

View Construction

위 그림에서 보는바와 같이 V1, V2, V3 개의 view를 사용하게 됩니다. 입력 이미지를 224×224로 resize해 V1을 얻고, V1에 [0.5, 1.0] scale 범위의 random crop을 한 뒤 이를 다시 224×224로 resize하여 V2를 생성한 다음(V2 범위를 넘어선 object proposal은 drop), V2를 112×112크기로 downsample하여 V3를 얻습니다. 이미지 크기를 resize하는 과정에서 bounding box는 함께 변환됩니다. 저자의 말로는 동일한 object proposal에 다른 scale 및 location이 다르게 변환되었으므로 모델이 translation-invariant하고 scale-invariant한 객체 수준의 표현을 학습할 수 있다고 합니다. 마지막으로 V1, V2, V3에 각각 random한 augmentation을 진행하게 됩니다. augmentation은 BYOL과 같은 방식을 채택했으며, 각각의 view에 이미 crop 및 resize가 진행되었으므로 crop 및 크기 변환은 추가적으로 적용하지 않았습니다. 최종적으로 적용된 augmentation은 flipping, color distortion(brightness, contrast, saturation, hue), 흑백 변환, 가우시간 블러링, solarization입니다.

Box Jitter

view 간 object proposal에 대해 더욱 scale / location variance를 주기 위해, 생성된 poposal에 box jittering을 가하게 됩니다. object proposal 영역 b={w,y,w,h}에 대해 x=x+rw, y=y+rh, w=w+rw, h=h+rh의 변환을 적용합니다(r은 -1.0 ~ 1.0입니다). box jittering은 0.5 확률로 각 proposal에 대해 무작위로 적용됩니다.

Object-Level Contrastive Learning

SoCo의 목적은 사전학습 과정과 object detection의 align을 맞추는 것입니다. 여기서는 FPN 및 Mask R-CNN 프레임워크를 사용하였습니다. 그림에서 FPN의 출력은 {P2,P3,P4,P5}로 나타내어졌으며, 낮은 해상도 때문에 P6은 사용하지 않았다고 합니다.

Aligning Pretraining Architecture to Object Detection

이미지 수준 특징 추출기 fI로는 FPN이 있는 백본을 사용하였습니다. bounding box b에 대해, 해당 scale level에 대한 전경 feature를 추출하기 위해서 RoIAlight을 사용하고, 이를 R-CNN head fH에 태우게 됩니다. image view V의 bounding box b에 대한 object-level feature representation은 다음과 같습니다 :

SoCo는 기존의 self-supervised learning 방법론들처럼 online network, target network 2개의 신경망을 사용해 학습을 진행하는데, 이 둘은 모델 구조는 동일하지만 가중치는 서로 다릅니다. online network가 학습을 하게 되면 momentum 계수에 따라 target network로 파라미터가 전송되어 업데이트하게 됩니다.

위 그림에서 확인할 수 있듯 V1은 online netowork를, V2,V3는 target network 거치게 되는데, 다음 수식과 같이 backbone with FPN -> RoIAlign -> R-CNN head를 거쳐 object-level feature representation h를 얻게 됩니다. 다음 수식(2)는 V1이 online network를, 수식 (3)은 V2,V3가 target network를 통과해 object-level feature representation을 얻는 것을 표현할 수식입니다.

이렇게 얻은 object-level feature representation hi는 projector 및 predictor를 거쳐 최종적으로 latent embedding vector vi로 변환됩니다. online network 뒤에는 projector g, predictor q가 배치되고, target network 뒤에는 trivial solution을 방지하기 위해 predictor q 없이 projector g만 거치도록 설계되었습니다. projector g 및 predictor q는 모두 2계층짜리 MLP입니다. 수식으로 나타내면 다음과 같습니다 :

이렇게 얻어진 embedding을 이용해 i번째 object proposal에 대한 contrastive learning을 진행하게 되며, 초반에 K개의 proposal을 얻었으므로 전반적인 loss function은 다음과 같이 정의되게 됩니다. 수식 (5)는 i번째 object proposal에 대해 V1-V2간, 그리고 V1-V3간 contrative learning을 한다고 받아들이시면 됩니다.

Experiments

self-supervised pretraining에는 ImageNet 데이터가 사용되었고, 데이터 증강 파이프라인은 앞에서 말했듯 BYOL 프레임워크를 채택하였습니다. 전이학습에는 COCO 및 Pascal VOC 데이터셋이 사용되었습니다.

COCO 평가에서는 R50-FPN 및 R50-C4 backbone의 Mask R-CNN detector가 사용되었습니다. detection 및 segmentation에 대해서 실험이 수행되었고, 기존 SSL 방법론들과 비교해 모든 부문에서 SOTA를 달성하였습니다. Table 1은 R50-FPN에 대한 실험 결과이고, 최하단의 SoCo*는 사전학습에 추가적인 V4를 사용한 방법입니다.

Table 2도 동일하게 COCO에 대한 실험 결과이지만, Table 1과는 다른 모델을 사용한 결과입니다.

Mask R-CNN뿐만 아니라 Faster R-CNN에 대한 평가도 진행되었는데, 이는 Pascal VOC에 대해 진행되었습니다. 여기서는 SOTA를 달성하지는 못했지만, 여전히 준수한 성능을 보여주고 있습니다.

이후에는 Ablataion study입니다. 프레임워크가 간단하지 않고 다양한 요소가 적용되었는데, 각 요소를 적용해야 최적의 성능을 낸다는 것을 보이고 있습니다. Table 4에서는 프레임워크 구성 요로에 해당 Ablation을, table5에서는 하이퍼파라미터에 대한 Ablation을 보여줍니다. (d) momentum coefficient는 online network에서 target network로 가중치를 업데이트 할 때 얼마의 가중치를 설정해야 하는지에 대한 정보입니다.

Conclusion

본 논문에서는 기존 instance discrimination 방식의 pretraining 방법에 대해 문제를 제기하고, object detection에 더욱 알맞은 방법론을 제안했습니다. detector가 잘 동작할 수 있도록 세심하게 프레임워크가 구성되었고, 결과적으로 detection 및 segmentation 실험에서 좋은 결과를 보였습니다.

간만에 재밌게 읽은 논문이었습니다. detection에 이렇게까지 초점을 맞춰 구성된 SSL 방법론은 처음이었습니다. 이후 detection같은 task에 대해 사전학습 할 때 참고하면 좋을 것 같습니다.

감사합니다.

Author: 허 재연

10 thoughts on “[NeurIPS 2021] Aligning Pretraining for Detection via Object-Level Contrastive Learning

  1. 안녕하세요 재연님, 좋은리뷰 감사합니다.

    궁금한 점이 있어 질문드립니다!
    해당 프레임워크가 real time으로 동작할 필요가 없고 object의 위치를 잘 잡는 게 목적이 아니라 네트워크와 독립적이고 unsupervised인 selective search 방식을 적용했다고 언급하셨는데요. object detection 태스크를 위한 self-supervised 방법론이면 결국 object의 위치를 더 잘 잡기 위한 것이 최종 goal인데, 해당 언급을 한 pre-processing 부분이 RPN을 쓰지 않았던 이유가 결국 self-supervised이다보니 GT를 사용하지 않고 또 supervised 학습을 하면 안되는데 RPN을 쓰면 loss에 GT 라벨을 쓰면서 supervised로 학습이 되기 때문에 사용하지 않은 것으로 이해하면 될까요?

    그리고 흥미있게 읽다 보니 다른 궁금한 점도 생겼는데요!
    이미 충분히 좋은 성능을 가지면서도 real time에서도 동작가능한 object detection 태스크들이 나오고 있다고 하는데(저는 아직 잘 몰라서 들어본 건 일단 yolo 밖에 없긴 합니다…), 추후 이 object detection을 위한 SSL 연구가 나아갈 수 있는 개선 방향 중에는 SSL을 이용한 real time object detection도 될 수도 있을까요? 뭔가 SSL 연구도 결국 최종 목적은 downstream task를 위함이고, 또 GT를 매번 구하기는 힘든 현실에서도 잘 동작하길 원하던 것이었는데, 이게 결국 application적으로 더 자연스럽게 동작하기 위한 초석임과 동시에 real-time이 최종 목적이 되지 않을까 하는 생각도 듭니다. 흠 잘 모르기 때문에 너무너무 앞서가버린 생각일까요? SSL을 follow up하시면서 연구하시는 재연님의 생각이 궁금합니다!!

    1. 사실 논문에는 RPN에 대한 어떠한 언급도 없어서 정확히 알 수는 없지만, supervised learning을 하기 위해 selective search를 사용한 것이 아닐까, 개인적으로 생각합니다.
      그리고 사실 SSL과 real-time object detection 동작은 큰 관련이 없습니다. object detection의 동작 속도가 얼마인지는 무관하게 SSL은 좋은 표현력을 확보하는 것만을 목표로 하니까요. 결국 모델 동작 과정을 나눠보면 pretraining / finetuning / inference 일텐데 real-time object detection은 inference쪽 단계이니 큰 연관이 없습니다. 뭐 inference단계에서 수집되는 데이터로 실시간으로 모델을 업데이트 할 수 있기는 할텐데 그런 시도를 체계적으로 한 것은 제가 아직 본 적이 없어서 관련 정보를 드리지 못하겠네요.
      모델의 동작 속도를 높이기 위해서는 모델 구조 설계 부분에 집중하는것이 맞다고 생각됩니다.

  2. 안녕하세요 재연님 좋은 리뷰 감사합니다.
    저자는 논문에서 self-supervised learning method로 BYOL를 선택했는데 다른 method도 많을텐데 BYOL을 적용시킨 이유가 언급되어있나요? ablation study에서 다른 모델을 적용시킨 결과도 없는 것 같아 질문드립니다.
    감사합니다.

    1. 음 사실 BYOL을 사용했다라는 직접적인 언급은 없습니다. 하지만 프레임워크를 보면 BYOL을 변형한것처럼 보이긴 하네요. 다들 방법론이 아닌 해당 프레임워크를 차용한 이유는 따로 언급하지 않습니다.

  3. 안녕하세요. 좋은 리뷰 감사합니다.

    수식 2에서 얻어지는 h_i가 object-level feature representation이라고 하셨는데 h’_i, h’’_i는 각각 view 2, 3에 대한 feature representation인건가요 ?

    또, SoCo*가 추가적인 V4를 사용한 방법이라고 하셨는데, 이 V4는 V3에 어떤 augmentation을 적용한것을 추가로 하용한 것으로 보면 될까요 ? V4를 사용했을 때는 loss를 어떻게 계산하는지 궁금합니다.

    감사합니다!

    1. 네 맞습니다. h_i는 V1, h’_i는 V2, h”_i는 V3의 feature입니다. V4를 어떻게 활용했는지 자세한 설명은 나와있지 않은데, 192×192로 resize 후 V2,V3와 똑같이 처리된다고 된다는것을 보아 함께 contrastive learning을 하고 contrastive loss term을 하나 더 추가하는것으로 생각됩니다.

  4. 안녕하세요 좋은 리뷰 감사합니다.

    SSL은 물론 Object Detection에도 백그라운드 지식이 없다보니 생기는 궁금증인 것 같습니다.

    1. trivial solution을 방지하기 위해 target network 뒤에는 predictor q 없이 projector g만 거치도록 설계하였다고 했는데, 이 때 predictor가 붙어있으면 발생하는 trivial solution이 무엇을 의미하는지 궁금합니다.

    2. 수식 (5)의 최적화는 어떠한 방향으로 이루어지는 것인가요? loss의 각 텀에 -2는 어떠한 이유로 붙어있는 것인지 궁금합니다.

    1. 1. trivial solution이 무엇인지 먼저 말씀드리겠습니다. pretext task가 아닌 instance 단위의 비교를 통한 self-supervised learning 방법론들은 초기에 동일한 데이터를 다르게 증강하여 positive pair의 유사도를 높이는 방향으로 진행하였습니다. 하지만 이런 방법은 학습이 지속되면 계속 똑같은 constant vector만을 뱉는 collapse가 발생하게 됩니다. 이때 어떤 데이터를 입력하든 동일한 constant vector를 출력하는 것을 trivial solution이라고 합니다. contrastive learning의 경우에는 negative pair를 정의해 유사도를 낮춤으로 이 trivial solution을 방지했습니다. 또한, 일부 방법론들은 2개의 branch를 predictor를 추가한 비대칭 구조를 만들어 trivial solution을 방지하기도 했습니다.

      2. 해당 loss에서는 positive pair인 V1-V2, 그리고 V1-V3간 유사도를 높이는 방향으로 학습이 됩니다. 분자는 내적, 분모가 l2norm이니 각 항은 코사인 유사도로 해석할 수 있습니다. 각 항에 2가 붙는 이유는 논문에 설명이 되어 있지 않아 정확하게 알 수는 없지만, 학습이 더 잘 되는 loss를 구성하기 위한 설계로 받아들였습니다.

  5. 안녕하세요 ! 좋은 리뷰 감사합니다.
    실험 부분에서 질문이 있는데, SoCo에 대해서 epoch 100/400 성능을 가장 중점적으로 리포팅하고 있는 것 같습니다. 이 두 epoch을 메인으로 선택해서 리포팅한 이유가 있을까요 ? 400 epoch에서 좀 더 성능 향상이 있으나 드라마틱한 개선이 있지는 않고, 이전 타 방법론들에서는 100 epoch을 잘 사용하지 않는 것 같은데, 막상 ablation study에서는 epoch 변화에 대한 테이블은 없다보니 더 의문이 들어 질문 드립니다. 또한 Tab.1에서 SoCo*은 기본 SoCo-400epoch과 무슨 차이가 있나요 ??

    1. 음 epoch에 대해서는 생각해 본 적이 없어 논문을 다시 한번 찾아봤습니다. 아마 400epoch에서 가장 성능이 좋기 때문에 400epoch에 대해 reporting 한 것 같은데 딱히 epoch에 대한 추가적인 언급이 없네요. 100epoch정도만 학습해도 다른 방법론과 비등하거나 그 이상의 성능을 달성할 수 있다는 점을 강조한것이 아닌가 하는 생각이 듭니다.
      SoCo*는 V2,V3뿐만 아니라 V4를 추가적으로 사용한 방법입니다. 논문에는 추가적인 View를 사용했다고만 적혀 있는데, 아마 새로운 view에 대한 contrastive learning을 수행한 다음 loss term을 추가한 듯 보입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다