1. 1 Stage Detectors
*2 stage Detectors
- RCNN, FastRCNN, SPPNet, FasterRCNN ...
- Localization (후보 영역 찾기)
- Classification (후보 영역에 대한 분류)
- Limitation : 속도가 매우 느림
- Real World에서 응용 가능한 Object Detectors는 없을까?
*2 stage detectors vs 1 stage detectors
*1 stage Detectors
- Localization, Classification이 동시에 진행
- 전체 이미지에 대해 특징 추출, 객체 검출이 이루어짐 → 간단하고 쉬운 디자인
- 속도가 매우 빠름 (Real-time detection)
- 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높음
- Background error가 낮음
- YOLO, SSD, RetinaNet, …
*History
2. YOLO v1
2.1 Overview
You Only Look Once History
- 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
*접근 전략
*YOLO 특징
- Region proposal 단계 X
- 전체 이미지에서 bounding box예측과 클래스를 예측하는 일을 동시에 진행
- 이미지, 물체를 전체적으로 관찰하여 추론 (맥락적 이해 높아짐)
2.2 Pipeline
*Network
- GoogLeNet 변형
- 24개의 convolution layer : 특징 추출
- 2개의 fully connected layer : box의 좌표값 및 확률 계산
- 입력 이미지를 SxS 그리드 영역으로 나누기 (S=7)
- 각 그리드 영역마다 B개의 Bounding box와 Confidence score 계산 (B=2)
- 신뢰도(confidence) = Pr(𝑂𝑏𝑗𝑒𝑐𝑡) × 𝐼𝑂𝑈𝑝𝑟𝑒𝑑 𝑡𝑟𝑢𝑡ℎ
- 각 그리드 영역마다 C개의 class에 대한 해당 클래스일 확률 계산 (C=20)
- conditional class probability = Pr(𝐶𝑙𝑎𝑠𝑠𝑖 |𝑂𝑏𝑗𝑒𝑐𝑡)
*Output channel의 의미
- S x S 그리드에서 1셀당 2개의 bbox를 가짐. 따라서 1셀의 30채널중 2개의 bbox 정보를 가짐.
- 5개 (x,y,w,h,c) x 2(bbox의수) = 10
- 나머지 20채널은 class의 갯수 (Pascal dataset 기준임)
- 2개의 bbox confidence를 각각의 클래스의 확률과 곱해준다. -> 2개의 20x1 클래스 예측 확률이 나온다.
- 총 98개의 각각의 클래스에 대한 예측 확률이 나온다.
- 98개의 bbox 예측 확률에서 threshold를 적용하여 임계값보다 낮은 score들을 제거한다.
- 이후 각 클래스마다 내림차순으로 정렬
- NMS를 적용하여 한번더 제거
- 남은 bbox는 prediction bbox
*Loss
- Localization loss :
- 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
- Object를 포함하고 있을때, 중심점의 위치를 regression loss를 계산
- 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
- Object를 포함하고 있을때, w, h regression loss를 계산
- Confidence loss :
- 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
- Object를 포함하고 있을때, confidence score를 계산
- 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
- Object를 포함하고 있지 않을때, confidence score를 계산 (람다는 두항의 밸런스를 조절)
- Classification Loss :
- 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 클래스마다
- Object를 포함하고 있을때, 클래스 예측 확률에 대한 MSE를 계산
2.3 Results
- 기존 Faster R-CNN 보다 FPS가 높다
- Fast R-CNN은 background error가 높은데 반해 YOLO는 낮은편
- 우측 상단 Fast R-CNN과 YOLO를 앙상블하니 결과가 좋더라
* 장점
- Faster R-CNN에 비해 6배 빠른 속도
- 다른 real-time detector에 비해 2배 높은 정확도
- 이미지 전체를 보기 때문에 클래스와 사진에 대한 맥락적 정보를 가지고 있음
- 물체의 일반화된 표현을 학습
- 사용된 dataset외 새로운 도메인에 대한 이미지에 대한 좋은 성능을 보임
3. SSD
3.1 Overview
*YOLO 단점
- 7x7 그리드 영역으로 나눠 Bounding box prediction 진행 → 그리드보다 작은 크기의 물체 검출 불가능
- 신경망을 통과하며 마지막 feature만 사용 → 정확도 하락
*YOLO vs SSD
- input size가 다름.
- YOLO는 FC를 두개 사용하여 속도가 느려짐. SSD는 1x1 conv 사용 FC 사용X.
- YOLO는 마지막 feature map에서 detection 수행
- SSD는 VGG backbone output에서 extra convolution 진행하여 추가로 feature map을 여러개를 만듦.
*SSD 특징
- 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 사용
3.2 Pipeline
*Network
- VGG-16(Backbone) + Extra Convolution Layers
- 입력 이미지 사이즈 300 x 300
*Multi-scale feature maps
- 3x3 conv를 통해 일정한 채널 갯수로 변환
- Offsets : Anchor box의 중심점의 좌표, 너비, 높이 -> 총 4개
- Nc : class의 갯수 + background -> 총 21개
- NBbox는 bbox의 갯수
- bbox의 갯수를 정하는 방법?
- Different scale per feature maps 방법을 적용하여 0.2~0.9 스케일에 해당하는 여러 스케일의 feature map을 만듦
- Different aspect ratio 활용
- ar은 가로와 세로길이의 비율을 나타냄.
- wk, hk 는 위에서 구한 scale과 가로,세로 비율인 ar을 곱해서 bbox의 영역을 정함
- 그리고 ar=1인 박스에서 s1,s2의 중간 scale의 anchor box를 하나더 생성.
- Example - 총 6개의 box
*Default Box
- feature map의 각 cell마다 서로 다른 scale, 비율을 가진 미리 정해진 box 생성
- Faster R-CNN의 anchor box와 유사
*Output boxes
- Predicted offset default box는 총 6개
- 각 box별 class 예측 확률 21개
- 위 정보들이 한 셀에 들어있음 (6x25) = 150개
- 각 Convolution Layer의 default box의 수가 다름
- low-level feature map 부터 high-level feature map이 존재하므로 작은 물체부터 큰 물체를 탐지 가능
- Multi scale feature map을 활용하므로 작은 물체, 큰 물체 둘다 탐지 가능
*Training
- Hard negative mining 수행
- Non maximum suppression 수행
- Loss : Localization loss + Confidence loss
- Localization loss : anchor box에서 gt box로 가려면 얼마나 가야하는지 delta에 대해 학습
- Confidence loss : (?)
3.3 Results
- SSD는 YOLO보다 mAP, FPS둘다 개선되었음
4. YOLO Follow-up
4.1 YOLO v2
*Concepts
- 3가지 파트에서 model 향상
- Better : 정확도 향상
- Faster : 속도 향상
- Stronger : 더 많은 class 예측 (80 -> 9000)
*Better
- Batch normalization
- mAP 2% ↑
- High resolution classifier
- YOLO v1: 224x224 이미지로 사전 학습된 VGG를 448x448 Detection 태스크에 적용
- YOLO v2 : 448x448 이미지로 새롭게 finetuning
- mAP 4% ↑
- Convolution with anchor boxes
- Fully connected layer 제거
- YOLO v1 : grid cell의 bounding box의 좌표 값 랜덤으로 초기화 후 학습
- YOLO v2 : anchor box 도입
- K means clusters on COCO datasets
- 5개의 anchor box
- 좌표 값 대신 offset 예측하는 문제가 단순하고 학습하기 쉬움
- mAP 5% ↑
- Fine-grained features
- 크기가 작은 feature map은 low level 정보가 부족
- Early feature map은 작은 low level 정보 함축
- Early feature map을 late feature map에 합쳐주는 passthrough layer 도입
- 26x26 feature map을 분할 후 결합
- Multi-scale training
- 다양한 입력 이미지 사용 {320, 352, …, 608}
- ≠ multi-scale feature map
- 단순 image sampling! (Multi-scale feature map 사용한것은 아님)
*Faster
- Backbone model
- GoogLeNet → Darknet-19
- Darknet-19 for detection
- 마지막 fully conected layer 제거
- 대신 3x3 convolution layer로 대체
- 1x1 convolution layer 추가
- channel 수 125 (=5 x (5+20))
*Results
*Stronger
- Classification 데이터셋(ImageNet), detection 데이터셋(Coco) 함께 사용
- Detection 데이터셋 : 일반적인 객체 class로 분류 ex) 개
- Classification 데이터셋 : 세부적인 객체 class로 분류 ex) 불독, 요크셔테리어
- “개”, “요크셔테리어”, 배타적 class로 분류하면 안된다.
- WordTree 구성 (계층적인 트리)
- Ex. “요크셔테리어” = 물리적객체(최상위 노드) – 동물 – 포유류 – 사냥개 – 테리어(최하위 노드)
- ImageNet 데이터셋과 CoCo 데이터셋 합쳐서 구성 : 9418 범주
- ImageNet 데이터셋 : Coco 데이터셋 = 4: 1
- Detection 이미지 : classification loss는 특정범주에 대해서만 loss 계산
- ex. 개 이미지 : 물리적객체 – 동물 –포유류 – 개 에 대해서 loss 계산
- Classification 이미지 : classification loss만 역전파 수행 (IoU)
- Detection 이미지 : classification loss는 특정범주에 대해서만 loss 계산
4.2 YOLO v3
*Darknet-53
- Skip connection 적용
- Max pooling x, convolution stride 2사용
- ResNet-101, ResNet-152와 비슷한 성능, FPS 높음
*Multi-scale Feature maps
- 서로 다른 3개의 scale을 사용 (52x52, 26x26, 13x13)
- Feature pyramid network 사용
- High-level의 fine-grained 정보와 low-level의 semantic 정보를 얻음
5. RetinaNet
5.1 Overview
*1 Stage Detector Problems
RPN이 없기 때문에 grid를 나누었고, grid별로 bbox를 무조건 예측하도록 함. 따라서 background를 포함할 확률이 굉장히 높게 되고, Class imbalance문제가 생기게 됨. 따라서 이 문제를 해결하기 위한 방법 도입. (Focal loss)
- Class imbalance
- Positive sample(객체 영역) < negative sample(배경영역)
- Anchor Box 대부분 Negative Samples (background)
- 2 Stage detector의 경우 region proposal에서 background sample 제거 (selective search, RPN)
- Positive/ negative sample 수 적절하게 유지 (hard negative mining)
5.2 Focal loss
*Concept
- 새로운 loss function 제시 : cross entropy loss + scaling factor
- 쉬운 예제에 작은 가중치, 어려운 예제에 큰 가중치
- 결과적으로 어려운 예제에 집중
*Result
- 이후 One-stage methods의 단점이였던 성능면에서 큰 향상을 이룸.
*사용
- Object Detection에서 background와의 class imbalance 조정
- Object Detection 뿐만 아니라 Class imbalance가 심한 Dataset을 학습할 때 이를 활용
- Classification, Segmentation, Kaggle, etc
*Summary
1 stage detector 연구 동향 및 paper
- Anchor
- [DAFS] Dynamic Anchor Feature Selection for Single-Shot Object Detection [ICCV' 19]
- [FSAF] Feature Selective Anchor-Free Module for Single-Shot Object Detection [CVPR' 19]
- Multi-scale feature map
- M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network [AAAI' 19]
- Learning Rich Features at High-Speed for Single-Shot Object Detection [ICCV' 19]
- 경량화
- YOLOv4: Optimal Speed and Accuracy of Object Detection [arXiv' 20]
- Scaled-YOLOv4: Scaling Cross Stage Partial Network [CVPR’ 21]
'부스트캠프 AI Tech > [Week9] Object Detection (1)' 카테고리의 다른 글
[Week9] Object Detection - EfficientDet [Day3] (0) | 2021.09.29 |
---|---|
[Special Mission3] Detectron2 튜토리얼 (0) | 2021.09.29 |
[Week9] Object Detection - Neck [Day2] (0) | 2021.09.28 |
[Week9] Object Detection - library [Day2] (0) | 2021.09.28 |