![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-312.png)
안녕하세요, 허재연입니다.
이번에 다룰 논문은 Microsoft Research Asia에서 작성하여 CVPR2021에 게재된 논문으로, 현재 약 420회 인용되었습니다. 기존의 SimCLR, MoCo 등 Contrastive Learning 계열 Self-Supervised Learning 방법론들을 기반으로, 픽셀 단위 사전학습을 하는 방향으로 발전시킨 논문입니다. 방법론이 크게 복잡하지 않으니, 편하게 읽어주시면 됩니다. 함께 살펴보겠습니다.
Introduction
당시 Computer Vision 학계에서 Self-Supervised Learning은 기존처럼 연구자들이 휴리스틱하게 직접 설계한 pretext task를 이용하기보단, instance discrimination 기반 방법을 이용하는 방법이 주목받고 있었습니다. contrastive learning을 이용하여 image instance 단위의 positive pair와 negative pair를 구성하여, positive pair 간 유사도는 높이고 negative pair 간 유사도는 낮추는 방법으로 사전학습을 진행하는 방식입니다. 이 방법이 기존의 Self-Supervised Learning(SSL)방법보다 훨씬 개선된 벤치마크 성능을 보여주었기에 많은 관심을 받았고, 관련하여 SimCLR, MoCo, SwAV, BYOL, SimSiam, Barlow Twins 등 경쟁력 있는 다양한 방법론이 제안되었습니다.
이들의 사전학습 방식은 각 image instance끼리 구분하는 방식으로 사전학습을 하게 되는데, 이는 각각 데이터를 하나의 class로 간주하여 학습하는 것으로 해석할 수 있습니다(instance discrimination). 따라서 자연스럽게 image classification과 같은 image instance 단위 task에는 잘 작동하지만, detection이나 segmentation같은 dense prediction task에 중요한 spatial sensitivity가 부족할 수 있습니다. 저자는 여기에 성능 개선의 여지가 충분히 있다고 보았고, spatial sensitivity를 보강하기 위해 기존의 image instance level의 contrastive learning을 수정하여 pixel level로 contrastive learning을 도입합니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-315-1024x277.png)
이미지 안의 각 픽셀을 하나의 class로 취급하고 각 픽셀을 서로 구별되게 하는 것입니다. pair를 구성하는 각 픽셀은 random augmentation된 두 image view에서 가져오는데, 유사하거나 가까운 pixel끼리는 positive, 그렇지 않은 pixel끼리는 negative pair로 묶어 기존의 contrastive learing 방법과 유사하게 학습시킵니다. 본 논문에서는 총 2가지 사전학습 방법을 제안하는데, 하나는 단순히 pixel 단위로 contrastive learning을 수행하는 PixContrast와, 추가적으로 유사 영역에 대한 특성을 고려한 Pixel-to-Propagation consistency를 고려한 PixPro입니다. 각각에 대해 자세히 살펴보겠습니다.
Pixel-level Contrastive Learning
PixContrast는 기존에 잘 알려진 contrastive loss를 pixel-level discimination으로 수정한 것입니다. 기존의 instance단위 contrastive learning 방법론들과 마찬가지로, 맨 처음에는 동일한 이미지에 서로 다른 random augmentation을 가한 뒤 고정된 해상도(224×224)로 resize해 두 개의 view를 만든 후, 하나는 regular encoder network(ResNet과 같은 feature extractor + projection head), 다른 하나는 momentum encoder netowork(직접 파라미터를 업데이터하지 않고 regular encoder로부터 파라미터를 전달받음)에 통과시켜 image feature를 추출한 뒤에, 두 feature map의 pixel 단위 비교를 수행합니다. 모든 두 feature map의 픽셀 pair 간의 거리를 계산하고, 해당 distance를 normalize 한 다음(random crop으로 인해 겹치는 이미지 scale을 보정하는 목적), 거리가 threshold보다 가까우면 positivie pair, 멀면 negative pair로 정의합니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-313.png)
수식은 다음과 같은데, pair (i,j)간의 distance가 threshold(ablation study 수행 결과 0.7로 설정)보다 가까우면 positive pair로, 멀면 negative pair로 정의하여 수식 (2)와 같이 contrastive loss를 구상합니다. (2)수식은 일반적인 contrastive loss와 동일하다고 생각하면 되는데, 두 pair 간 cosine similarity를 구한 후 temperature parameter tau로 나누어 similairy range를 조정합니다. positive pair간 유사도가 높아지고, negative pair간 유사도가 낮아지면 loss값이 작아지도록 설계되었습니다.
PixPro
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-314.png)
PixContrast는 기존의 image instance기반 학습보다는 local한 표현력을 잘 포착할 수 있겠지만, downstream task를 고려한다면 최적의 설계는 아닐 수 있습니다. 저자들은 spatial sensitivity뿐만 아니라 spatial smoothness를 함께 고려한 Pix-Pro라는 loss도 함께 제안합니다. 여기서
- Spatial sentisitivity는 (detection이나 segmentation 등 task에서)label이 바꾸는 경계 부분 예측 정확도를 위해 가까운 pixel을 구분할 수 있는 능력을 의미하고
- Spatial smoothness는 동일 label에 속하는 영역 예측에 기여하기 위해 유사/가까운 pixel이 비슷해지도록 하는 것을 뜻합니다.
smoothness를 가하기 위해 저자들은 propagation module을 도입하였고, pixel과 propagation의 일관성을 고려하여 사전학습을 설계하였습니다. 이를 pixel-to-propagation consistency pretext task for pixel-level visual representation learning이라고 합니다. 파이프라인이 (SimCLR, MoCo처럼)대칭적이고 positive/negative pair를 모두 활용하는 PixContrast와는 다르게, PixPro는 (BYOL처럼) 비대칭적인 구조를 가지며, positive pair만을 활용하여 학습되도록 하였습니다. Figure 2를 보시면 feature representation x는 Pixel-to-Propagation Module(PPM)을 거쳐 y로 변환되고 이를 x’와 pair로 묶어 Loss를 구성했음을 확인할 수 있습니다. contrastive learning이 negative pair 설정에 매우 민감한데, PixPro는 BYOL처럼 비대칭적인 구조를 도입하여 negative pair를 활용하지 않으므로 negative pair를 주의깊게 세팅해야하는 이슈를 피할 수 있었다고 합니다.
Pixel Propagation Module (PPM)
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-317.png)
PPM의 구조는 다음과 같습니다. 일단 PixContrast와 마찬가지로 pair를 묶은 뒤, positive pair간 유사도를 계산한다음 그 결과를 g(x)과 곱해 y를 만들어냅니다. 이 때, 유사도는 cosine 유사도의 양수를 활용하게 되고, 여기에 sharpness를 조절할 수 있는 파라미터인 γ를 제곱해 산출합니다. 0~1사이 값을 g(x)에 곱해주어 유사도가 높은 부분만 살려주고 그렇지 않은 부분은 억제하는 효과를 가지겠죠. 유사한 부분만 y로 출력되어 x’과 유사도를 높이게 함으로써 smoothness를 가했다고 설명합니다. g()는 linear layer와 Batch Norm, ReLU로 구성된 작은 신경망입니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-316.png)
최종적으로는, propagation module 없이 momentum encoder를 거친 x’와 regular encoder 및 pixel propgation module을 거친 y 간 consistency를 높이도록 loss가 설계됩니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-318.png)
수식(5)에서 i 및 j는 (1)번 수식을 통해 걸러진 positive pixel pair입니다. PixPro는 비대칭적인 구조를 활용했다는 것과 PPM module을 도입햇다는 점, 그리고 negative pair를 활용하지 않는다는 점이 PixContrast와 다릅니다. 최종 실험에는 PixPro loss와 기존 연구에서 사용되는 instance discrimination contrastive learning loss를 가중합하여 사용하는데, 그 두 조합이 가장 성능이 좋기 때문입니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-319.png)
Computation complexity
모든 픽셀 간 pair를 계산하기에 계산량이 상당하다는 생각이 들었었는데, 논문에 이 부분을 다루었더군요. 논문에 따르면 PixContrast와 PixPro는 기존의 instance discrimination 방법론들과 동일한 loader와 backbone 구조를 사용했으며, 계산복잡도도 크게 차이나지 않는다고 합니다. ResNet50을 빅본으로 사용했을 때 BYOL과 비교하면 8.6G vs 8.2G FLOPs로 0.4G FLOP의 overhead가 있다고 합니다. 사실 제가 FLOPs 지표에 대해 잘 몰라서, 정확히 어느 정도 차이나는지 감을 잡긴 힘드네요.. 이제 실험 부분으로 넘어가겠습니다.
Experiment
사전학습에는 ImageNet 1k를 사용했으며, 당시 unsupervised learning 방법론들이 그러하듯 실험에 ResNet50을 backbone으로 사용했다고 합니다. 데이터 증강은 BYOL과 동일하게 적용했다고 하며(crop, color distortion, flip, grayscale conversion, gaussian blur, solarization 등), crop하였을 때 겹치는 부분이 없는 sample들은 제외했다고 합니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-320-1024x457.png)
검증은 detection, segmentation, semi-supervised learning, classification 부문에서 이루어졌으며, Table은 detection과 segmentation에 대한 결과입니다. Pascal VOC는 Faster RCNN으로, COCO는 Mask RCNN으로 object detection task에 대한 평가가 이루어졌으며, segmentation에 대해서는 Cityscapes 데이터셋에 대해 FCN모델을 이용해 실험이 수행되었습니다. InfoMin의 경우, 원래는 200epoch가 report되어있었는데 성능이 saturated될때까지 800epoch까지 학습하여 비교했다고 합니다. Table1의 결과를 보면 알겠지만, 저자들이 제안한 PixPro가 성능이 가장 좋음을 확인할 수 있습니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-321.png)
Semi-supervised learning 은 COCO데이터셋으로 object detection에 대해 수행되었고, 학습 셋에서 small fraction(1%-10%)를 random sampling해 finetuning하여 측정했습니다(5번 수행의 평균을 냈다고 하네요).
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-322.png)
Table 2는 loss를 구성하는 다양한 하이퍼파라미터에 대한 Ablation study입니다. threshold값은 0.7로, similarity의 sharpness를 결정하는 (c) 지수는 2로, g()의 추가 layer 개수는 2개로, 학습 epoch은 400으로 설정하는게 좋음을 확인할 수 있었습니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-324.png)
저자는 PixContrast와 PixPro 두가지 loss를 제안했는데, PixPro/PixContrast 선택 여부 PPM의 포함 유무에 대한 성능을 실험으로 보였습니다. 실험 결과 가장 성능이 좋았던 조합을 사용했던 것을 알 수 있습니다.
![](http://server.rcv.sejong.ac.kr:8080/wp-content/uploads/2024/07/image-325.png)
최종 loss는 PixPro와 instance discrimination loss를 함께 사용했죠. 두 가지 task를 함께 진행해야 detection 및 classification 성능이 둘 다 좋음을 활인할 수 있습니다.
좀 더 local한 요소를 고려하기 위해 픽셀 단위로 discrimination을 내린 것이 꽤 참신했던 논문이었습니다. 이 논문이 나온 뒤로 더 잘 만들어진 방법론들이 등장하긴 했지만, 아이디어를 참고할 수 있을 것 같습니다.
감사합니다.
안녕하세요. 좋은 리뷰 감사합니다.
사실 세미나를 들으면서 Pixel Propagation Module (PPM) 부분에 질문이 있었는데, 너무 self-supervised 방법론에 대해서 팔로업이 안된 상태라 기초적인 질문인것 같아 하지 않았는데 댓글로 조심스럽게 여쭤봅니다. 저는 self-supervised method 모델은 일종의 사전학습 모델로 생각이 되어서(예를 들어서 text의 bert와 같이 생각하였습니다) 나중에 downstreem에 내려서 사용할 때는 해당하는 task에 맞춰 layer를 추가해 ‘self-supervised model + 알파’ 이렇게 구성하여 사용하는 것이라 생각하였는데요. 그렇다면 PPM은 ‘self-supervised model + 알파’에서 알파에 해당하는 부분이라 생각해도 되는 걸까요? 아니라면 다른 task에 downstreem 하게 될 때도 PPM을 사용한다는 것인데 이것이 어떻게 가능한 것인지 잘 그러지지 않아 질문드립니다..!
감사합니다.
Self-Supervised Learning에서는 보통 backbone을 사전학습시키는것을 목표로 합니다. 예를 들어 ResNet을 잘 사전학습 시키면, ResNet을 기반으로 하는 다양한 모델에 대해 사전학습한 가중치를 줄 수 있겠죠. 따라서 Self-Supervised Learning의 파이프라인 구조에서 이후 downstream task에 사용하게 되는 것은 결국 encoder(feature extractor) 하나입니다. 그 이외의 요소들은 전부 좋은 representation을 학습하기 위한 장치들일 뿐이고, 보통 downstream task까지 가져가지는 않습니다. 따라서 해당 SSL 방법론에서 사용하는 PPM도 사전학습 과정에서만 사용되며, 이후 downstream task에는 사용되지 않습니다.
감사합니다.