728x90
반응형

안녕하세요. 오랜만에 논문 리뷰를 해봅니다. 논문 리뷰가 뜸했던 시기에 Facebook 사명이 Meta 로 바뀌었네요. 논문 저자 소속에 Meta AI 가 적혀진 논문은 이제서야 처음 보는 듯 합니다. 😊  나스닥에서는 메타플랫폼스라고 바뀐 것을 바로 확인 했었는데... 

 

이번에 리뷰할 논문은 Meta AI 에서 발표한 "Detecting Twenty-thousand Classes using Image-level Supervision" 라는 논문입니다. Detic 이라고도 합니다. "Detic: A Detector with image classes that can use image-level labels to easily train detectors."

 

Detic 방법은 한마디로 축약하자면 기존 GT label + box 조합이 아닌 즉, label-to-box assignment를 생략한 모든 image label 들이 포함되어있는 max-size 의 box를 가지고 학습하여 detection 하는 방법이라고 보시면 됩니다. 기존 detector 보다 많은 vocabulary 를 커버 할 수 있는 방법이며, 새로운 클래스에 대해 box label 을 사용하지 않았음에도 불구하고 좋은 성능을 달성하였기 때문에 향후 bounding box annotation이 새로운 클래스를 학습하는데 필요하지 않을 수 있다는 가능성을 보여줍니다. 🙌

 

 

 

Abstract 

현재 객체 검출기는 검출 데이터세트의 규모가 작기 때문에 vocabulary size 가 제한적인 반면에 이미지 분류기는 데이터 세트가 더 크고 수집하기 쉽기 때문에(검출 데이터는 객체의 location 정보가 필요한 반면 분류용 데이터는 이미지 한장과 클래스 정보만 있으면 되니까요!) 훨씬 더 큰 vocabulary 에 대해 추론합니다. 그래서 본 논문에서는 검출기의 분류기를 단순하게 학습하여 검출기의 vocabulary를 수 만 개념으로 확장 할 수 있는 Detic을 제안합니다. 

 

이전 작업과 달리 Detic 은 모델 예측을 기반으로 박스에 이미지 레이블을 할당하지 않으므로 구현하기 훨씬 쉽고 다양한 검출 구조 및 backbone 과 호환됩니다. 본 논문에서는 주석이 없는 클래스에 대해서도 Detic 이 우수한 검출 성능을 보여줍니다. open-vocabulary 및 long-tail 검출 벤치마크 모두에서 이전 작업보다 성능이 뛰어나다는 결과를 입증했습니다. 

 

Detic은 LVIS 벤치마크에서 모든 클래스에 대해 2.4 mAP, 새로운 클래스에 대해 8.3 mAP의 성능 향상이 있습니다. 표준 LVIS 벤치마크에서 Detic 은 모든 클래스에 대해 41.7 mAP, rare 클래스에 대해 41.7 mAP 을 기록했습니다. 처음으로 ImageNet 데이터 세트의 모든 클래스 (21,000)로 탐지기를 훈련하고 fine-tuning 없이 새로운 데이터 세트로 일반화 할 수 있음을 보여주었습니다. 

 

 

 

Introduction

원래 객체 검출 문제는 객체의 위치를 찾는 localization 문제와 그 객체가 무엇인지 분류해주는 classification 문제로 구성됩니다. 이러한 전통적인 객체 검출 방법은 모든 클래스에 대해 박스 레이블에 의존하게 됩니다. 많은 데이터 수집이 있었는데도 불구하고 객체 검출 데이터 세트는 이미지 분류 데이터 세트 보다 훨씬 규모가 작습니다. 예를 들어 LVIS 데이터 세트는 120k 개 이미지에 1000개 이상의 클래스가 포함되어 있으며, OepnImages 데이터 세트에는 500개 클래스에 대해 1.8M 이미지가 있습니다. 또한 모든 클래스에는 robust 한 객체 탐지기를 학습 시키기에 충분한 주석이 포함되어 있지 않습니다. 

 

