object detection은 bounding box로 표현한다.
자율 주행, 글자 인식 등에 적용할 수 있다.
architecture
2-stage approach
1. 이미지를 인식해서 feature를 뽑아내기
2. detection
이 접근법을 활용한 architecture에는 R-CNN (Regions with CNN features) 가 있다.
Step 1. Input image
Step 2. Extract region proposals
Step 3. Compute CNN features
Step 4. Classify regions
R-CNN family
One-stage approach
YOLO
input 이미지에 grid를 설정하고 각 grid 마다 bounding box를 출력하고 classification을 수행한다. 그러나 모든 grid마다 이런 작업을 수행하면 비효율적이고 성능이 떨어지게 된다. 이를 보완하기 위해 anchor box라는 개념이 도입되었다. anchor box는 feature map에서 각 위치마다 미리 정해놓은 aspect ratio와 scale의 단계를 몇 개로 한정해놓고 모델의 출력이 한정된 개수의 anchor를 기반으로 box 정보를 예측하도록 설계한 것이다.
YOLO의 출력의 형태에 주목을 하면 class의 개수에 맞는 class probability vector와, bounding box의 (x, y, w, h, object score; bounding box 좌측 상단의 좌표, 너비, 높이, 분류 확률)의 5차원 벡터가 bounding box의 개수만큼 출력된다.
one-stage approach 모델들은 class imbalance problem을 겪기 쉽다. 이는 negative anchor box(무의미한 신호)의 개수가 positive anchor box의 개수보다 많아지는 문제이다. 이를 해결하기 위해 만들어진 Loss function이 focal loss이다.
RetinaNet 또한 one-stage approach를 적용한 architecture이다. Feature Pyramid Network로 구성되어 있고 box와 class predictio을 하게 된다.
RoI pooling
one-stage approach와 two-stage approach의 가장 큰 차이점은 One-stage approach에서는 RoI pooling이 없다는 것이다.
one-stage approach는 feature를 뽑고 각 feature 마다 미리 정의된 anchor box에 대해서 bounding box를 설정하고 classification을 한다.
two-stage approach의 경우 feature map에서 각 영역을 bounding box로 prediction을 먼저 한 후 prediction된 feature를 따로 뜯어서 그 뜯어진 각각의 pooling 된 feature에 대해서 box refinement와 classification을 하는 두 단계의 구조로 이루어진다.
Transformer-based models
DETR (DEtection TRansformer)
encoder-decoder 구조를 사용한다. CNN이 feature를 encoding하면 decoder를 통해 object detection을 수행한다. 특히 decoder에서 object가 어디있는지 query를 하는 구조로 설계되어 있다.
DETR은 출력 결과가 한 번에 순서 없이 나온다. 그래서 각각의 object query가 어떤 것인지 해석 가능하지 않다. 그래서 query 결과를 label과 매칭을 해서 loss를 계산하게 된다. 이 때 사용하는 매칭 방법은 Bipartite matching이다.