논문 원본 : https://arxiv.org/abs/2004.10934
YOLOv4: Optimal Speed and Accuracy of Object Detection
There are a huge number of features which are said to improve Convolutional Neural Network (CNN) accuracy. Practical testing of combinations of such features on large datasets, and theoretical justification of the result, is required. Some features operate
arxiv.org
1. Introduction
- 고속 고정확도의 객체 탐지기를 일반적인 GPU (ex.GTX 1080 Ti, RTX 2080 Ti) 상에서 훈련하고 사용할 수 있게 만들면, 가격 부담없이 대중적으로 사용 가능
- 이를 위해, 본 논문은 고성능 객체 탐지 모델이 일반적인 GPU에서도 실시간으로 작동하고, 단 1개의 GPU로도 훈련 가능한 모델을 만들고자 함
- 본 연구의 주요 목표는 이론적 계산량(BFLOP)을 줄이는 것이 아니라, 실제 시스템에서의 빠른 동작 속도와 병렬 연산에 최적화된 객체 탐지기를 설계하는 데 있음
- MS COCO 데이터셋에서의 객체 탐지 성능 비교
- YOLOv4는 다른 모델보다 오른쪽 위에 있음
- 즉, 속도(FPS)도 높고, 정확도(AP)도 높음
- 즉, 실시간에 적합하면서도 정확한 객체 탐지 가능
2. Related work
2.1 Object Detection models
- 객체 탐지 모델은 일반적으로 두 부분으로 구성
- Backbone : 이미지에서 특징을 뽑아내는 역할
- 일반적으로 ImageNet에서 사전 학습된 네트워크
- GPU 플랫폼에서 사용되는 Backbone
- VGG, ResNet, ResNeXt, DenseNet
- CPU 플랫폼에서 사용되는 Backbone
- SqueezeNet, MobileNet, ShuffleNet
- Head : 객체의 클래스 및 bounding box를 예측하는 역할
- Head는 일반적으로 1-stage 또는 2-stage 탐지기로 나뉨
- 대표적인 2-stage 탐지기 (R-CNN 계열)
- 1단계: 이미지에서 region proposal을 먼저 찾음
- 2단계: 그 후보 영역에 대해 class와 bounding box 예측
- 대표 모델 : Fast R-CNN, Faster R-CNN, R-FCN, Libra R-CNN
- Anchor free로 확장된 모델 : RepPoints
- 대표적인 1-stage 탐지기
- 이미지를 한 번 보고, class와 bounding box 모두 바로 예측
- 대표 모델 : YOLO, SSD, RetinNet
- Anchor free로 확장된 모델 : CenterNet, CornerNet, FCOS
- 대표적인 2-stage 탐지기 (R-CNN 계열)
- Head는 일반적으로 1-stage 또는 2-stage 탐지기로 나뉨
- 최근 객체 탐지기는 Backbone과 Head 사이에 Neck 구조를 삽입
- 해당 구조는 다양한 단계에서 feature map을 수집 (작은 객체부터 큰 객체까자 잘 탐지하기 위함)
- CNN 하위 계층 : 해상도가 높고 구체적이고 디테일 위주 (선 , 모양)
- CNN 상위 계층 : 해상도가 낮고 의미 중심, 추상적 (개, 사람, 차)
- 일반적으로 bottom-up 경로와 top-down 경로로 구성
- 각각의 해상도에 대해 의미와 디테일이 모두 담겨 있는 feature map 생성
- Neck에 사용되는 대표적인 구조
- FPN, PAN, BiFPN, NAS-FPN
- 해당 구조는 다양한 단계에서 feature map을 수집 (작은 객체부터 큰 객체까자 잘 탐지하기 위함)
- Backbone : 이미지에서 특징을 뽑아내는 역할
- 일부 연구자들은 새로운 backbone (DetNet, DetNAS) 또는 전체 모델 (SpineNet, HitDetector) 자체를 설계하기도 함
2.2 Bag of freebies
- 보통 객체 탐지 모델은 오프라인으로 학습 (데이터를 미리 전부 준비하고 한 번에 다 학습)
- 온라인 학습 : 데이터가 실시간으로 계속 들어오고 들어올 때마다 조금씩 학습
- 연구자들은 이 점을 이용해 Inference 시간에는 영향을 주지 않으면서 정확도를 향상시킬 수 있는 다양한 훈련 전략 개발
- 이리한 방법들을 Bag of Freebies 라고 부름
- 1) Pixel-wise Data Augmentation
- Photometric Distortion : 밝기, 대비, 색조, 채도 노이즈 등을 조정
- Geometric Distortion : 크기 조절, 자르기, 뒤집기, 회전 등
- 2) Occlusion Simulation
- Random Erase, Cutout : 이미지를 사각형으로 잘라 무작위 값이나 0으로 채움
- Hide-and-Seek, GridMask : 여러 사각형 구역을 무자위 혹은 균일하게 선택해 0으로 채움
- 3) Multi-Image Based Augmentation
- MixUp : 두 이미지를 혼합하고 레이블도 비율게 맞게 조정
- CutMix : 한 이미지의 일부를 잘라 다른 이미지에 붙이고, 레이블로 영역 비율로 조정
- Style Transfer GAN : 스타일 변환을 통해 CNN의 texture bias를 줄임
- 4) Class Imbalance Handling
- Hard Negative Mining / OHEM : 모델이 자꾸 틀리는 어려운 샘플(=Hard Negative) 위주로 학습하게 함
- 2단계 객체 탐지기에 적용
- Focal Loss: 자주 나오는 쉬운 클래스는 loss를 작게, 드물고 어려운 클래스는 loss를 크게 줌
- 1단계 탐지기의 클래스 불균형 문제 해결
- Hard Negative Mining / OHEM : 모델이 자꾸 틀리는 어려운 샘플(=Hard Negative) 위주로 학습하게 함
- 5) Label Representation Enhancement
- Label Smoothing: one-hot 라벨 대신 soft 라벨을 사용해 모델을 더 견고하게
- Label Refinement (지식 증류 기반): teacher의 출력 확률을 이용해서 soft label 생성
- 6) BBox Regression Loss Improvement
- BBox를 MSE로 예측하면 좌표를 개별적으로 처리해 객체를 일관되게 감싸지 못할 수 있으며, IoU 기반 손실 함수들은 BBox 전체를 하나로 보고 겹침 정도로 성능을 평가해 이를 보완
- IoU : 예측된 박스와 정답 박스의 겹치는 영역 비율을 고려
- GIoU : 겹치는 정도 외에도 박스의 형태와 방향 포함
- DIoU : 두 박스의 중심점 거리를 고려
- CIoU : 겹치는 면적 + 중심 거리 + 종횡비 모두 고려
- BBox를 MSE로 예측하면 좌표를 개별적으로 처리해 객체를 일관되게 감싸지 못할 수 있으며, IoU 기반 손실 함수들은 BBox 전체를 하나로 보고 겹침 정도로 성능을 평가해 이를 보완
2.3 Bag of specials
- Inference 시간에는 아주 조금만 계산량이 늘어나지만, 정확도는 크게 올려주는 플러그인 모듈이나 후처리 기법
- 1) Enlarging Receptive Field
- SPP (Spatial Pyramid Pooling)
- CNN에서 여러 크기의 max pooling을 병렬로 수행해 더 넓은 영역을 포착
- YOLOv3에서는 다양한 크기(k=1,5,9,13)의 max pooling을 병합해서 수용 영역을 확장
- MS COCO 기준, 연산량 0.5% 증가만으로 AP50이 2.7% 상승
- ASPP (Atrous Spatial Pyramid Pooling)
- Dilated Convolution을 활용해 더 넓은 영역을 다룸
- RFB (Receptive Field Block)
- 다양한 dilation rate를 가진 conv를 조합해 더 넓고 풍부한 공간 정보를 학습함
- SSD 기준, 7% 연산 증가만으로 AP50이 5.7% 향상
- SPP (Spatial Pyramid Pooling)
- 2) Attention Mechanism
- Channel Attention (SE 모듈)
- 어떤 채널이 중요한지 판단하고 강조
- 연산량 2% 증가로 ResNet50의 Top-1 정확도 1% 증가
- 다만 GPU에서 추론 시간은 10% 증가
- Spatial Attention (SAM 모듈)
- 입력의 특정 위치가 중요한지를 학습
- 계산량은 거의 없고, ResNet50-SE의 성능을 0.5% 향상시키며 GPU 추론 속도에 영향 없음
- Channel Attention (SE 모듈)
- 3) Feature Integration
- 기존 방식
- skip connection, hypercolumn 등으로 low-level과 high-level 피처를 연결
- hypercolumn : 여러 층의 feature map을 concat
- skip connection, hypercolumn 등으로 low-level과 high-level 피처를 연결
- FPN 구조 기반 경량화 모듈들
- SFAM: multi-scale feature에 SE로 채널별 가중치 부여
- ASFF: softmax로 각 스케일 feature를 통합
- BiFPN: multi-sclae feature를 위아래 양방향으로 연결하고, 각 scale의 중요도를 학습해서 통합
- 기존 방식
- 4) Activation Function
- 활성화 함수는 모델의 학습 효율과 표현력을 결정함
- ReLU: 기울기 소실 문제 해결
- LReLU, PReLU: 음수 영역에서도 미세한 기울기 제공
- ReLU6, hard-Swish: 양자화(quantization) 모델에 최적화됨
- SELU: self-normalizing을 위한 활성화 함수
- Swish, Mish: 연속 미분 가능한 함수로 표현력 강화
- 활성화 함수는 모델의 학습 효율과 표현력을 결정함
- 5) Post-processing
- NMS (Non-Maximum Suppression)
- 같은 물체에 대한 여러 예측 중 가장 확신 있는 박스를 선택하고 나머지는 겹치는 정도가 높으면 삭제
- 개선된 NMS
- Soft-NMS: IoU 기반으로 BBox 점수를 점진적으로 감소시킴
- 출력 우선순위 조절/ 최종 출력는 Confidence threshold에 의해 결정
- DIoU-NMS: 박스 중심 간 거리까지 고려해서 필터링
- 이런 후처리는 anchor-free 방식에선 점차 필요 없어지고 있음
- 기존 모델(YOLO, SSD 등)은 anchor box를 기반으로 다수의 BBox를 생성하기 때문에 → 후처리 필요
- Soft-NMS: IoU 기반으로 BBox 점수를 점진적으로 감소시킴
- NMS (Non-Maximum Suppression)
3. Methodology
- 본 연구의 목표는 이론적인 연산량 지표(BELOP)를 줄이는 것이 아니라, 실제 시스템에서의 빠른 작동 속도와 병렬 연산에 최적화된 구조를 갖춘 신경망을 만드는 것
- 실시간 신경망을 위한 두 가지 옵션 제시
- GPU용 모델 : Convolution 레이어에서 그룹 수를 작게 설정 (1~8개)
- 대표 모델 : CSPResNeXt50, CSPDarknet53
- VPU용 모델 : Grouped Convolution 사용, 하지만 Squeeze-and-Excitation(SE) 블록은 사용하지 않음
- 대표 모델 : EfficientNet-lite, MixNet, GhostNet, MobileNetV3
- GPU용 모델 : Convolution 레이어에서 그룹 수를 작게 설정 (1~8개)
3.1 Selection of architecture
- 본 연구는 다음 요소들 간의 최적의 균형을 찾고자 함
- 입력 해상도
- Convolution layer 수
- Parameter 수 ((필터 크기² × 필터 수 × 채널 수) / 그룹 수),
- 출력 채널 수 (필터 수)
- 실험 결과 요약
- CSPResNeXt50 : 이미지 분류 (ImageNet)에서는 더 뛰어남
- CSPDarknet53 : 객체 탐지 (MS COCO)에서는 더 뛰어남
- 결론적으로, 분류에 적합한 모델이 탐지에는 적합하지 않을 수 있다는 점이 드러남
- CSP (=Cross Stage Partial)
- 1) 입력 채널을 두 개로 나눔 (1x1 conv 사용)
- 절반은 그냥 바로 넘기고
- 절반만 Conv layer를 여러 개 거침
- 2) 마지막에 두 결과를 concat
- 계산량 절감, 정확도 향상(정보 손실 최소화), 메모리 최적화 (중복 특징 제거)
- 1) 입력 채널을 두 개로 나눔 (1x1 conv 사용)