따라서 본 논문에서는 detection supervision 외에 이미지 수준의 supervision 을 사용하는 이미지 클래스가 포함된 검출기를 제안합니다. 여기서 우리는 localization 문제와 classification 문제가 분리될 수 있음을 발견하였습니다. 

 

기존의 region proposal network 는 이미 기존 detection supervision 을 이용하여 새로운 객체의 위치를 찾습니다. 따라서 분류 문제에 초점을 맞추고 이미지 수준의 레이블을 사용하여 분류기를 학습하고 검출기의 vocabulary 를 확장합니다. spatial size 가 가장 큰 proposal 에 image-level supervision 을 적용하고 이미지 레이블이 지정된 데이터에 대한 다른 출력을 supervise 하지 않는 simple classification loss 를 제안합니다. 이는 구현이 쉬우며 검출기의 vocabulary를 크게 확장 할 수 있습니다. 

 

대부분 기존의 weakly-supervised detection 기술은 검출의 localization 및 classification 문제를 모두 supervise 하기 위해 weakly labeled data 를 사용합니다. 이미지 분류 데이터에는 박스 레이블이 없기 때문에 이러한 방법은 박스를 얻기 위해 various label-to-box assignment 기술을 개발합니다. 예를 들면 YOLO9000 및 DLWL은 예측 점수가 높은 proposal 에 이미지 레이블을 할당하게 됩니다. 하지만 이러한 assignment 는 닭이 먼저인지, 달걀이 먼저인지에 대한 논쟁 같이 good initial detection을 필요로 합니다. 따라서 좋은 라벨을 할당하기 위해서는 좋은 검출기가 필요하고, 좋은 검출기를 학습시키기 위해서는 많은 박스 정보가 필요합니다. 따라서 우리는 분류 데이터를 사용할 때 분류에 대한 문제만 supervise 하여 label assignment process 를 완전 우회하게 됩니다. 이것은 또한 검출기가 새로운 클래스에 대해 학습 할 수 있도록 합니다. 

 

다음 그림을 보면 이해가 쉽게 되실 것 같습니다. 

 

 

가장 좌측 그림은 기존의 detection 방법이며, 중앙에 있는 그림은 weakly-supervised detection 에서 라벨을 할당하는 방법을 설명하고 있습니다. 즉 image-level label을 검출기의 predicted boxes(proposals)에 할당하여 사용합니다. 이러한 assignment 는 large vocabulary detection 에서 오류가 발생하기 쉽다고 합니다. 마지막으로 우측 그림은 이 논문의 Detic 이 제안하고 있는 방법을 나타냅니다. label-to-box assignment 과정을 생략하고 모든 이미지 레이블을 max-size proposal 로 supervise 하게 됩니다. 이러한 loss 는 이전의 방법들 보다 더 간단하고 더 잘 수행된다는 것을 보여주게 됩니다. 

 

 

 

 

Approach

다음 그림은 본 논문에서 제안하는 방법의 Overview 입니다. 

검출 데이터와 이미지 레이블이 지정된 데이터에 대한 학습을 mix 합니다. 검출 데이터를 사용할 때는 standard detection loss 를 사용하여 분류기와 탐지기의 box prediction branch 를 학습합니다. 이미지 레이블이 지정된 데이터를 사용할 때는 modified classification loss 를 사용하여 분류기만을 학습합니다. 이러한 classification loss 는 신경망으로부터 예측된 the largest-sized proposal 에서 추출한 특징을 학습하게 됩니다. 그리고 open-vocabulary detection 을 위한 classification weights로 CLIP embedding 을 사용합니다. 

 

참고로 CLIP은 OpenAI 의 Learning Transferable Visual Models From Natural Language Supervision 논문에서 소개된 개념이며, 간단히 말하자면 4억개의 이미지와 텍스트 쌍으로 학습한 모델이며 zero-shot generalization ability 를 보여주었습니다. 여기서 이미지와 텍스트 쌍은 수작업 레이블 없이 웹 크롤링을 통해 자동으로 이미지와 그에 연관된 자연어 텍스트를 의미합니다! 

 

