이번에 소개할 논문은 Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles 를 이용한 self-supervised 논문입니다. 

 

 

1. Self-Supervised Learning of Pretext-Invariant Representations(CVPR 2020)

이 논문은 input image와 patch들을 서로 비슷하게 해주도록 하는 것이 목표입니다.

그렇게 해주기 위해서 nce loss를 이용합니다. I' 은 negative sample인데, 여기선 다른 이미지의 feature를 뜻 합니다.

s는 cosine similarity 입니다.  Dn 은 데이터셋의 부분집합입니다. 

-log를 취해줌으로써 분모는 작게, 분자는 크게 해주도록 합니다. 즉, 다른 이미지와 이미지 patch들간의 유사도는 높이고, 다른 이미지와의 유사도는 낮춤으로써 이미지의 특징을 알 수 있습니다. 

 

또한 negative sample을 뽑기 위해 memory bank를 이용합니다. 여기서 backbone은 resnet50을 이용합니다. res5는 backbone을 통해 나온 feature 2048 dim을 128로 줄어주는 역할(linear projection)을 합니다. patch들을 전부 concat해주고 다시 이를 128 차원이 나오도록 해줍니다. 128로 줄이면 계산 효율을 높일 수 있습니다. 메모리는 epoch 전에 ema 방법을 통해 업데이트 해줍니다.

최종 loss입니다. 첫번째 식은 위의 식과 동일하게 작동합니다. negative sample도 memory에 있는 것을 이용합니다.

두번째 식은 메모리와 이미지의 feature를 서로 비슷하게 해주고,  다른 이미지와는 다르게 해줍니다. 간단하면서도 기발한 아이디어인 것 같습니다.

 

2. Jigsaw Clustering for Unsupervised Visual Representation Learning(CVPR 2021)

 

이 방법은 다른 이미지의 patch와 서로 섞어줍니다. 섞은 이미지에서 해당 patch가 어느 이미지에 해당하는 지와 해당 patch가 이미지에서 몇 번째 patch인지 맞추도록 합니다.

이 식은 같은 클래스의 patch 간의 유사도는 높이고, 다른 class의 patch와의 유사도는 낮추도록 해줍니다.

 

L은 모델을 통해서 예측한 patch의 위치입니다. 

 

 

Jigsaw puzzle을 이렇게 다양하게 이용하는 것을 보면, 되게 신기하네요. 이전 논문들을 참고하여 좀 더 좋은 아이디어를 생각하면 좋을 것 같습니다.

반응형

1. Introduction

기존 MAE 같은 경우에는 computational cost가 높고 pretraing-finetuning discrepancy를 유발한다고 합니다.

이를 해결하기 위해서 convolution block의 정보 누출을 막아주는 masked convolution을 적용합니다. 또한 multi-scale feature를 제공하기 때문에, object detection과 segmentation의 성능도 올라간다고 말합니다.

2. method

The Hybrid Convolution-transformer Encoder

encoder의 구조는 총 3개의 stage로 이루어져 있습니다. convolution block은 self-attention 대신, 5 x 5 depthwise convolution을 이용합니다. 여기서 depthwise convolution을 이용하는 이유는 CoAtNet의 구조를 참고한 것 같습니다. 코드를 보니 CoAtNet의 구조와 비슷하네요. 그리고 모든 stage 사이사이마다 stride 2 conv를 이용하여 downsampling을 해줍니다.

 

1,2 stage에서는 local 적인 정보를 보게 되고, stage 3에서는 global하게 보기 됩니다. 기존의 vit(swin 등)는 absolute position embbeding 대신 relative postion embedding이나 zero-padded conv를 이용하지만, stage 3의 input에 absolute position embbeding을 더하는 것이 성능이 좋다고 이야기 합니다. cls token은 제거합니다.

 

Block-wise Masking with Masked Convolution

stage 1에서 masking token을 적용하게 되면, stage 3의 patch에서 일부 정보가 보여질 수 있습니다. 그 이유는 앞에서 convolution을 하게 되면, masking된 지역 주변의 픽셀 정보는 남아있기 때문에 이런 말을 한 것 같습니다. 이를 해결하기 위해, 위 그림처럼 stage 3의 input token의 일정 비율을 masking하고 이를 upsample하는 방법을 이용한다고 합니다.

 

첫 2 stage의 5 x 5 dconv는 masked patch보다 receptive field가 크기 때문에, 정보가 유출된다고 합니다.(2배, 4배를 하기 때문에 5보다 작아서 그런 것 같은데, 사실 왜 큰지 잘 이해가 안 가네요. stage 2의 feature 1 pixel을 하나의 patch로 보지느 않을 것 같은데...) 이를 해결하기 위해 masked convolution을 적용한다고 합니다. 이 방법이 성능에 큰 영향을 끼쳤다고 합니다.  코드를 보면 단순히 mask(0,1)와  곱하는 것 같습니다.

 

The Multi-scale Decoder and Loss

multi-scale feature decoder에 줄 때는, 윗 그림의 파란 박스 부분을 보면 됩니다. 단순히 upsample하고 다 더 해줍니다.

3. ablation study

 

 

epoch을 클수록 성능이  좋다고 합니다.

 

앞에서 말한 masked conv의 영향이 매우 큰 것을 알 수 있습니다. 근데 block masking은 무엇인지 모르겠네요. 논문에 검색해봐도 저거 하나만 뜨네요.

 

기존 mae보다 훨씬 빠르게 convergence하는 것을 확인할 수 있습니다.

반응형

'computer vision > self-supervised' 카테고리의 다른 글

jigsaw puzzle 을 이용한 self-supervised  (0) 2022.07.20

+ Recent posts