- 객체 탐지에 필요한 특성
- 높은 해상도의 입력 -> 작은 물제도 감지
- 더 많은 레이어 수 -> 더 넓은 Receptive Field
- 더 많은 파라미터의 수 -> 다양한 크기의 객체 감지 가능
- Receptive Field에 따른 모델 비교
모델 | 3x3 Conv 레이어 수 | Receptive Field | 파라미터 수 |
CSPResNeXt50 | 16개 | 425x425 | 20.6M |
CSPDarknet53 | 29개 | 725x725 | 27.6M |
- 가설적으로, Receptive Field가 넓고(3×3 Conv가 많고), Parameter가 많은 모델이 좋은 Backbone
- 위의 이론적 근거와 실험 결과에 따라 YOLOv4의 backbone으로 CSPDarknet53을 선택
- 추가 모듈 및 구조 선택
- SPP (Space Pyramid Pooling) : receptive field를 크게 늘려주며 연산 속도에 거의 영향 없음
- PANet : FPN보다 성능 좋음
- PANet
- FPN은 Top-down만 있음
- PANet은 Bottom-up 경로를 추가 (저레벨에 고레벨로 위치 정보를 다시 전달)
- N2~N5 각각의 feature map에 RPN 적용되어 RoI 생성
- 각 RoI에 대해 multi-scale RoIAlign 수행
- 여러 scale의 RoI feature를 하나로 Adaptive Pooling
- Detection Head에서 최종 예측 (class + bbox)