이러한 방법에서는 검출 데이터 세트의 박스 레이블과 분류 데이터 세트의 이미지 수준 레이블을 사용하게 됩니다. 학습 하는 동안 두 가지 유형의 데이터 세트에서 가져온 이미지를 사용하여 미니 배치를 구성합니다. 박스 레이블이 있는 이미지의 경우 standard two-stage detection training 을 따릅니다. 이미지 수준의 레이블이 지정된 이미지의 경우 분류를 위해 fixed region proposal 의 기능만 학습합니다. 따라서 ground truth box label이 있는 이미지에 대해서만 localization loss 를 계산하게 됩니다. 그리고 나서 이미지 수준의 레이블에 대해서는 조금 수정된 classification loss 를 계산하게 됩니다. 

 

weakly labeled dataset 은 이미지 I와 K개의 label 을 포함하게 됩니다. 우리는 N 개의 object feature 를 추출하기 위해 region proposal network를 사용합니다. 또한 이미지 라벨을 사용하고 region proposal feature 를 supervise 하기 위한 간단한 방법을 제안합니다. 먼저 전체 이미지를 새로운 "proposal" box 로 사용하는 것 입니다. 본 논문에서는 이것을 loss image-box 라고 부르게 됩니다. RPN의 all proposal을 무시하는 대신 전체 이미지의 injected box를 사용합니다. 그 다음 모든 클래스에 대해 ROI feature인 f' 에 classification loss 를 적용합니다. 

 

여기서 BCE 는 binary cross-entropy loss 를 뜻하며, σ 는 sigmoid activation 이며, 아래와 같습니다. 

 

 

따라서 본 논문에서 설명하는 loss 는 모든 클래스에 대한 분류 문제를 해결하기 위해 same 'proposal'의 feature를 사용하게 됩니다. 실제로 image-box 는 더 작은 상자로 대체 될 수 있습니다. 또한 두 가지 대안은 아래와 같습니다. 

 

1. the proposal with the max object score

2. the proposal with the max size 

 

 

본 논문에서는 이러한 세 가지 loss 모두가 image-level supervision 을 효과적으로 활용할 수 있지만, max-size loss 가 가장 잘 수행 된다는 것을 보여주었습니다. 따라서 image-supervised data 에 대해 기본적으로 max-size loss 를 사용합니다. 또한 classification parameter W는 검출 및 분류 데이터 모두에서 공유되어 검출 성능을 크게 향상 시키게 됩니다.

 

전반적으로 학습에 사용되는 loss 는 아래와 같습니다.  

여기서 L rpn / L reg / L cls 는 보통 two-stage 검출기에서 사용하는 standard loss 이며, 분류에서 사용하는 max-size loss 에서 λ = 0.1 입니다. 

 

 

 

Implementation details

이 논문의 Implementation details 은 아래와 같습니다. 😮

 

Box-Supervised: a strong LVIS baseline. 

LVIS 에 대한 strong baseline을 설정하여 본 논문에서 설명하는 방법이 최근 object detection 분야의 발전을 이끌었다는 것을 보여줍니다. baseline 은 supervised bounding box label 만 사용하게 됩니다. ResNet-50 백본과 함께 CenterNet2 detector 를 사용하게 됩니다. 또한 Federated Loss 와 repeat factor sampling 을 사용합니다. 그리고 입력 해상도는 640x640인 large scale jittering 을 사용하고, 4x(~48 LVIS epochs) 스케쥴로 학습 하게 됩니다. 또한 ImageNet-21k pretrained backbone weights 를 사용합니다. 또한 CLIP embedding 을 classifier 로 사용합니다. 본 논문의 baseline 은 detectron2 baseline 보다 9.1 mAP 높으며 8대의 V100 GPU에서 비슷한 시간 동안 학습 됩니다. 

 

Resolution change for image-labeled images. 

