본문 바로가기

ML

[논문 리뷰] Learning from Rich Semantics and Coarse Locationsfor Long-tailed Object Detection

728x90

이번에는 데이터셋이 Long-tailed distribution일 경우에 tail에 분포된 class의 정확성을 높이는 방법에 대한 연구인 Learning from Rich Semantics and Coarse Locationsfor Long-tailed Object Detection 논문에 대한 정리를 하고자 합니다.

 

우선 데이터가  Long-tailed distribution인 경우에 대한 설명입니다. 

출처: https://www.lgresearch.ai/blog/view?seq=250&page=1&pageSize=12

 

위 사진과 같이 데이터 샘플이 특정 class는 많고 다른 class는 적은 분포를 가지고 있는 경우를 Long-tailed distribution이라 부릅니다. 

실제 세상의 데이터는 이와 같이 분포가 균등하지 않은 경우가 대부분입니다. 

 

하지만 현재 많은 Object detection model은 균등한 분포를 가진 데이터셋을 통해 발전이 되어왔으며, 균등하지 않은 경우 Head 부분의 class에 모델이 편향되는 문제가 발생합니다.

이 문제를 해결하는 가장 효과적인 방법은 Tail 부분의 class 데이터샘플을 늘리는 방법이지만 해당 방법은 많은 비용과 시간이 드는 문제가 있습니다.

 

이전 연구에서 이러한 문제를 해결하기 위해 많은 class를 가진 classification dataset을 사용하여 Tail 부분의 데이터를 보충하고자 하는 시도가 있었습니다.

 

실제로 classification dataset은 detection dataset에 비해 구하는 것이 쉽기에 성능향상에 도움을 줄 수 있습니다. 

하지만 Image-level label 즉, 이미지 하나에 대한 label은 이미지에 대한 정확한 정보를 담기에는 충분하지 않으며 

아래 예시와 같이 위치에 민감한 문제가 있습니다. 

해당 사진은 ImageNet에서 "Ball" 클래스에 대한 사진입니다. 실제 공에 대한 정보를 담고 있지만 강아지와 같은 다른 정보 또한 담고 있기 때문에 Rand Crop과 같은 Augmentation 방식에 취약하다는 문제가 존재합니다. 

이러한 Classification dataset의 사용에 대한 문제를 해결하기 위해 본 논문에서는 RichSem이라는 framework를 제안합니다.

 

RichSem은 

  • One-Stage training framework입니다.
  • Classification dataset에서 bounding box를 추출할 때 이미지 전체를 하나의 box라 처리하며, 이를 coarse location이라 부릅니다
  • Google에서 만든 CLIP을 활용하여 soft label을 추출하고 이를 통해 데이터를 늘리고 Random crop에 강인한 학습을 제공합니다
  • Semantic branch라는 독립적인 branch를 설계하여 학습 시 좀 더 풍부한 semantic을 학습할 수 있도록 합니다
  • Semantic branch는 학습에 한정하여 사용되며, inference시에는 사용되지 않습니다

이러한 방법을 통해 Long-tailed Object Detection 성능을 효과적으로 향상시켰습니다. 

 

Richsem에 대한 전체적인 이미지입니다. 이제 하나하나 알아보고자 합니다.

우선 본 논문은 빨간 박스 부분과 같이 mixed dataset 즉, object detection 데이터와 classification 데이터를 함께 사용하는 방식으로 학습됩니다. 

 

그리고 초록 박스 부분인 semantic branch를 통해 classification 데이터에서도 보다 풍부한 semantic(의미)를 학습할 수 있게 합니다.

본 논문에서는 Image-level semantic 과 Object-level semantic을 구분하였는데 수식은 아래와 같습니다.


Image-level semantic

 

위 수식에서 V와 L은 CLIP Visual Encoder와 Language Encoder를 의미합니다. 

이미지를 Visual Encoder에 넣어 visual feature를 추출하고, class 정보를 Language Encoder에 넣어 linguistic categories feature를 추출합니다. 추출된 feature는 Contrast를 통해 semantic information으로 출력됩니다. 

 

이때 Contrast에 대한 설명을 논문에서는 잘 찾을 수 없어 코드를 열어보니 해당 부분은 Cosine Similarity를 구한다고 생각하면 될 것 같습니다.

이때 Contrast라는 의미를 붙인 이유는 이후에 Loss 함수를 제작하는 부분에서 KL-Divergence를 활용하여 Loss를 구하는데 이러한 방법이 Contrastive learning과 유사해서 Contrast라 명명한 것 같습니다. (아니라면 꼭 알려주세요 ㅠㅠ)

 

Object -level semantic

위 내용은 image-level semantic과 매우 유사합니다. 다른 점은 b와 Pooler를 사용한다는 것인데 

b는 bounding box, Pooler는 RoIAlign pooling을 의미합니다.

bounding box의 경우 detection dataset은 기존의 box를 사용하면 되지만 classification dataset의 경우 box가 없기 때문에 이미지 크기 전체를 하나의 box로 취급하고 이것을 coarse location(부정확한 위치) 이라 부릅니다.

이러한 부정확한 위치에 대한 feature를 뽑고 그것을 class와 유사하도록 학습 시킴으로 앞서 classification dataset의 문제를 해결 할 수 있습니다.

 

RoIAlign

출처: https://medium.com/@parkie0517/mask-r-cnn-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-roialign-mask-prediction-branch%EC%97%90-%EA%B4%80%ED%95%B4%EC%84%9C-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0-1b1fc2715600

 