- 최종 구조
- Backbone : CSPDarknet53
- 추가 모듈 : SPP
- Neck : PANet
- Head : YOLOv3 (Anchor 기반)
- 또한, 우리는 향후 Bag of Freebies(BoF) 기법을 더 많이 탐색하여 정확도를 높일 계획
- 마지막으로, Cross-GPU BatchNorm(SyncBN)이나 고가 장비 없이도 GTX 1080Ti나 RTX 2080Ti 같은 일반 GPU에서 동일한 성능을 재현할 수 있도록 설계
- SyncBN은 멀티 GPU 학습 시, 각 GPU의 배치 정규화 통계를 동기화해서 더 안정적이고 정확한 학습이 가능하게 해주는 BatchNorm의 확장 버전
3.2 Selection of BoF and BoS
- 객체 탐지 모델의 학습 성능을 향상시키기 위해, CNN에서는 보통 다음과 같은 기법들을 사용
- Activation Function
- ReLU, Leaky-ReLU, PReLU, ReLU6, SELU, Swish, Mish
- Bounding box regression loss
- MSE, IoU, GIoU, CIoU, DIoU
- Data Augmentation
- CutOut, MixUp, CutMix
- Regularization method
- DropOut, DropPath, Spatial DropOut, DropBlock
- Normalization of the network activation by their mean and variance
- Batch Normalization(BN), Cross-GPU BatchNorm(SyncBN), Filter Response Norm(FRN), Cross-Iteration BatchNorm(CBN)
- Skip-connections
- Residual connection, Weighted residual, Multi-input weighted residual, Cross Stage Partial connection (CSP)
- PReLU, SELU는 학습이 어렵고, ReLU6는 quantization을 위한 것이기 때문에 해당 함수들을 후보군에서 제외
- DropBlock는 논문에서 다양한 정규화 방법 중 성능이 우수함이 입증됨 -> 따라서 DropBlock 사용
- 본 연구는 단일 GPU에서 학습이 가능한 전략을 중시하므로, Cross-GPU BatchNorm(SyncBN)은 사용하지 않기로 함
PReLU
- ReLU의 확장 버전
- 음수일 때의 기울기를 학습으로 조절하도록 만든 활성화 함수


