
논문 링크: https://arxiv.org/abs/2004.10934
YOLOv3에 모듈 형식의 추가적인 방법, Loss function 개선, 더 효율적인 학습 방식 적용하여 만든 빠르고 정확한 모델이 YOLOv4이다.
대부분의 CNN 기반 object detector들은 추천 시스템에서 사용된다.
예를 들면, 주차장에 빈자리를 찾을 때는 느리지만 성능이 좋은 모델을 사용하고, 자동차 충돌 알림 시스템에서는 빠르지만 예측 성능이 떨어지는 모델을 사용한다.
예측 성능이 뛰어난 현대의 object detector들은 실시간(real-time)으로 돌아가지 않으며, 학습하는동안 많은 GPU가 필요하고, mini batch의 크기가 크다는 단점이 있었다.
YOLOv4 논문에서는 real-time object detector들이 평범한 GPU에서 돌아갈 수 있도록 많은 feature를 적용하였다. 또한 하나의 GPU만 필요한 CNN 기반 모델을 제안하였다.
real-time object detector을 만들기 위해 병렬 처리 환경에서 최적화를 빠르게 수행할 수 있는 모델을 개발하도록하였다.
YOLOv4 개발 위해 한 세가지 일
1. 1080 Ti, 2080 Ti 같은 평범한 GPU만으로도 학습이 가능
2. Object detector를 학습시킬 때 BoF, BoS 방식이 학습에 미치는 영향에 대한 검증
3. 기존의 SOTA BoF, BoS이 single GPU에서 학습이 더 잘되도록 기법을 변형

object detector은 one-stage detector, two-stage detector로 나뉜다.
One-stage detector은 Backbone → Dense Prediction을 거쳐서 class와 BBox를 예측한다.
Two-stage detector은 Sparse Prediction, 한 단계를 더 거친다.
Backbone은 classification task로 pretrained 된 모델을 주로 사용한다. Neck은 Backbone과 Head를 연결하는 부분이다.
Dense Predictin과 Sparse Prediction은 Head로, 예측하는 부분이다.
연구 목표는 object detector의 작동 속도가 빨라지고, 병렬 연산이 최적화되는 것이다.

최신 detector들은 일반적으로 backbone, head 두 부분으로 구성된다.
1. Backbone
: 이미지에서 특징 표현 추출하기 위해 pre-trained된 네트워크
ImageNet으로 pre-trained
→ 이미지의 공간 해상도를 줄이고, 특징 해상도를 높이는 데 도움된다.
2. Head
: 최종 단계 작업 수행
one-stage:
two-stage: R-CNN 시리즈 (Fast R-CNN, Faster R-CNN, R-FCN, Libra R-CNN)
→ class, bounding box 예측
v4 이전의 모델들은 backbone과 head로만 구성되었는데, v4부터 neck가 추가되었다.
3. Neck
: backbone과 head 사이에 layer 삽입해서 연결하는 구조로, feature map을 모은다. 특징 피라미드 추출에 사용된다.
4. Others
: object detection 위한 새로운 backbone이나 model