RoIAlign은 Pooling 시 (a)와 같이 소수점이 포함된 좌표를 반올림을 통해 처리할 경우 loss가 발생하는 문제가 있습니다. 

따라서 이를 (b)와 같이 binary interpolation으로 샘플 좌표를 추출하고 해당 좌표들 값을 Pooling에 적용하면 loss를 줄여 좀 더 fit한 정보를 추출할 수 있게됩니다.

 

* 본 논문에서 해당 내용을 적용했을 때의 이점에 대한 내용은 파악하지 못했습니다. 개인적인 의견은 논문에서의 주장은 classificaiton dataset이 위치에 민감하여 위치에 따라 의미가 달라지는 문제가 있기 때문에 최대한 fit한 의미를 추출하여 문제를 최소화 하자는 생각으로 RoIAlign을 사용한 것 같습니다. (개인적인 의견입니다)


 

우선 Original detector 부분은 기존의 detector의 역할과 동일합니다. 

수식과 같이 localization과 classification에 대한 출력을 하게 됩니다. 이때 H를 sub-task branch라 불렀는데 그 이유는 

아마 main-task는 semantic을 추출하는데 있다 생각해서 sub를 붙인 것 같습니다.

 

위와 같이 detector에서 추출한 o^cls를 semantic branch에서 추출한 semantic인 s와 cross-entropy loss를 구하는 방법으로 knowledge distillation과 비슷하게 학습할 수 있으나 해당 방법은 실제 distillation loss와는 다소 반대되는 방법이라 적용하지 않았습니다

우선 cross-entropy loss는 hard prediction result를 얻는것에 목적이 있으며, Distillation loss는 semantic score의 분포를 학습하는 것에 있기에 그 목적이 상충됩니다. 

따라서 본 논문은 semantic branch에 Soft label을 사용하여 학습을 진행합니다.

 

여기서 soft label은 CLIP에 object feature를 넣은 후 나온 score이며 해당 score와 linguistic categories feature의 

cosine 유사도를 구하고 이를 KL-divergence loss의 평균으로 L_soft loss 함수를 생성합니다.

이때 KL-divergence loss를 사용하기 위해 구한 값들을 확률 분포로 변경할 필요가 있습니다. 이는 softmax를 사용하여 확률 분포로 변경한 후 적용하는 방식을 적용한 듯 합니다.


Loss function

최종 loss function 입니다. 기존의 detection model의 loss인 classification loss와 localization loss, soft semantic learning loss를 합친 형태입니다.

lambda의 경우 각 loss의 가중치를 의미하며, 하이퍼 파라미터 입니다.

본 논문에서 λ_soft는 0.5를 취했으며, 이는 실험을 통해 적용한 수치입니다. 

 

추가적으로 classification data와 detection data의 클래스를 서로 맵핑할 필요가 있는데 본 논문에서는 CLIP을 사용하여 맵핑을 진행했고 수식은 아래와 같습니다.


Experiment

실험에 대한 내용입니다. 실험에 사용된 Baseline detection model은 DINO(self-DIstillation with NO labels)이며, 

DETR기반으로 제작된 모델입니다.

그리고 실험 dataset은 classification dataset과 detection dataset을 1:1 비율로 적용했으며, detection dataset은

LVIS(A Dataset for Large Vocabulary Instance Segmentation)데이터셋 그리고 classification dataset은 ImageNet-21k을 사용했습니다. 

 

결과는 아래 표와 같습니다.

 

RichSem이 대부분의 비교 모델에 비해 적은 schedule(iteration)로 높은 AP와 AP_r(rare)를 기록했으며, 

특히 Swin-L을 백본으로 사용한 경우  52AP와 50.2 AP_r로 기존 SoTA 모델에 비해 1/4 schedule로 최고의 성능을 기록했습니다.

 

  • Ablation study

위 표는 CLIP을 LVIS에 fine-tuning 한 유무에 따른 결과입니다. 실험 결과 fine-tuning하지 않고 사용하는 것이 더 높은 결과를 보였으며, 이는 fine-tuning을 할 경우 CLIP이 head data에 편향되어 제대로된 결과를 출력하지 못하기 때문인 것으로 보입니다.

 

 

위 표는 detection branch와 semantic branch의 파라미터를 독립적으로 하는지에 따른 결과이며, 독립적으로 하는 것이 더 높은 성과를 보여줬기에 실제 RichSem에서 독립적인 branch로 적용되었습니다.

 

 

위의 표는 L_soft와 L_loc에 의 유무에 따른 실험 결과이며, 모두 사용하는 것이 역시 성능이 좋습니다.

 

 

마지막으로 lambda_soft 의 값에 따른 결과입니다. 

높은 값을 사용할 수록 AP_r은 높아지지만 다른 값들이 낮아지는 trade-off 관계임을 실험을 통해 알게되었습니다. 따라서 본 논문에서는 가장 좋은 수치인 0.5를 사용하였지만 사용자가 본인의 목적에 따라 수치를 조절하는 것이 좋을 것 같습니다. 

 

본 논문을 통해

  • 단순히 classification dataset을 사용하는 것이 아닌 효율적인 방법으로 학습하는 방법에 대한 고민을 할 수 있었습니다.
  • 또한 단순히 Augmentation이 성능을 높여줄 것이라는 믿음이 있었는데 해당 믿음이 상당히 위험한 생각이라는 것을 알게 되었습니다.
  • 마지막으로 Inference 시에는 추가적인 branch를 사용하지 않기 때문에 Application에 적용할 가치가 높은 것 같습니다