1 Stage Detectors

2 stage detector는 localization과 classification을 하기 때문에 realtime으로 활용이 불가능하다. 그래서 RPN 과정을 빼서 속도를 올렸다.
특징
- Localization, Classification이 동시에 진행한다.
- 전체 이미지에 대해 특징 추출, 객체 검출이 이루어진다. → 간단하고 쉬운 디자인
- 속도가 매우 빠르다 (Real-time detection)
- 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높다
- Background error가 낮다
- YOLO, SSD, RetinaNet 등이 있다
YOLOv1
YOLO Version
- YOLO v1 : 하나의 이미지의 Bbox와 classification 동시에 예측하는 1 stage detector 등장
- YOLO v2 : 빠르고 강력하고 더 좋게, 3가지 측면에서 model 향상
- YOLO v3 : multi-scale feature maps 사용
- YOLO v4 : 최신 딥러닝 기술 사용, BOF : Bag of Freebies, BOS: Bag of Specials
- YOLO v5: 크기별로 모델 구성, Small, Medium, Large, Xlarge
특징
- Region Proposal 단계가 없다
- 전체 이미지에서 bounding box예측과 class 예측을 동시에 진행한다.
- 이미지, 물체를 전체적으로 관찰하여 추론한다.
Pipeline
1단계 : 입력이미지를 SxS 그리드 영역으로 나눈다.(S=7)
2단계 : 각 그리드 영역마다 B개의 서로 다른 Bbox와 confidence score를 계산한다.(B=2)
3단계 : 각 그리드 영역마다 C개의 class에 대해 해당 클래스일 확률을 계산한다.(C=20)
- Output 사이즈가 7x7x30으로 나오게 되는데 채널이 30인 이유는 각 그리드에 대해서 2개의 Bounding Box가 있는데 그것을 표현하기위해 5x2 개의 Channel이 사용되고 PASCAL VOC dataset을 사용했기 때문에 20개의 channel은 클래스의 개수이다.
- Yolo는 background의 여부를 포함하지 않는다.
Inference
첫 번째 bounding box의 confidence score와 20개의 class 수를 곱해서 나온 결과는 첫번째 bounding box가 해당 클래스일 확률이다.

각 그리드마다 2개의 cell을 만들어내어 총 7x7x2개가 만들어진다.

98개의 cell들을 Threshold로 걸러내고 descending한다. 그렇게 나온 box를 대상으로 NMS연산을 수행한다. 마지막으로 Object에 box들을 그려준다.
Loss

Localization Loss, Confidence Loss, Classification Loss 총 3가지 Loss를 합쳐서 최종 Loss를 구한다.
- Localization : 각 object bbox의 x,y에 대한 loss와 w,h에 대한 loss를 더한다.
- Confidence : Object가 있는 bbox대상으로 loss + Object없는 bbox대상으로 loss 더한다.
- Classification : Object 별로 class 정답과오차 loss이다.
장점
- Faster R-CNN에 비해 6배 빠른 속도를 자랑한다.
- 다른 real-time detector에 비해 2배 높은 정확도를 자랑한다.
- 이미지 전체를 보기 때문에 클래스와 사진에 대한 맥락적 정보를 가지고 있음 -> 백그라운드 에러가 낮다.
- 물체의 일반화된 표현을 학습한다.
- 사용된 dataset외 새로운 도메인에 대한 이미지에 대한 좋은 성능을 보인다.
YOLOv2
- 정확도, 속도, 더 많은 클래스를 예측하는 방향으로 모델의 성능을 높혔다.
- Batch Normalization
- mAP 2% 성능 향상
- High Resolution Classifier
- YOLOv1: 224x224 이미지로 사전 학습된 VGG를 448x448 Detection Task에 적용했다.
- YOLOV2: 448x448 이미지로 새롭게 finetuning했다.
- mAP 4% 정도 성능 향상
- Convolution with anchor boxes
- FCN layer 제거했다.
- Anchor box를 도입했다.
- K means clusters on COCO datasets
- 좌표 값 대신 offset 예측하는 문제가 단순하고 학습하기 쉽다.
- mAP 5% 정도의 성능향상
- Fine-grained features
- 크기가 작은 feature map은 low level 정보가 부족하다.
- Early feature map은 작은 low level 정보를 담고있다.
- Early feature map을 late feature map에 합쳐주는 layer 도입했다.
- 26x26 feature map을 분할후에 결합을 했다.

- Multi-scale training
- 다양한 입력 이미지를 사용하여 학습을 진행했다.
YOLOv3
Backbone을 Darknet53으로 변경했다.
- Skip connection을 적용했다.
- Max pooling을 사용하지 않고 대신 Convolution stride 2를 사용했다.
- ResNet-101, ResNet-142와 비슷한 성능을 지니고 FPS가 높다는게 장점이다.
RetinaNet
1-Stage Detector는 RPN이 없고 그리드별로 bounding box를 무조건 예측하기 때문에 background를 잡는 경우가 더 많이 생긴다. 그래서 클래스 불균형문제가 발생한다.
- Class 불균형
- Positive sample(객체) < negative sample(배경)
- Anchor box 대부분 배경이다.
- 2 Stage Detector의 경우 region proposal에서 background sample을 제거한다.
- Positive/Negative sample 수를 적절하게 유지한다.
- Cross Entropy에 Scaling Facor를 추가하였다.
- 새로운 Loss function을 제시했다 : CSE + scaling factor
- 쉬운 예제에 적은 가중치를 주고 어려운 예제에 큰 가중치를 부여한다.

SSD
Yolo는 7x7 그리드 영역으로 나눠서 bounding box prediction을 진행하기 때문에 그리드보다 작은 크기의 물체를 검증할 수 없었다. 그리고 신경망을 통과하며 마지막 feature만 사용하기 때문에 정확도하락이라는 단점이있다. SSD에서는 1x1 Conv를 사용하여 좀 더 나은 성능을 보이고 extra conv를 수행함으로써 각 conv에 대해서 detection을 수행한다.

특징
- Extra convolution layers에 나온 feature map들 모두 detection 수행한다.
- 6개의 서로 다른 scale의 feature map 사용한다.
- 큰 feature map (early stage feature map)에서는 작은 물체 탐지한다.
- 작은 feature map (late stage feature map)에서는 큰 물체 탐지한다.
- Fully connected layer 대신 convolution layer 사용하여 속도를 향상시켰다.
- Default box 사용 (anchor box), 서로 다른 scale과 비율을 가진 미리 계산된 box 사용한다.
Pipeline
Network
- VGG-16(backbone) + Extra Conv Layers
- Input size : 300x300

5x5 feature의 경우 256 channel을 3x3 conv channel로 변경해준다.
이때 SSD는 background도 포함하게 되므로 x,y,w,h와 class의 수(20) + background 까지 합쳐서 총 25개를 예측을 한다.
NBbox : 0.2~0.9까지 선형적으로 scale을 늘려간다.

총 6개의 default box를 활용하게 된다.
Default Box
- feature map의 각 cell마다 서로 다른 scale, 비율을 가진 box를 생성한다.
- Faster R-CNN의 anchor box와 유사하다.


총 8732개의 default box를 사용한다.
Training
- Hard Negative Mining을 수행한다.
- NMS를 수행한다.
