이 논문에서는 기존 Object Detection 알고리즘(YOLOv2 기반)의 기존 Base classes 외의 신규 Novel classes에 대해서 Few shot learning을 통해 적은 데이터로 신규 Object에 대해 Detection 하는 방법을 제안한다.
3. Approach
3.1. Feature Reweighting for Detection
아키텍쳐는 위 그림과 같다. 주어진 입력 I 에 대해서 feature extractor D를 통해 Meta features F 를 추출한다.
F = D(I)
Novel classes에 대한 이미지 I_i와 이에 대응하는 Bounding 박스 M_i로부터 Reweighting Module M을 통해 Reweighting vecotrs w_i를 추출한다.
w_i = M(I_i, M_i).
이때 i는 Novel class에 해당하는 index로, i = 1, … , N이다.
메타 feature 벡터 w_i 는 F와 channel-wise 곱을 수행하며, 이는 1×1 depth-wise convolution으로 표현 가능하다.
F_i = F * w_i
w_i는 Class i에 대한 class-specific 한 embedding된 representation이라고 볼 수 있으며, F_i는 주어진 입력이 class i에 대한 class-specific 한 feature가 된다.
따라서 F와 w_i가 곱해지면서 feature맵의 채널 가중치가 조정되며, detecting에 중요한 정보에 대해서는 더 강조하는 효과를 낸다. 이후 F_i를 prediction module P 의 input으로 투입하고, 바운딩 박스의 좌표와, objectness score, classification score를 추정한다.
3.2. Learning Scheme
Meta feature learner D와 Reweighting module M을 일반화 성능을 유지한체로 학습하는 것은 어려움. 적은 샘플로 일반화 성능을 보장하기 위해, 논문에서는 전통적인 detection 모델 학습과는 다른 새로운 two-phase의 학습 스키마를 제안한다.
base classes에 대한 annotation이 있는 training image들에 대해서 Multiple Few-shot Detection Learning Task T_j로의 재조정을 한다.
각 테스크 T_j는 T_j = S_j ∪ Q_j 이며, 이때
S_j = { (I_1^j, M_1^j), … , (I_N^j, M_N^j) } Q_j = { (I_j^q, M_j^q) }
이다.
S_j는 support set으로 서로다른 base class인 N개의 이미지로 구성되어 있다.
Q_j는 query set이다.
θ_D, θ_M, θ_P를 각각 feature learner D, reweighting module M, prediction module P에 대응하는 파라미터라 할때, 아래 식과 같이 joint로 loss를 최소화하는 최적화를 수행한다.
L_det는 detection loss function으로 뒷쪽에서 다룬다.
위 최적화는 주어진 쿼리 이미지에 대한 좋은 Meta feature와 서포트 셋을 위한 reweighting coefficients를 학습하는 것을 보장한다.
전반적인 학습은 두가지 단계로 구성되어 있다.
첫번째 단계 : base training. 이 단계에서는 각 base class 에 대한 충분한 라벨 데이터가 있기 때문에, Feature learner D, reweighting module과 함께 detection prediction 에 대한 joint 학습을 수행한다. 모델은 좋은 reweighting vector를 참조하여 관심 객체를 검출하는 것을 학습해야 한다.
두번째 단계 : few-shot fine-tuning. 이 단계에서는 base 클래스와 novel 클래스 모두에 대한 학습을 수행한다. novel 클래스는 오직 k개의 라벨링된 바운딩박스만 사용 가능하기 때문에, base 클래스와 novel 클래스 샘플 간의 균형을 맞추기 위해서 base 클래스에 대해서도 k개의 박스를 포함한다. 학습 절차는 첫번째 단계와 동일하지만, 모델 수렴까지의 iteration은 훨씬 작다.
두 학습 단계에서는, reweighting 계수들은 가능한 데이터 중에서 랜덤으로 샘플링된 input pairs (서포트 이미트, 바운딩 박스)에 의존한다. Few-shot fine-tuning 후에는, 서포트 Input 없이도 detection을 바로 수행할 수 있는 detection model을 확보하고 싶어 할 것이다. 이는 reweighting vector를 k-shot 샘플을 입력으로 한 모델 추정 결과에 대해 평균한 것으로 대체함으로써 달성 가능하다. 이후, inference 단계에서는 reweighting module은 완전히 제거하여 사용이 가능하다.
Detection loss function
특히 class prediction branch의 경우 Sample의 수가 매우 적기 때문에 Few-shot detection model을 학습하기 위해서, loss function을 유의해서 선정해야 한다. 예측은 클래스 별로 수행되며, binary cross-entropy loss를 사용한다 (1일때, 해당 target class, 0일때 otherwise). 하지만 이 loss function은 너무 많은 검출 결과를 나타내는 경향이 있다(기차를 버스나 차로 인식). 이는 특정 ROI에 대해서 N개의 클래스 중에서 오직 한개의 class만 truly positive이기 때문이다..(?) binary loss function은 positive와 negative 예측에 대하여 balance가 잡히도록 한다. Non-maximum suppression은 이러한 fals positives를 제거하는데 도움이 되지 못하며, 이는 각 클래스에 대해서만 예측하기 때문이다. ⇒ A, B, C, D 클래스 중에서 A를 찾고자 할 때 positive는 A, negative는 B, C, D. 즉 각 클래스를 모두 동시에 고려하는 것이 아닌 현재 클래스에 대해서 우선 고려하기 때문에, Non-maximum suppression이 false positive 제거에 도움이 되지 못한다. 즉, A~D 각 클래스마다의 prediction 결과가 서로 독립적인 형태가 되므로..(?) 라고 생각함.
이러한 이슈를 해결하기 위해서, 논문에서는 다른 클래스간의 classification score를 조정과 그리고 잘못된 클래스에 대해 낮은 감지 스코어를 위해 softmax layer를 모델에 적용하였다. 그러므로, 실제 i번째 클래스에 대한 classification score c^_i는 다음과 같다.
그리고 조정된 스코어 c^에 대한 cross-entropy loss는 다음과 같이 적용된다.
이때 1(., j)는 현재 anchor box가 클래스 i에 속해있는지 아닌지를 나타내는 indicator function이다. softmax를 적용한 후, 특정 anchor에 대한 classification score의 합은 1이 될 것이고, 덜 적합한 클래스의 예측은 suppressed 될 것이다.
Bounding box와 Objectiveness regression에 대해서는 YOLOv2에 적용된 loss function L_bbx와 L_obj를 적용하였고, 일부 negative sample에 대한 objectiveness scores를 계산하지 않음으로써 positive와 negative에 대한 벨런스를 조정하였다.
따라서 전반적인 detection loss는 다음과 같다.
Reweighting module input
Object Detection 문제에서는 한 이미지에 다른 클래스의 여러 객체가 포함될 수 있다. 따라서 reweighting module이 어떤 target class인지 알게 하기 위해서, RGB 3채널에 “mask” 채널 M_i를 추가하고, 이는 바운딩 박스 영역은 1, 아닌 영역은 0인 binary 값을 갖는다. 만약 여러 target 객체가 있을 때에는 한 object만 사용한다.
4. Experiments
제안하는 모델이 novel object에 대해 학습하기 위한 학습을 훨씬 빠르고 정확하게 할 수 있다는 것을 보이기 위해 여러 baseline 모델과 비교하였다. 논문에서는 YOLOv2를 base detector로 사용하였고, 코드는 github에 릴리즈하였다.
4.1. Experimental Setup
Datasets. VOC 2007, VOC 2012, MS-COCO 데이터셋을 사용함. VOC 07 test set을 test 목적으로, VOC 07, VOC 12 train / validation 셋을 training 목적으로 사용하였다. 이때 20개의 카테고리 중, 랜덤으로 5개를 선정하여 novel class로 사용하였고, 나머지 15개는 base class로 사용한다.
Base 학습 단계에서는, base class에 대한 어노테이션 정보만 활용한다. Few-shot fine tuning 단계에서는, 매우 적은 셋의 학습 이미지들만 사용하며 이는 각 객체 클래스가 k개의 annotated 바운딩 박스만을 갖도록 한다. 이때 k는 1, 2, 3, 5, 10 이다.
MS-COCO 데이터셋은, 평가를 위해 validation set의 5000개의 이미지를 사용하고, train/validation 셋의 나머지 이미지들을 학습 목적으로 사용한다. 80개의 클래스 중에서 VOC 클래스와 중첩되는 20개를 선정하여 novel 클래스로 사용하고, 나머지를 base class로 사용한다. 그리고 COCO 셋의 60개 base class를 사용하여 모델을 학습하고, 이를 PASCAL VOC 데이터셋의 20개의 novel 객체를 검출하는데 적용한다. 이러한 cross-dataset 학습 문제를 COCO to PASCAL 이라 부른다.
⇒ COCO 데이터셋으로 학습하고, PASCAL 데이터로 평가. 더 Generalized한 평가가 될것임. 이때 COCO 학습 전에 PASCAL로 먼저 학습 한것을 TL 하는 형태인가??
Baselines. 논문에서 제안하는 모델을 5개의 모델과 경쟁 비교하였다. 3개는 few-shot learning 전략의 간단한 바닐라 YOLOv2 디텍터 기반의 모델이다. 첫번째는 base 클래스와 novel 클래스를 함께 한번에 학습하는 것으로, YOLO-joint 라고 명명함. 이 방법은, base class로부터 학습된 좋은 feature가 novel class를 검출하는데 적용 가능하다. 제안하는 모델 학습 시의 total iteration과 동일한 횟수를 학습하였다.
두번째는 YOLOv2 모델을 제안하는 학습의 base training phase와 fine-tuning을 동일한 iteration만큼 학습한 모델(YOLO-ft)이고, 세번째 모델은 두번째와 동일하며 모델이 완전히 수렴할때까지 학습한 모델(YOLO-ft-full)이다.
네번째와 다섯번째 모델은 다른 최근 few-shot detection 방법인 Low-Shot Transfer Detector (LSTD)을 각각 동일한 횟수만큼 학습한 모델(LSTD(YOLO))과 완전 수렴할때까지 학습한 모델(LSTD(YOLO)-full)이다.
4.2. Comparison with Baselines
고찰
- 논문에서 제안하는 방법은 1) 적은 학습데이터 만으로 2) 빠르고 효과적으로 학습할 수 있다는 것임.
- Feature Extractor는 기존의 Detector에 있는 부분과 같을 테지만 이를 Reweighting vector와의 channel wise 곱을 해주므로 얻어진 meta feature가 정보를 더 풍부하게(?) 가질 수 있게끔 하게 된다.
- 이는 Attention과 비슷한 느낌으로, detect하고자 하는 novel class에 대해서 feature vector를 잘 뽑고 이를 현재의 디텍터에 반영해주는 효과가 있게 된다.
- 논문을 읽고 나서 드는 생각은, 학습 데이터 수가 적어도, 그리고 빠른 시간안에 학습을 할 수 있다는 것을 볼 수 있었지만… 아직까지는 이러한 few-shot learning의 방법이 그렇게 강건한 수준까지는 올라오지 못했다는 생각이 든다…