ImageNet 이미지는 LVIS 이미지보다 더 작고 객체 중심적 입니다. 실제로 ImageNet 이미지에는 더 작은 이미지 해상도를 사용하는 것이 중요하며, 더 작은 해상도를 사용하게 되면 동일한 computation 으로 batch-size 를 늘릴 수 있습니다. 여기서 해상도는 320x320 을 사용합니다. 

 

Multi-dataset training.

본 논문에서는 원래 데이터 크기에 상관 없이 1:1 비율로 검출 및 분류의 mini batch 를 샘플링하게 됩니다. 학습 효율성을 위해 동일한 GPU 에서 동일한 데이터 세트의 이미지를 그룹화 합니다. 

 

Training schedules. 

experimental cycle 을 단축하고 예측 기반 WSOD loss 에 대한 good initialization 을 수행하기 위해 우리는 항상 수렴된 기본 클래스 전용 모델(4x)을 먼저 학습하고 추가 이미지 레이블이 지정된 데이터로 fine-tuning 합니다. joint training을 위한 학습 스케쥴은 ~24 LVIS epoch plus ~4.8 ImageNet epoch 또는 ~3.8 CC epoch 으로 구성됩니다. ResNet-50 모델을 학습하는데 8개의 V100 GPU 에서 약 22시간이 걸리게 됩니다. 참고로 여기서 CC는 Conceptual Caption 입니다. 

 

 

 

 

Experiments

아래 표1의 8번째 행은 Detic 의 결과를 보여줍니다. 

본 논문의 simple loss 는 세 가지 설정 방법에서 모두 좋은 성과를 달성하게 됩니다. 새로운 클래스에서 Detic 은 ImageNet 에서 8.3 point, CC에서 3.2 point 의 성능향상을 보여주게 됩니다. 따라서 image-level label이 있는 Detic 은 strong open-vocabulary detection 성능을 제공하고 기존의 open-vocabulary detector에 orthogonal gain을 제공할 수 있습니다.

 

또한 새로운 클래스에 대해 box label 을 사용하지 않았음에도 불구하고 ImageNet을 사용하는 Detic 은 Box-supervised(all class)에 비해 성능이 좋습니다. 이 결과는 또한 bounding box annotation이 새로운 클래스를 학습하는데 필요하지 않을 수 있음을 시사하게 됩니다. 👍👍👍

 

 

 

Qualitative results of our 21k-class detector. 

 

Visualization of the assigned proposals.

 

 

 

 

 

개인적으로 궁금해서 github 에서 max-size loss 관련된 코드들을 찾아보았는데요,

역시 facebook 은 코드가 깔끔하다는 것을 다시한번 느꼈습니다. 공부는 언제나 하면 할 수록 끝이 없는 듯 합니다. 

 

    def _max_size_loss(self, score, label, p):
        loss = 0
        target = score.new_zeros(score.shape[1])
        target[label] = 1.
        sizes = p.proposal_boxes.area()
        ind = sizes[:-1].argmax().item() if len(sizes) > 1 else 0
        if self.softmax_weak_loss:
            loss += F.cross_entropy(
                score[ind:ind+1], 
                score.new_tensor(label, dtype=torch.long).view(1), 
                reduction='sum')
        else:
            loss += F.binary_cross_entropy_with_logits(
                score[ind], target, reduction='sum')
        return loss, ind

 

 

 

 

 

 

Paper : https://arxiv.org/abs/2201.02605

 

Detecting Twenty-thousand Classes using Image-level Supervision

Current object detectors are limited in vocabulary size due to the small scale of detection datasets. Image classifiers, on the other hand, reason about much larger vocabularies, as their datasets are larger and easier to collect. We propose Detic, which s

arxiv.org

 

 

Github : https://github.com/facebookresearch/Detic

 

GitHub - facebookresearch/Detic: Code release for "Detecting Twenty-thousand Classes using Image-level Supervision".

Code release for "Detecting Twenty-thousand Classes using Image-level Supervision". - GitHub - facebookresearch/Detic: Code release for "Detecting Twenty-thousand Classes using Image...

github.com

 

 

728x90
반응형