효율적인 학습을 위해 training 전략만 변경하거나 학습 비용만 증가시키는 딥러닝 기법이다. Inference 비용 증가 없이 성능 향상을 할 수 있다.
Data Augmentation, Regularization, Normalization, Object Function이 있다.
1. Data Augmentation
데이터의 가변성을 증가시켜, 모델이 robust해지는 것이 목적
입력 이미지와 feature map에 적용할 수 있다.
1) Photometric, Geometric distortion
2) Object occlusion 문제 시뮬레이션
3) 여러 이미지 함께 사용
4) GAN 이용
2. Regularization
3. Normalization
데이터 불균형 때문에 발생한 semantic distribution의 bias를 해결해야하는데,
Hard negative example mining, online hard example mining, focal loss로 해결하고자 하였다.
하지만 example mining은 YOLO 같은 one-stage object detector에서 사용할 수 없다. (two-stage에서 사용 가능) one-stage object detector은 dense prediction architecture에 속하기 때문이다. (dense predicton: 하나의 픽셀로부터 label을 예측하는 작업)
따라서, focal loss for dense object 방식으로 데이터 불균형을 해결하였다.
4. Object Function
BBox(bounding box) regression의 목적 함수를 사용한다.
여태까지 object detector들은 MSE를 사용하여 bbox의 x, y, width, height에 대한 regression을 수행하였다. YOLO 같은 anchor 기반 방식들의 목적함수는 x_offset, y_offset, width_offset, height_offset에 대한 regression을 수행한다. 하지만, 각 offset에 대해 직접적으로 regression을 수행하면, 각 값을 독립적인 변수로 봐서 객체의 integrity를 고려하지 않게 된다.
이를 해결하기 위한 방법이 IoU loss이다. IoU loss는 bbox가 ground-truth bbox와 겹치는 정도를 고려한 loss이다.
IoU loss는 scale invariant해서 기존의 또는 loss를 사용할 때 이미지가 커지면서 loss가 같이 커지는 문제를 해결하였다. IoU 다음으로 GIoU, DIoU, CIoU가 개발되었다.
GIoU 객체의 형태와 방향도 고려하였고, DIoU는 중심점 사이의 거리도 고려하였다. CIoU loss는 겹치는 영역, 중심점 거리, 가로세로 비율을 동시에 고려하였다.
*scale invariant: 이미지의 크기가 바뀌어도 IoU는 달라지지 않음
BoF와 반대로 Inference cost가 조금 상승하는 성능 향상을 위한 딥러닝 방법이다. Plugin module과 post-processing 방식(예측 결과 생성 후 처리) 방법을 사용한다.
모델의 특성을 강화하는 방식으로, Enlarging Receptive Field, Attention Mechanism, Feature Integration, Activation Function이 있다.
1. Enlarging Receptive Field
1) SPP
feature map을 d x d 크기로 나누면 d 개수만큼 layer가 생기는데, 그 후에 각 layer의 각 영역에서 max pooling을 진행한다. 각 layerㄴ느 1차원 feature vector를 출력하고, 모든 layer에서 나온 결과를 하나의 긴 1차원 feature vector로 연결한다.
YOLOv3에서는 SPP 모듈의 구조를 변형하여 computation을 0.5% 추가한 것만으로도 MS COCO에서 AP 점수를 2.7% 향상시켰다.
2) ASPP
3) RFB
2. Attention Mechanism
Object detection에서 사용되는 attention module은 channel-wise attention과 point-wise attention으로 나뉜다.
Channel wise attention의 대표 모델은 Squeeze-and-Excitation(SE)이고, point-wise attention의 대표 모델은 Spatial Attention Module(SAM)이다.
SAM은 ImageNet image classification task에서 computation이 0.1% 추가되었지만, 성능은 0.5% 상승했다. 또한 GPU 상에서 inference 속도에 영향을 주지 않았다.
3. Feature Integration
초기에 feature integration은 skip connection 또는 hyper-column을 사용하여 low-level physical feature를 high-level semantic feature(=의미있는 feature)로 통합하였다.
FPN같은 Multi-scale prediction 방식이 유명해지며, 여러개의 feature pyramid를 통합하는 SFAM, ASFF, BiFPN 등의 가벼운 모듈이 제안되었다.
4. Activation Function
좋은 활성화 함수는 추가적으로 computational 비용을 크게 만들지 않고, gradient가 더 효율적으로 propagated되게 한다.
ReLU는 gradient vanishing problem을 해결했고, LReLU, PReLU, ReLU6, Scaled Expolential Linear Unit, Swish, hard-Swish, Mish도 제안되었다.
YOLOv4 개발 목표
input network resolution(=입력 이미지의 화질), convolution layer 개수, 파라미터 수, layer 출력 개수(filter)가 최적의 밸런스를 찾는 것
receptive field를 늘리기 위해
YOLO 모델 구조 조건
작은 물체 탐지하기 위해 더 큰 해상도(resolution) 이미지 사용 → 높은 입력 네트워크 크기 필요
늘어난 입력 네트워크 다루기 위해 더 많은 layer로 큰 receptive field
다양한 크기의 물체 탐지하기 위해 더 큰 capacity 모델 사용 → 더 많은 파라미터 필요

따라서, backbone으로 더 큰 receptive field와 (더 많은 convolutional layer) 더 많은 수의 파라미터를 갖는 모델이 선택되어야 한다.
최적의 Backbone 모델은 CSPDarknet53이다. 이때, 큰 해상도의 이미지를 사용했다는 것을 알 수 있다. (→ Receptive field size가 725x725) 파라미터 수가 27.6M로, 수가 커서 capacity가 크다.
EfficientNet-B3의 Receptive field size가 더 크지만 CSPDarknet53의 파라미터 수가 더 커서 capacity가 더 크다고 할 수 있다.
FPS(한장 당 처리하는 frame 수)가 66으로 가장 크다.
Receptive field 크기의 영향
1. Receptive field가 물체의 크기이면 물체의 전체 그림을 볼 수 있다.
2. Receptive field가 네트워크 크기이면 물체 주변의 배경까지 볼 수 있다.
3. Receptive field가 네트워크의 크기보다 크면 이미지 간 연결성이 증가한다.
→ 큰 receptive field를 갖는 것이 중요하다.
*CSP (Cross Stage Partial): New backbone that can enhance learning capability of CNN
SPP 블록이 receptive field를 증가시키고 네트워크의 속도를 거의 감소시키지 않아서 CSPDarknet53 뒤에 SPP를 추가했다. 또한 PANet으로 parameter aggregation을 수행했다. 그리고 anchor based인 YOLOv3를 head로 사용하였다.
1. Activations
: ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish
2. Bounding box regression loss
: MSE, IoU, GIoU, CIoU, DIoU
object 마다 scale 크기가 다른데, MSE는 scale에 취약해서 영향을 받는 단점이 있다. 이를 개선한게 교집합을 사용한 IoU이고, GIoU, CIoU로 점점 개선되어서 DIoU가 사용되었다.
3. Data augmentation
: CutOut, MixUp, CutMix
4. Regularization method
: DropOut, DropPath, Spatial DropOut, DropBlock
DropBlock에서 좋은 결과가 나와서 나머지 메소드는 ablation study에 포함되지 않았다.
5. Normalization of the network activation by their mean and variance
: Batch Normalization(BN), Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization(FRN), Cross-Iteration Batch Normalization(CBN)
6. Skip-connections
: Residual connections, Weighted residual connections, Multi-input weighted residual connections, Cross stage patial connections(CSP)
YOLOv4가 하나의 GPU에서 학습을 수행할 수 있도록 추가적인 방법을 사용하였다.
1. Data Augmentation
Mosaic, Self-Adverarial Training(SAT)을 사용하였다.