SELU
- 입력 데이터의 분포를 정규화되도록 만드는 특별한 활성화 함수
- Self-Normalizing Neural Networks에서 제안됨


ReLU6
- ReLU의 상한 버전, 즉 값을 6으로 클리핑하는 활성화 함수


Dropblock
- CNN에서 일정 크기의 block을 통째로 꺼서, 특정 위치에 과하게 의존하지 않도록 방지하는 정규화 기법

3.3 Additional improvements
- Mosaic Augmentation
- 4개의 서로 다른 이미지를 하나로 합쳐 학습
- CutMix는 2개를 섞지만 Mosaic은 4개
- 다양한 배경/문맥에서 객체가 등장하도록 훈련 가능
- 작은 배치 사이즈에서도 큰 배치처럼 효과를 냄
- 4개의 서로 다른 이미지를 하나로 합쳐 학습
- Self-Adversarial Training (SAT)
- 네트워크가 자기 자신에게 적대적 공격을 먼저 수행
- 1단계: 입력 이미지를 교란시켜 객체가 없는 것처럼 보이게 만듦
- 2단계: 그 교란된 이미지에서 정상적으로 객체를 찾도록 훈련
- 강건성(robustness) 향상
- 네트워크가 자기 자신에게 적대적 공격을 먼저 수행
- 최적의 하이퍼파라미터 탐색
- genetic algorithm을 활용해 자동 최적화
- Cross mini-Batch Normalization (CmBN) 사용
- 한 batch 안에서 여러 mini-batch들이 있을 때, 그 mini-batch들 사이의 통계만을 이용하여 정규화를 수행
- 단일 GPU에서 BatchNorm 효과를 안정적으로 유지하도록 도와줌
기법 | 통계 범위 | 장점 | 단점 |
BN | 현재 배치 전체 | 간단하고 빠름 | 작은 batch에선 불안정 |
CBN | 과거 여러 batch 통계 누적 | 통계 안정 | 느림, 구현 복잡 |
CmBN | 현재 배치 내부 미니배치 | 단일 GPU에서도 안정적 | 일부 상황에서 정확도 감소 |
- 기타 수정
- SAM은 기존의 spatial-wise attention에서 point-wise attention 방식으로 수정
- PAN에서는 기존 shortcut connection 대신 concat 연산을 사용하도록 변경
3.4 YOLOv4
- 구조
- Backbone: CSPDarknet53
- Neck: SPP, PAN
- Head: YOLOv3
- Backbone에 적용된 BoF
- CutMix & Mosaic 데이터 증강
- DropBlock 정규화
- Class label smoothing
- Backbone에 적용된 BoS
- Mish activation function
- CSP
- Multi-input weighted residual connections (MiWRC)
- Detector에 적용된 BoF
- CIoU 손실 함수
- CmBN
- DropBlock 정규화
- Mosaic 데이터 증강
- SAT
- Grid 민감도 제거
- 하나의 Ground Truth에 여러 anchor 사용
- Cosine annealing 학습률 스케줄링
- 최적의 하이퍼파라미터 설정
- Random training shapes
- Detector에 적용된 BoS
- Mish activation function
- SPP block
- SAM block
- Path-aggregation block
- DIoU-NMS
- Multi-input weighted residual connections (MiWRC)
- 여러 입력을 받아서, 학습 가능한 가중치로 조절해 더한 후, residual connection처럼 출력에 반영하는 방식
- CSP, PANet 등에서 사용
- Mish activation function
- ReLU보다 정보 손실을 줄이고, 학습을 더 유연하게 만들어 줌


