저번 글에서는 Classification 관점에서 Few-Shot Learning의 배경과 그 해결 방법을 다루었습니다.
이번 글에서는 최근에 제안된 Few-Shot Object Detection의 방법론과 함께 Few-Shot Classification과 비교했을 때 Few-Shot Object Detection만이 갖는 문제점을 함께 다루어보도록 하겠습니다.
1. Classification & Object Detection
먼저 위 그림을 통해 Image Classification과 Object Detection 간에 어떤 차이가 있는지 알아봅시다.
먼저 쉽게 알 수 있는 점으로 Object Detection은 Classification에 더해 대상의 위치까지 예측해야 한다는 것입니다. 이는 단순히 문제가 더 어려워졌다는 걸 넘어서 Few-Shot Classification에서 자주 사용되는 Similarity 연산을 할 때 공간적 정보까지 고려해야 한다는 걸 의미합니다.
또한 Classification에서 Feature Map 또는 Feature Vector는 Semantic 정보만 갖고 있다고 가정했지만, Detection에서는 Classification 정보와 Localization 정보가 하나의 Feature Map에 있기 때문에 이를 분리해 이용할 지, 같이 이용해야 할 지에 대한 고려가 필요합니다.
두 번째로, 기존의 Few-Shot Learning이 주로 연구된 Image Classification 문제와 달리 Object Detection에선 한 번에 여러 개의 물체를 탐지해야 합니다. 이는 다른 말로 이미지 하나에 여러 개의 타겟 물체가 있을 수도 있고, 여러 물체가 서로 겹쳐 있을 수도 있음을 의미합니다.
마지막으로, 일반적인 Classification은 이미지가 주어지면 답이 반드시 학습한 클래스들 중에 있는 Closed-set Problem입니다. 이에 반해 Object Detection은 Open-set Problem으로 학습하지 않은 물체도 이미지에 나타날 수 있으며, 학습한 클래스의 물체가 전혀 나오지 않을 수도 있습니다. 또한 Object Detection에서는 탐지해야 할 물체 외에도 Background 클래스가 필요한데 Background 클래스는 Closed-set으로 정의할 수 없다는 문제가 있습니다.
이러한 이유들로 Few-Shot Object Detection은 아래와 같은 문제들을 고려하여 문제를 해결해야 합니다.
- Semantic 정보에 더해 공간적 정보의 고려
- Multiple Objects
- Open-set Recognition & Undefined Background Class
2. Few-Shot Object Detection
Few-Shot Object Detection으로 현재까지 CVPR, ICCV 등 Top-tier Conference에서 출판된 논문들은 다음과 같습니다.
- LSTD: A low-shot transfer detector for object detection, AAAI 2018
- Repmet: Representative-based metric learning for classification and few-shot object detection, CVPR 2019
- Few-shot Object Detection via Feature Reweighting, ICCV 2019
- Meta R-CNN : Towards General Solver for Instance-level Low-shot Learning, ICCV 2019
- Meta-Learning to Detect Rare Objects, ICCV 2019
- One-Shot Object Detection with Co-Attention and Co-Excitation, NeurIPS 2019
- Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector, arXiv 2019
Few-Shot Classification 논문에 비해 작은 양의 논문만 발표되었는데, 아직 Few-Shot Classification마저 성숙하지 않은 단계라 Few-Shot Learning을 Object Detection에 적용하는 데 아직 갈 길이 멀기도 하고, 위에서 언급했듯이 Few-Shot Classification과 비교해서 Few-Shot Object Detection만이 갖는 어려움도 많기 때문인 것으로 보입니다.
본 포스트에선 위 논문들 중에서 다른 논문들과 차별화되고 위에서 언급했던 문제를 해결하려 한 논문 4편을 살펴보도록 하겠습니다.
본 논문들을 소개하기 앞서, 현재 Few-Shot Object Detection 논문들은 짧은 시기에 여러 논문이 발표되어 학습과 평가 세팅도 상이하다는 문제점이 있다는 점을 말씀 드립니다. 또한, Novel Class에 학습할 때 Base Class 데이터도 같이 활용한다든지, Novel Class가 포함되지 않은 이미지에 대해서도 평가한다든지 Few-Shot Classification 연구들과도 차이점이 있습니다.
또한 한 번에 K-Way개의 클래스를 예측하는 Few-Shot Classification과 달리, 현재 공개된 대부분의 Few-Shot Object Detection 논문은 하나의 클래스를 묶은 Support Set을 이용하여 Target 또는 Background인지를 구분하는 2-Way Prediction에 기반하고 있습니다.
이러한 의미에서 현재 Few-Shot Object Detection과 Few-Shot Classification은 문제 세팅이 다른 환경에서 연구되고 있다고 말할 수 있습니다.
LSTD: A low-shot transfer detector for object detection
LSTD는 Few-Shot Object Detection과 관련된 첫 논문입니다. 다만 일반적인 5-Way 5-Shot 작업을 하는 Few-Shot Learning과 다르게 Base Class를 이용해 학습한 뒤, Novel Class 데이터셋 전체에 모델을 적용하기 때문에 Few-Shot Learning 보다 Transfer Learning에 가깝다는 의견도 있습니다. 하지만 기본적으로 이 논문 또한 Novel Class당 1/2/5/10/30장의 이미지를 필요한다는 점에서 Few-Shot Learning의 성격도 갖고 있습니다.
논문의 기본 아이디어는 간단합니다. Single Shot Detector (SSD)를 이용해 General Object에 대해서 Bounding Box Regression을 하고, Classification을 위해서 Faster R-CNN의 RoI Pooling Layer와 Classification Head를 이용해 Classification을 수행합니다.
특히 Novel Class에 Fine-Tuning할 때, RoI Feature에 대해서 Classification과 Bounding Box Regression을 같이 수행하는 Faster R-CNN과 달리, Bounding Box Regression 역할을 하는 SSD는 일반적인 물체 전체에 대해서 Bounding Box Regression을 하므로 Overfitting의 영향을 덜 받는다고 설명하고 있습니다.
하지만 개인적인 의견으론 Faster R-CNN의 Region Proposal Network (RPN) 또한 General Object에 대해서 Object Proposal을 수행하는데 굳이 SSD 구조를 차용할 이유가 없어보이고 이에 대한 Backbone 변경 비교 실험도 없어 다소 빈약한 주장으로 보입니다.
이런 기본적인 구조에 더해 Few-Shot Learning을 위해 본 논문의 저자는 Background Depression (BD)과 Transfer Knowledge 모듈을 제안합니다.
Background Depression 모듈은 Novel Class에 Fine-tuning할 때, Background 정보보다는 Novel Class에 대한 Feature를 업데이트하기 위해, Background 영역에 L2 Norm으로 Regularization을 합니다.
Transfer Knowledge 모듈은 Knowledge Distillation과 유사한 방식으로 Source Domain(Base Class)에서 학습한 Classifier를 Target Domain(Novel Class)에서도 이용해 Target Domain Classifier에 Large-Scale Domain Knowledge를 전파합니다.
Source Domain Classifier는 많은 양의 데이터로 학습했기 때문에 이미지가 주어졌을 때 적절한 확률 분포를 예측할 것입니다.
그렇기 때문에 Target Domain Classifier가 예측하는 결과가 Source Domain Classifier가 예측하는 확률 분포와 유사하도록 Loss를 주면 적은 양의 데이터에 Overfitting되는 것을 방지할 수 있습니다.
LSTD의 학습 및 평가 환경은 위와 같습니다. Source Domain에 pre-training한 후, Target Domain에 Fine-tuning하여 모든 Novel Class에 대해서 2-Way(Target or Background) Prediction을 하여 평가합니다.
본 논문은 제안한 Task 1, 2, 3에 대해서 Baseline과 비교해 더 나은 성능 결과를 얻었다고 주장합니다.
하지만, Faster R-CNN이나 SSD에 제안한 모듈을 도입했을 때의 성능 비교 실험은 넣지 않아 제안하는 모델의 성능이 전체 아키텍처에 기인한 것인지, 제안한 모듈에 기인한 것인지 분명하지 않다는 점은 아쉽습니다.
Few-shot Object Detection via Feature Reweighting
해당 논문은 현재까지 발표되었던 논문들 중에서 유일하게 1-Stage Detector에 기반한 모델을 제안했습니다. 전체 구조는 YOLOv2를 차용했고, Query Set으로부터 추출한 Feature Map을 Support Set의 정보와 결합하기 위해 Channel Attention 모듈을 이용했습니다. 이 논문 이후로 다양한 방식으로 Channel Attention을 결합하는 논문들이 발표되었습니다.
수식을 통해 전체 모델을 그리면 위와 같습니다. $I^j_q$, $S_j$, $M^q_j$ 는 각각 Query Image, Support Set(Image and Box Annotation), Ground-Truth (GT) Box in Query를 의미합니다.
$\mathcal{D}_{\theta_D}$ 는 Feature Extractor로 Query Image에 대한 Meta Feature를 생성합니다.
Reweighting Module $\mathcal{M}_{\theta_M}$ 는 Support Set의 이미지와 Bounding Box 정보를 받아 Feature Map을 만든 후 Global Pooling을 적용해 class-specific reweighting vector를 만듭니다. 이 Vector와 Meta Feature를 channel-wise multiplication하여 class-specific feature map을 형성합니다.
마지막으로 Prediction Module $\mathcal{P}_{\theta_P}$ 은 이 feature map을 받아 하나의 grid마다 {o_i, x_i, y_i, h_i, w_i, c_i} (o는 objectness probability, xywh는 bounding box, c는 class probability) 예측을 하고 이를 마지막으로 Query의 GT인 $M^q_j$ 과 비교하여 Loss를 계산합니다.
모델의 전체적인 학습 과정은 다음과 같습니다.
Base Training(Meta-Training)
Episodic Training과 마찬가지로 Base Class로부터 특정 클래스를 선택하여 Support Set과 Query Set을 뽑고 이에 대해 학습하는 과정을 반복합니다.
Few-Shot Fine-Tuning(Meta-Test)
Base Class와 Novel Class를 혼합한 데이터를 이용해 학습합니다. Novel Class의 데이터는 클래스당 K-Shot 만큼의 개수만 있기 때문에 Base Class에서도 클래스당 K-Shot만큼의 데이터를 이용합니다. 모델이 수렴하기까지 적은iteration을 필요로 한다는 것만 빼고 Base Training과 같은 방식으로 학습합니다.
해당 논문은 Pascal VOC에서 5개의 Novel Class Set을 정해 평가하고, 위에서 제안된 LSTD를 YOLO로 구현하여 비교한 결과 더 나은 성능을 얻었다고 말합니다.
다만, 이 평가도 5개의 클래스에 대해서 각각 Target/Background 2-Way로 예측한 결과를 합쳐 평가했으며, Novel Class에 Fine-tuning 시 Base Class를 같이 사용했기 때문에 일반적인 Few-Shot Classification의 세팅과는 다름을 유념할 필요가 있습니다.
Meta-Learning to Detect Rare Objects
Meta-Test시 Fine-tuning을 필요로 하는 Few-Shot Object Detection 논문들 중 Novel Class에 Fine-tuning할 때 Base Class 데이터를 사용하지 않은 유일한 논문입니다.
본 논문에서 중심 아이디어는 Object Detection에서 category-agnostic 요소와 category-specific 요소의 학습을 분리해 해결하려 했다는 점입니다. 특히 category-specific 요소에 적합한 모델을 만들기 위해 저자는 Meta-Learning 방법 중 하나인 Model Parameter Generation 모듈을 도입했습니다.
즉, Base Class 데이터를 이용해 Model Parameter Generation 모듈을 학습시켜 Few-Shot Sample에 적합한 category-specific 모델의 Parameter를 생성하였습니다.
Faster R-CNN를 기본 아키텍처로 하여 Category-agnostic 요소로 CNN Feature Map과 RPN은 설정하고, classifier와 bounding box regressor는 category-specific 요소로 취급하였습니다.
여기서 Category-agnostic 요소인 CNN Feature Map과 RPN은 Meta-Training과 Meta-Testing 모두 동일한 모델을 사용했습니다.
본 논문은 Category-specific 요소 중 하나로 Model Parameter Generation 모듈(Weight Prediction Meta-Model)을 도입했습니다. 이 모듈은 적은 양의 Support Set으로 학습한 Weight가 입력으로 주어졌을 때 마치 Large-Scale 데이터로 학습한 것과 유사한 Weight를 생성합니다.
Weight Prediction Meta-Model은 위와 같은 Loss를 이용해 학습합니다.
$w^c_{det}$ 은 Few-Shot Sample(K-Shot episode)로 학습한 c 클래스에 해당하는 Weight이며, $w^{c,*}_{det}$ 은 Large-Scale 데이터로부터 학습한 Weight입니다.
Few-Shot Sample로 학습한 Weight가 입력으로 주어졌을 때 해당 모듈은 Large-Scale로부터 학습한 Weight와 유사한 형태(Overfitting이 되지 않은 Weight)가 되도록 L2 Norm을 이용하여 Loss를 추가했습니다.
Meta-Test시에는 먼저 모델을 Few-Shot Sample에 대해 학습한 후, 이 Weight를 Weight Prediction Meta-Model에 입력으로 주어 Large-Scale에서 학습한 것과 같은 Weight를 예측하여 모델의 Weight로 사용합니다.
모델의 전체적인 학습 과정은 다음과 같습니다.
2-Stage Meta-Training
1. Class-agnostic 요소를 학습하고 Large-Scale Learned Weight를 얻기 위해, Base Class에 대해서 기본 아키텍처를 일반적인 방식으로 학습합니다.
2. 학습한 모델을 이용해 Episodic Training을 진행합니다. 각 Episode는 하나의 클래스당 K개의 Bounding Box를 추출해 Support Set으로 이용하고, Class-agnostic 요소는 Weight를 Freeze한 뒤 Class-specific 요소만 Scratch로부터 재학습합니다.
Meta-Testing
1. 다시 Category-agnostic 요소는 Meta-Training 때 사용한 Weight를 그대로 사용하고, Category-Specific 요소의 Weight는 Random Initialization하여, Fine-tuning과 동시에 meta-model T를 이용해 class-specific 요소의 weight 생성을 학습시킵니다.
2. 이후 Query Set에서 예측할 땐, Meta-model을 제거하여 일반적인 Faster R-CNN과 같이 사용합니다.
저자는 제안한 방법을 YOLOv2에도 적용하여 위에서 언급된 Feature Reweighting 모델과 비교했을 때도 성능이 우월하고, 이를 Faster R-CNN에 적용했을 때 더 성능을 향상시킬 수 있다고 말합니다.
One-Shot Object Detection with Co-Attention and Co-Excitation
해당 논문은 위에서 언급한 논문들과 달리 Meta-Test시에 Fine-tuning을 필요로 하지 않습니다. 또한, 본 논문에서는 Query 이미지에는 Support Set의 클래스에 해당하는 대상이 반드시 하나 이상 있다는 가정을 추가하여 다른 논문들과 정확한 비교가 어렵습니다.
본 논문은 Support Set의 이미지와 Query Set의 이미지를 결합하기 위해 위에서 언급되었던 Channel Attention에서 한 단계 더 나아가 Non-Local Block 연산을 이용합니다.
Non-Local Block은 모든 공간적 정보를 고려해 Attention을 적용한다는 점에서 기존 Channel-wise Attention에 비해 Object Detection에 더 적합하다고 할 수 있습니다.
특히 Non-Local Block을 2-Stage Detector에서 RoI Pooling 이후의 Feature Map에 적용하는 게 아니라, RPN 이전의 Feature Map에 적용하였습니다. 기존 모델들은 RPN이 General Object Proposal을 하므로 이후의 Feature만 처리하였는데, 저자는 2-Way(Target/Background) Few-Shot Object Detection 모델은 Source Domain에서 Base Class만을 Object로 취급했기 때문에 이 과정에서 RPN이 Novel Class를 Non-Object로 학습할 가능성이 있다고 지적합니다.
추가적으로 Support 이미지로부터 추출한 Feature Map을 이용해 weight vector를 만들고 위에서 언급한 Channel Attention을 Support 이미지와 Query 이미지로부터 추출한 각각의 Non-local Feature에 적용하였습니다.
마지막으로 Margin-based ranking loss를 도입하여 Support Set으로 주어진 정보와 Query Image로부터 추출한 RoI 간의 Similarity를 학습하는 모듈을 추가하였습니다.
해당 논문은 다른 논문들과 달리 Support Set, Query Set 은 어떻게 전처리하고 생성했는지, ImageNet Pre-Trained Backbone Network를 사용할 때에도 평가할 클래스와 겹치지 않도록 데이터를 모두 전처리해준 후 학습하는 등, 자세한 실험 세팅이 나와있어 참고하기 좋은 논문입니다.
이번 글에서는 Few-Shot Object Detection에 대해서 알아보았습니다. Few-Shot Object Detection은 흥미로우면서도 실제 업무에서 활용성이 높은 주제이지만 아직 연구가 많이 되지 않은 주제이기도 합니다.
그 이유는 Few-Shot Learning 연구 자체가 아직 성숙 단계에 접어들지 못했기 때문이며, 또한 이를 Object Detection에 적용할 때 새로운 문제들을 추가적으로 고민해야 하기 때문입니다.
하지만 그렇기 때문에 Few-Shot Object Detection은 발전될 여지가 많은 주제이며, 실용적인 관점에서도 높은 가능성을 지니고 있습니다.
SIA에서는 위성 영상 데이터 기반으로 지금까지 설명한 Few-Shot Object Detection를 활발히 연구 중입니다.
이 분야에 대해 관심이 있으면서 저희와 함께 연구하기를 희망하시는 분은 career@si-analytics.ai 로 상시지원해주시길 바랍니다.
References
[1] Chen, H., Wang, Y., Wang, G. and Qiao, Y., 2018, April. Lstd: A low-shot transfer detector for object detection. In Thirty-Second AAAI Conference on Artificial Intelligence.
[2] Kang, B., Liu, Z., Wang, X., Yu, F., Feng, J. and Darrell, T., 2019. Few-shot object detection via feature reweighting. In Proceedings of the IEEE International Conference on Computer Vision (pp. 8420–8429).
[3] Wang, Y.X., Ramanan, D. and Hebert, M., 2019. Meta-Learning to Detect Rare Objects. In Proceedings of the IEEE International Conference on Computer Vision (pp. 9925–9934).
[4] Hsieh, T.I., Lo, Y.C., Chen, H.T. and Liu, T.L., 2019. One-Shot Object Detection with Co-Attention and Co-Excitation. In Advances in Neural Information Processing Systems (pp. 2721–2730).
[##이학진##]
'Review' 카테고리의 다른 글
Real-world Super-resolution via Kernel Estimation and Noise Injection (0) | 2020.07.15 |
---|---|
Anomaly detection using one class neural networks (Raghavendra Chalapath, 2018) (1) | 2020.07.03 |
CVPR 2020 동향 분석 (0) | 2020.06.19 |
A Benchmark for Interpretability Methods in Deep Neural Networks (0) | 2020.04.29 |
Tutorial on Few-Shot Object Detection #1 (1) | 2020.04.02 |