Mosaic는 4장의 이미지를 합쳐서 한장으로 사용하여, batch size를 4로 했을 때와 비슷한 효과가 나타난다. 적은 batch로 효율적으로 많은 이미지 학습이 가능하다. 4개의 이미지를 합쳤기 때문에 4개의 다른 환경에 대한 정보를 갖게 된다.
SAT는 새로운 data augmentation 방식으로, 2개의 forward backward 단계를 따른다. 첫번째 단계에서 nn가 네트워크의 weight 대신 원본 이미지를 변경하여 이미지 속에 객체가 없는 것처럼 자신을 속인다. 두번째 단계에서 nn은 수정된 이미지를 기존의 학습 방식으로 학습한다.
2. Hyperparameter Search
Genetic Algorithm을 적용하여 최적의 하이퍼파라미터를 선택하였다.
3. Modified Existing Methods
Modified SAM, Modified PAN, Cross mini-Batch Normalization(CmBAN)을 수정하여 모델이 효율적으로 학습할 수 있게 하였다.
CmBN은 CBN이 수정된 방식으로, single batch 안의 mini batch 사이에 있는 statistics만 수집한다.

원래 mini-batch는 전체 이미지를 한번에 학습하기 어려워서 32, 16 batch size로 mini batch 단위를 센다. 본 논문에서는 우리가 알고 있는 batch size를 또 나눈다.

Max-Pooling을 거치고, Convolution을 거쳐서 하나의 차원이 되고, Sigmoid를 거쳐서 각 픽셀마다 0~1 사이의 값을 갖게 된다. 그 후에 원래 이미지 차원과 곱해져서 self attention이 적용된다.
SAM은 원래 spatial-wise attention인데 modified SAM에서는 point-wise attention으로 수정했다.

PAN의 shortcut connection을 concatenation으로 대체했다.
YOLOv4 모델 구조
Backbone: CSPDarknet53
Neck: SPP, PAN
Head: YOLOv3
YOLOv4 uses..
Bag of Freebies (BoF) for backbone
: CutMix, Mosaic data augmentation, DropBlock regularization, Class label smoothing
Bag of Specials (BoS) for backbone
: Mish activation, Cross-stage partial connections (CSP), Multi-input weighted residual connections (MiWRC)
Bag of Freebies (BoF) for detector
: CIoU loss, CmBN, DropBlock regularization, Mosaic data augmentation, Self Adversarial Training(SAT), Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler, Optimal hyper parameters, Random training shapes
Bag of Specials (BoS) for backbone
: Mish activation, SPP, SAM, PAN, DIoU-NMS
YOLOv4는 실험에서 ImageNet, MS COCO dataset을 사용했다.

CSPResnext50 backbone에 적용한 BoF에 대한 classification ablation experiment이다.
아무것도 사용하지 않았을 때 77.9%이고, CutMix, Mosaic, Label Smoothing, Mish를 사용했을 때 가장 높은 79.8%를 기록했다.

CSPDarknet backbone에 적용한 BoF에 대한 classification ablation experiment이다.

ResNext의 detector head에 적용한 BoF에 대한 detector training accuracy ablation experiment이다.
S, M, IT, GA, OA를 사용할 때 AP 점수가 42.4%로 가장 높은 것을 알 수 있다.

detector head에 적용한 bag of specials에 대한 detector ablation experiment이다.
CSPRestNext, PANet, SPP, SAM을 종합했을 때 성능이 가장 높다.

다양한 backbone 모델의 detector trainging accuracy를 확인한 결과이다. CSPDarknet의 detection accuracy가 가장 높다.
classification accuracy가 가장 높다고 해서 detection accuracy가 가장 높은 것은 아니었다.

mini-batch 크기를 다르게 한 실험이다.
minibatch가 4일 때와 8일 때 AP 점수의 차이가 크지 않다. BoF와 BoS를 도입한 후에는 비싼 GPU로 모델을 학습시키는 것이 의미가 없음을 뜻한다. 따라서, 평범한 GPU만으로도 YOLOv4를 학습시킬 수 있게 되었다.

YOLOv4와 다른 object detection 모델들의 성능을 비교한 결과인데, YOLOv4의 속도가 압도적으로 빠른 것을 볼 수 있다. 성능이 더 좋은 모델과 성능은 AP가 5 정도 차이가 난다.
평범한 GPU에서 학습하기 위해 많은 feature을 검증했고,
classifier와 detector의 성능을 높이기 위해 BoF, BoS를 선택하여 적용하였다.