코딩하는 해맑은 거북이
[컴퓨터비전] Object Detection - 1 Stage Detectors 본문
본 게시물의 내용은 '부스트캠프 AI Tech - Object Det(송원호)' 강의를 듣고 작성하였다.
해당 글은 아래의 5가지를 다룬다.
📌 1 Stage Detectors 등장 배경
📌 YOLO v1
📌 SSD
📌 YOLO v2
📌 YOLO v3
📌 RetinaNet
📌 1 Stage Detectors 등장 배경
이전에 2 Stage Detectors는 속도가 매우 느리다는 한계가 있었다.
그럼 Real World에서 응용 가능한 Object Detectors로 1 Stage Detectors가 등장하였다.
🔷 1 Stage Detectors 특징
- Localization, Classification이 동시에 진행
- 전체 이미지에 대해 특징 추출, 객체 검출이 이루어짐 → 간단하고 쉬운 디자인
- 속도가 매우 빠름 (Real-time detection)
- 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높음
- Background error가 낮음
📌 YOLO v1
YOLO는 You Only Look Once의 약자로, 해당 글에서는 ~v3 까지 설명한다.
🔷 YOLO 의 역사 (현재는 더 다양한 버전이 있음)
- 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예측과 클래스를 예측하는 일을 동시에 진행
- 이미지, 물체를 전체적으로 관찰하여 추론 (맥락적 이해 높아짐)
🔷 네트워크
GoogLeNet을 변형한 구조를 Backbone으로 사용하고,
24개의 convolution layer는 특징 추출, 2개의 fully connected layer 는 box의 좌표값 및 확률을 계산한다.
🔷 YOLO의 기본 학습방법
- 입력 이미지를 SxS 그리드 영역으로 나누기 (S=7)
- 각 그리드 영역마다 B개의 Bounding box와 Confidence score 계산 (B=2)
- 신뢰도(confidence) = Pr(𝑂𝑏𝑗𝑒𝑐𝑡) × 𝐼𝑂𝑈
- 각 그리드 영역마다 C개의 class에 대한 해당 클래스일 확률 계산 (C=20)
- conditional class probability = Pr(𝐶𝑙𝑎𝑠𝑠_𝑖 | 𝑂𝑏𝑗𝑒𝑐𝑡)
🔷 YOLO v1 의 학습방법 예시
1. 30x7x7 크기의 Feature map을 입력으로 받고, 입력 이미지를 7x7 그리드 영역으로 나눈다.
2. Feature map의 한 grid cell 마다 1x30 크기의 벡터를 생성한다.
1x30 = 5 (Bounding box+Confidence Score) + 5 (Bounding box+Confidence Score) + 20 (Conditional Class Probability)
즉, 2개의 Bounding Box+Confidence Score와 나머지 20개는 각 클래스에 해당할 확률을 나타낸다.
3. 2개의 Confidence Score에 대해 각각 20개의 Conditional Class Probability을 곱해서 2개의 20x1 크기의 Class Score Vector를 생성한다.
4. 2~3 과정을 모든 grid cell에 대해 반복한다.
5. 20x1 크기의 Class Score Vector는 2x49 개가 생성된다. 총 98개 bbox가 생성된다.
6. 이후 후처리
- Class Score 값이 Threshold 이하인 값은 0 으로 설정한다.
- Class Score 를 내림차순으로 정렬한다.
- NMS를 수행한다.
🔷 Loss
🔷 장점
- Faster R-CNN에 비해 6배 빠른 속도
- 다른 real-time detector에 비해 2배 높은 정확도
- 이미지 전체를 보기 때문에 클래스와 사진에 대한 맥락적 정보를 가지고 있음
- 물체의 일반화된 표현을 학습
- 사용된 dataset외 새로운 도메인에 대한 이미지에 대한 좋은 성능을 보임
📌 SSD
🔷 YOLO의 단점
- 7x7 그리드 영역으로 나눠 Bounding box prediction 진행
→ 그리드보다 작은 크기의 물체 검출 불가능 - 신경망을 통과하며 마지막 feature만 사용
→ 정확도 하락
🔷 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 사용
→ YOLO보다 빠른 속도를 보여주고, 정확도를 향상시켰음
🔷 네트워크
VGG-16을 Backbone으로 사용하고, FC Layer 대신 Extra Convolution Layers를 사용한다.
그리고, 입력 이미지 사이즈는 300x300을 받는다.
🔷 학습과정
SSD는 Extra Convolution Layers에서 생성된 Multi-Scale Feature Map들을 모두 이용한다.
1. Feature map에 3x3 Conv를 적용하여, Channel을 N_Bbox * (offsets + Nc) 로 만든다.
- N_Bbox를 만드는 방법은 Different scale per feature maps, Different as[ect ratio 공식으로 정하고, m이 bbox의 갯수가 된다.
* Default Box : Feature map의 각 cell마다 서로 다른 scale, 비율을 가진 미리 정해진 box 생성(Faster R-CNN의 anchor box와 유사)
2. m=6 이라고 하면, 5x5 Feature map에서 생성되는 출력은 5x5x(6x(4+21)) 이다.
3. 각 Feature map(6 단계)에 대해 위의 연산을 반복하면, 8732개의 bbox가 생성된다.
4. 후처리로 Hard Negative Mining과 NMS(Non Maximum Suppression)를 수행하여 예측한다.
🔷 Loss
📌 YOLO v2
YOLO v2는 3가지 Concepts으로 Better, Faster, Stronger 에서 성능을 향상시켰다.
Backbone으로 Darknet-19를 사용한다.
🔷 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
🔷 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))
🔷 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 계산
📌 YOLO v3
YOLO v3는 YOLO v2와 비교하여 Backbone과 Multi-scale Feature maps을 개선하였다.
🔷 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 정보를 얻음
📌 RetinaNet
🔷 1 Stage detectors의 문제점
- 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)
🔷 Focal Loss
RetinaNet은 Focal Loss를 사용하여 1 Stage detectors의 문제점을 개선하였다.
Object Detection에서 background와의 class imbalance 조정하거나,
Object Detection 뿐만 아니라 Class imbalance가 심한 Dataset을 학습할 때 이를 활용한다.
- 새로운 loss function 제시 : cross entropy loss + scaling factor
- 쉬운 예제에 작은 가중치, 어려운 예제에 큰 가중치
- 결과적으로 어려운 예제에 집중
'AI' 카테고리의 다른 글
[컴퓨터비전] Advanced Object Detection (0) | 2023.05.04 |
---|---|
[컴퓨터비전] Object Detection - EfficientDet (0) | 2023.05.03 |
[컴퓨터비전] Object Detection - Neck (0) | 2023.05.03 |
[컴퓨터비전] Object Detection - 2 Stage Detectors (0) | 2023.05.02 |
[논문리뷰] PGGAN (Progressive Growing GAN) (0) | 2023.04.26 |