- DIoU-NMS
- 기존 NMS에서 IoU만 쓰는 게 아니라, 박스 중심점 사이 거리까지 고려
- 두 박스가 겹치긴 해도, 중심이 멀면 다른 객체일 수도 있음
4. Experiments
Influence of different feature on Classifier training
- Classifier 성능에 영향을 주는 다양한 기법들을 비교 분석
- 가장 성능 향상에 효과적인 조합은 다음과 같음
- Cutmix + Mosaic
- Class Label Smoothing
- Mish activiation function
- 결론
- Classifier 학습에서 사용하는 BoF는 Cutmix + Mosaic + Label Smoothing
- Mish는 추가적인 BoS 요소로 채택됨
Influence of different features of Detector training
- BoF - 학습 방식 개선
- 단일 기법보다 여러 BoF 기법의 조합이 성능 향상에 효과적
- CIoU loss function를 사용할 때 성능이 가장 높게 나옴
- Grid 민감도 제거 + Mosaic + Label Smoothing + Optimized Anchors 등이 꾸준히 상위 성능 조합에 포함
- BoS - 구조 개선
- 최고 성능 구조 조합 : SPP + PAN + SAM
Influence of different bakcbones and pretrained weightings on Detector training
- 분류 성능이 높은 Backbone이 탐지기에도 최적인 것은 아님
- CSPResNeXt50: 분류 정확도는 높지만, 탐지 정확도는 떨어짐
- CSPDarknet53: 분류와 탐지 모두에 적합, 탐지 성능 최적
- 결론: 객체 탐지기에는 CSPDarknet53 Backbone + BoF + Mish 조합이 가장 효과적
Influence of different mini-batch size on Detector training
- BoF + BoS를 적용하면 mini-batch 크기에 민감하지 않음
- 소형 mini-batch로도 탐지 성능이 유지됨
- 고가 GPU 없이도 고성능 탐지기 학습 가능
5. Results
- YOLOv4는 정확도와 속도 모두 최고 수준의 균형 달성
- Pareto 최적점에 위치: 다른 최신 모델보다 더 빠르면서도 더 정확
- 다양한 GPU 아키텍처(Maxwell, Pascal, Volta)에서 벤치마크 수행
- 어떤 GPU 환경에서도 SOTA 대비 뛰어난 실시간 성능 제공
6. Conclusion
- 본 연구는 기존의 어떤 객체 탐지기보다도 더 빠르고(FPS), 더 정확한(AP50~95 및 AP50 기준) state-of-the-art detector를 제안
- 이 탐지기는 8~16GB VRAM을 가진 일반적인 GPU에서도 학습 및 사용이 가능
- 또한, 1-stage anchor 기반 탐지기의 기본 개념이 유효함을 입증
- 매우 다양한 기능들을 실험적으로 검증했고, 그 중에서 classifier와 detector 모두의 정확도를 높이는 데 효과적인 기능들을 선별하여 사용
7. Reference
https://arxiv.org/abs/1612.03144
https://medium.com/data-science/types-of-convolutions-in-deep-learning-717013397f4d
https://arxiv.org/abs/1406.4729
https://viso.ai/deep-learning/yolov3-overview/
https://arxiv.org/abs/1810.12890v1
https://docs.pytorch.org/docs/stable/generated/torch.nn.Mish.html
https://docs.pytorch.org/docs/stable/generated/torch.nn.PReLU.html
https://docs.pytorch.org/docs/stable/generated/torch.nn.SELU.html
https://docs.pytorch.org/docs/stable/generated/torch.nn.ReLU6.html
'논문 리뷰 > CV' 카테고리의 다른 글
[X:AI] DINO 논문 리뷰 (2) | 2025.07.28 |
---|---|
[X:AI] ViT 논문 리뷰 (1) | 2025.07.14 |
[X:AI] RetinaNet 논문 리뷰 (1) | 2025.02.03 |
[X:AI] YOLO 논문 리뷰 (1) | 2025.01.28 |
[X:AI] Faster R-CNN 논문 리뷰 (1) | 2025.01.21 |