- [16′ CVPR] YOLO v1 : You Only Look Once: Unified, Real-Time Object Detection
- [17′ CVPR] YOLO v2 : YOLO9000: Better, Faster, Stronger
- [17′ ICCV] RetinaNet : Focal Loss for Dense Object Detection
- [18′ arxiv] YOLO v3
- [20′ arxiv] YOLO v4: Optimal Speed and Accuracy of Object Detection
내용 요약
기존 Object Detection 연구에서는 모델의 성능을 개선할 수 있는 다양한 방법들이 제안되었습니다. 이러한 방법은 모델의 복잡도를 증가하지 않는 방법과 모델의 복잡도를 증가하는 방법으로 구분할 수 있습니다. YOLO v4에서는 이렇게 모델의 성능을 개선할 수 있는 다양한 방법을 정리하고 적용해 봅니다. 뿐만 아니라 모델의 성능을 개선할 수 있는 새로운 방법과 기존 방법을 변형한 방법들을 제안합니다. 이를 통해 기존 방법들보다 빠르고 정확한 모델인 YOLO v4를 제안합니다.
1. 들어가며
이번 글에서는 2020년에 발표된 YOLOv4: Optimal Speed and Accuracy of Object Detection 논문을 리뷰합니다. YOLO v4는 그동안 Object Detection에 사용된 다양한 최신 방법을 분석하고, 이들 중 최고의 조합을 적용하여 기존 YOLO의 성능을 끌어올린 논문입니다. YOLO v4에서는 대부분의 내용을 기존 방법들의 분류와 설명에 지면을 할애합니다. 가장 큰 비중을 차지하는 내용은 object detection 모델의 성능을 개선할 수 있는 다양한 방법들입니다. 이를 architecture, 쉬운 방법, 복잡한 방법으로 나누어 살펴보겠습니다. 뿐만 아니라 YOLO v4에서는 모델의 성능을 개선할 수 있는 새로운 방법을 제안합니다. 이를 새로운 방법과 기존 방법을 약간 변형한 방법으로 나누어 살펴보겠습니다. 최종적으로 YOLO v4에서는 어떠한 방법들을 선택 적용하였는지 간단하게 정리하고 실험을 통한 성능을 살펴보도록 하겠습니다.
2. 기존 Object Detection 방법 분석
먼저 기존 Object Detection 방법들의 공통 특성을 분석해 보겠습니다.
2-1. Architecture
Object Detection 방법들의 architecture는 크게 네 가지로 구분하여 생각할 수 있습니다.
2-1-1. Input
첫 번째는 Input입니다.
가장 일반적인 방법은 이미지를 Input으로 받는 것입니다. 하지만 그 외에도 이미지 패치, 이미지 피라미드 등을 입력으로 받는 방법도 있습니다.
2-1-2. Backbone
두 번째는 Backbone입니다.
Backbone은 보통 CNN을 사용하여 입력 이미지의 feature map을 추출하는 기능을 의미합니다. 위의 그림을 보면 입력 이미지를 받아 Backbone에서 feature map을 추출하는 모습을 볼 수 있습니다. 이러한 Backbone 구조로는 대표적으로 GPU 사용을 전제로 하는 VGG, ResNet 등을 들 수 있습니다. 반면 CPU 환경에서의 동작을 목표로 하는 SqueezeNet, MobileNet, ShuffleNet 등의 Backbone도 존재합니다.
2-1-3. Neck
세 번째는 Neck입니다.
이때의 Neck은 Backbone과 Head 사이에 적용되어 다른 레벨의 feature들을 통합해 주는 기능을 의미합니다. 위 그림을 보면 Backbone으로부터 추출된 feature들이 Head로 가기 전 Neck 단계에서 각기 다른 레벨의 feature들과 연결되어 정보가 통합되는 모습을 볼 수 있습니다. 이러한 구조는 보통 아래로부터 위의 방향 (bottom up path), 위로부터 아래로의 방향 (top down path), 또는 둘 다로 구성되어 있습니다. 대표적으로 FPN, Path Aggregation Network (PAN) 등의 구조가 있습니다.
위 그림은 FPN의 작동 모습을 나타낸 그림입니다. 왼쪽에서 입력 이미지로부터 다양한 레벨의 feature를 추출하는 모습을 볼 수 있습니다. 그리고 이렇게 추출된 다양한 레벨의 feature를 우측에서는 서로 연결하여 정보를 통합하는 모습을 볼 수 있습니다.
위 그림은 Path Aggregation Network의 작동 모습을 나타낸 그림입니다. a 부분을 보면 FPN과 동일하게 동작하는 모습을 볼 수 있습니다. 반면 b 부분을 보면 정보의 흐름이 반대로 아래에서 위로 이어지는 모습을 볼 수 있습니다. Path Aggregation Network는 이처럼 정보를 위로부터 아래로, 그리고 다시 아래로부터 위로 연결해 주어 더 다양한 레벨의 정보를 통합할 수 있도록 구성해 주었습니다.
2-1-4. Head
네 번째는 Head입니다. Head는 Input, Backbone, Neck으로 이어져 넘어온 정보를 토대로 최종 목표인 물체의 종류와 위치 정보를 계산하는 단계입니다. 이는 1 stage object detection과 2 stage object detection 방법에 따라 서로 다르게 구성됩니다.
위 그림은 1 stage object detection의 Head 부분을 나타낸 그림입니다. 그림 상에서 Dense Prediction이라고 표현하는 모습을 볼 수 있습니다. 1 stage object detection 방법에는 Region Proposal 단계가 없습니다. 그 결과 feature map의 모든 위치에 대해 물체의 유무를 판단해야 하죠. 따라서 dense 한 prediction이라고 표현할 수 있습니다. 1 stage object detection의 대표적인 예시로는 YOLO 시리즈들을 들 수 있습니다. 이들은 일반적으로 속도가 빠르고 성능이 비교적 떨어진다는 특징이 있습니다.
반면 위 그림은 2 stage object detection의 Head 부분을 나타낸 그림입니다. 그림 상에서 Sparse Prediction이라고 표현하는 모습을 볼 수 있습니다. 2 stage object detection은 일반적으로 물체가 있을법한 부분을 먼저 찾아낸 뒤 해당 물체의 정보를 추측합니다. 따라서 feature map의 모든 위치에 대해 판단해도 되지 않기에 sparse 한 prediction이라고 표현할 수 있습니다. 2 stage object detection의 대표적인 예시로는 R-CNN 시리즈들을 들 수 있습니다. 이들을 일반적으로 정확도가 뛰어나며 속도가 비교적 느리다는 특징이 있습니다.
2-2. Bag of freegies
다음은 bag of freebies에 대해 살펴보겠습니다.
Freebie란 ‘공짜’를 의미하는데요, 따라서 bag of freebies란 ‘공짜 아이템들’ 정도로 해석할 수 있습니다. 이를 object detection에 적용하면 모델의 용량을 늘리지 않고 (공짜로) 성능 향상을 얻을 수 있는 방법들이라고 해석할 수 있습니다. 저자들은 이렇게 object detection 방법에 적용할 수 있는 bag of freebies를 크게 네 가지로 분류하여 분석합니다.
2-2-1. Data Augmentation
첫 번째는 Data Augmentation입니다. Data Augmentation은 수집한 데이터에 일정한 규칙의 변화를 주어 데이터를 뻥튀기하는 방법입니다. 직접 데이터를 수집하는 방법은 비용과 시간의 한계가 있고, 그렇다고 적은 양의 데이터로 모델을 학습하자니 과적합의 위험이 있죠. 이러한 문제를 해결하는 가장 대표적인 방법이기도 합니다. Data Augmentation은 모델을 건드리지 않고도 쉽게 성능을 향상할 수 있으므로 첫 번째 bag of freebies에 해당합니다.
이러한 Data augmentation에는 다양한 방법이 있습니다. 방식에 따라 구분하여 간단하게만 살펴보겠습니다.
첫 번째는 픽셀 레벨에서 데이터에 변화를 주는 방법입니다.
위 그림을 보면 이미지를 회전하거나, 픽셀값을 변경하는 등의 변화를 주는 모습을 볼 수 있습니다.
두 번째는 픽셀 차원이 아닌, 이미지 전체 또는 일부를 통째로 변경하는 방법입니다.
위 그림은 CutOut이라는 Augmentation 방법의 사례입니다. 이미지 중간중간이 잘라져 나간 (CutOut) 모습을 볼 수 있습니다.
위 그림은 Random Erase라는 Augmentation 방법의 예시입니다. 이미지 중간중간이 잘라져 나감과 동시에 특정 값들로 채워진 모습을 볼 수 있습니다.
세 번째는 이미지는 유지하되, feature 레벨에서 변화를 주는 방법입니다.
대표적으로 위의 그림과 같이 Drop Out이라는 방법을 들 수 있습니다. Drop Out은 모델의 노드 간 연결을 랜덤으로 끊어줌으로써 동일한 입력값에 대해 다른 값의 feature가 나오도록 해줍니다.
네 번째는 다양한 이미지를 섞는 방법입니다.
위 그림은 이러한 방법의 대표적 예시인 Mixup과 CutMix의 샘플을 나타낸 그림입니다. Mixup은 두 이미지를 일정 비율로 섞어준 모습을, CutMix는 이미지의 일정 부분을 다른 이미지로 대체해 준 모습을 볼 수 있습니다.
다섯 번째는 GAN을 사용한 방법입니다.
위 그림은 StyleGAN을 사용하여 이미지를 변형해 준 샘플입니다. GAN을 활용하여 이미지의 느낌, 질감등을 다양하게 변형하는 모습을 볼 수 있습니다.
2-2-2. Semantic Distribution Bias 문제 해결하기
두 번째는 Semantic Distribution Bias 문제를 해결하는 것입니다. 이는 데이터의 분포상 의미 있는 특성의 비중이 다르게 존재하는 문제를 의미합니다. Object Detection에서는 물체와 배경의 class imbalance 문제에 해당합니다. 1 stage object detection 모델이든, 2 stage object detection 모델이든 공통적으로 물체 또는 배경을 구분해야 하는 문제 풀어야 합니다. 1 stage 모델은 이를 feature map의 모든 위치에 대해 풀어야 하고, 2 stage 모델은 Region Proposal이 된 부분에 대해서만 풀면 된다는 차이점만 있을 뿐이죠.
문제는 이렇게 풀어야 하는 문제의 대부분은 물체가 없고 배경이라는 겁니다. 입력 이미지상에 물체는 1~2개 밖에 없는 상황을 생각해 보면 이해할 수 있습니다. 문제는 이렇게 되면 물체와 배경을 구분하도록 모델을 학습하기가 쉽지 않다는 것입니다. 모델 입장에서는 어렵게 학습할 필요 없이 배경이라고만 대답해도 대부분의 문제를 맞힐 수 있기 때문이죠. 이러한 문제를 집중적으로 분석하여 새로운 loss function을 통해 해결하고자 한 방법으로는 RetinaNet의 Focal Loss를 들 수 있습니다. 자세한 내용은 Focal Loss 논문 리뷰를 참고해 주세요.
2-2-3. One Hot Hard Representation 문제 개선하기
세 번째는 One Hot Hard Representation 문제를 개선하는 것입니다. 이는 Label 정보가 [1,0,0], [0,1,0] 등과 같이 0 또는 1의 딱딱한 표현 (hard representation)으로 이루어져 발생하는 문제를 의미합니다.
모델의 입장에서 이게 왜 문제가 되는지 생각해 보죠. 모델에게 0 또는 1로 정답을 알려준다는 건 이분법적인 관점으로 학습을 한다는 의미가 되겠죠. 그런데 세상 많은 일들이 이분법적으로 구분되지는 않습니다. 예를 들어 우리도 사진을 보다 보면 이게 강아지인지 고양이인지 헷갈리는 경우가 있죠. 그럴 때 우리는 아이에게 이 사진은 ‘강아지 같기도 하고, 고양이 같기도 해’라고 가르쳐 줍니다. 이를 딥러닝 방식으로 표현하면 [1,0] 또는 [0,1]이 아닌, [0.5, 0.5]라고 할 수 있겠네요. 이렇게 0과 1이 아닌 중간의 값들로 정답을 표현해 주는 방법을 hard representation과 반대 개념인 soft representation이라고 합니다. 그리고 이렇게 soft representation으로 만들어주는 작업을 Label Smoothing이라고 하고, 이를 위한 대표적인 방법은 Knowledge Distillation이 있죠.
위 그림은 Knowledge Distillation을 사용하여 Label Smoothing을 하여 soft representation을 만들어주는 과정을 표현한 그림입니다. 이렇게 hard representation을 soft representation으로만 바꿔주어도 모델의 성능이 개선되는 것으로 알려져 있습니다.
2-2-4. Bounding Box Regression 개선하기
네 번째는 Bounding Box Regression과 관련된 Objective Function을 개선하는 것입니다. Bounding Box Regrssion을 위한 가장 전통적인 Objective Function은 Mean Squared Error를 사용하여 좌표값 또는 offset을 학습하는 것입니다.
하지만 이러한 방식은 문제가 있습니다. Object Detection은 박스의 크기에 따라 난이도와 중요도가 다르게 평가되어야 합니다. 예를 들어 아주 큰 박스와 아주 작은 박스에서 동일하게 10픽셀만큼 위치가 틀린 것은 다르게 평가되어야 하죠. 상대적으로 작은 박스에서의 10픽셀이 더 크므로 더 많이 틀린 것으로 취급되어야 합니다. 하지만 위의 방식대로라면 이를 공정하게 평가해 줄 수 없죠. 이러한 문제를 해결하기 위해 제안된 방식이 IoU Loss입니다.
위 그림은 IoU Loss의 계산 방법을 표현한 그림입니다. 박스의 좌표값이나 offset이 아닌 박스의 union과 박스의 intersection 너비로 Loss를 구성한 모습을 볼 수 있습니다. 따라서 박스의 크기를 고려한 Loss를 표현할 수 있게 되었죠.
이렇게 네 가지의 bag of freebies들을 소개했습니다. 이러한 방식을 적절히 사용하면 ‘공짜로’ Object Detection 모델의 성능을 개선할 수 있습니다.
2-3. Bag of specials
다음은 ‘공짜’가 아니지만 Object Detection 모델의 성능을 개선할 수 있는 방법들을 살펴보겠습니다. 저자들은 이를 bag of specials라고 표현합니다. 이들은 모델 구조를 더 복잡하게 변경하거나 새로운 모듈을 추가하거나 새로운 process를 추가해 주는 방법을 의미합니다. 따라서 ‘공짜’가 아니라고 말할 수 있죠.
2-3-1. Receptive Field Size 키우기
첫 번째는 Receptive Field를 키우는 방법입니다.
위 그림은 SPPNet의 작동 방법을 표현한 그림입니다. SPPNet은 Spatial Pyramid 구조를 사용하여 다양한 receptive field의 feature를 사용하는 네트워크입니다. 다양한 receptive field의 feature를 사용하여 성능도 개선할 수 있었죠. 위 그림을 보면 동일한 입력을 4×4, 2×2, 1×1로 압축한 feature를 모두 통합하여 사용하는 모습을 볼 수 있습니다.
2-3-2. Attention 적용하기
두 번째는 Attention을 적용하는 방법입니다. 대표적으로 Squeeze and Excitation, BAM, CBAM 등의 모듈을 들 수 있습니다.
위 그림은 Squeeze and Excitation (SE) 모듈의 동작 방법을 표현한 그림입니다. Squeeze 과정은 입력 정보에 대해 채널별로 정보를 압축 (Squeeze)하는 단계입니다. Excitation 단계는 이렇게 압축된 채널 정보에 대해 채널별 중요도에 따른 가중치를 결정하는 단계입니다. Squeeze와 Excitation 과정에서 채널별 Attention을 학습하게 되는 원리죠. 이렇게 Attention 모듈을 적용하면 다양한 task에서 모델의 성능이 개선되는 것으로 알려져 있습니다.
2-3-3. Feature Integration 적용하기
세 번째는 Feature Integration을 적용하는 방법입니다.
위 그림은 Feature Pyramid Network (FPN)의 동작 방법을 표현한 그림입니다. 왼쪽은 입력 이미지로부터 다양한 레벨의 feature를 추출하는 모습을 나타냅니다. 이렇게 추출된 다양한 레벨의 feature가 오른쪽에서 아래로 내려가며 정보가 통합되는 모습을 볼 수 있습니다. 보통 서로 다른 레벨의 feature에는 서로 다른 종류의 정보가 있다고 알려져 있습니다. 낮은 레벨의 feature에는 noise에 가까운 정보들이, 높은 레벨의 feature에는 함축된 의미의 정보가 포함되어 있다고 알려져 있죠. 어떠한 문제를 풀기 위해 특정 정보만을 사용하는 것보다는 다양한 종류의 정보를 사용하는 게 더 유리할 겁니다. 따라서 FPN과 같이 정보를 통해주면 모델의 성능을 개선할 수 있습니다.
2-3-4. Activation Function 선택하기
네 번째는 적절한 Activation Function을 선택하여 적용하는 방법입니다.
위 그림은 ReLU와 PReLU Activation Function을 비교한 그림입니다. 이 외에도 다양한 Activation Function이 제안되었습니다. 문제 상황과 모델에 따라 적절한 Activation Function을 선택하면 성능을 개선할 수 있음이 알려져 있습니다.
2-3-5. Post Processing 적용하기
다섯 번째는 Post Processing을 적용하는 방법입니다. 이는 말 그대로 object detection 모델의 동작이 끝난 뒤, 결과물을 정제해 주는 과정을 추가해 주는 것을 의미합니다. 가장 대표적으로 Non Maximum Suppression (NMS)를 들 수 있습니다.
위 그림은 NMS을 작동 방식을 표현한 그림입니다. 왼쪽 상단의 입력 이미지에 대해 오른쪽 상단에서 검출한 물체들을 표시하고 있습니다. 오른쪽 하단 이미지는 이렇게 찾은 물체들로부터 서로 다른 물체들을 구분하고 있습니다. 마지막 왼쪽 하단 이미지에서는 겹치는 물체를 제거하여 높은 정확도로 최종 물체별 bounding box를 표시하는 모습을 볼 수 있습니다.
이렇게 object detection 모델의 성능을 개선할 수 있는 ‘공짜가 아닌’ 다섯 가지 방법을 살펴봤습니다. 이러한 방식을 적절하게 사용 하면 object detection 모델의 성능을 개선할 수 있습니다.
3. 제안 방법
지금까지 object detection 성능을 올리기 위한 다양한 일반적인 방법을 살펴봤습니다. YOLO v4에서는 이러한 방법들 외에도 성능 개선을 위한 새로운 방법을 제안합니다. 이번에는 YOLO v4에서 제안하는 성능 개선 방법을 살펴보겠습니다.
3-1. Data augmentation
먼저 YOLO v4에서는 새로운 Data Augmentation 방법을 제안합니다.
첫 번째는 Mosaic이라는 방법입니다.
위 그림은 Mosaic Data Augmentation 방법의 예시를 나타낸 그림입니다. 기존 Data Augmentation 방법들 중 CutMix와 유사하다는 걸 알 수 있습니다. 다만 CutMix는 두 개 이미지를 섞는 방법이고, Mosaic은 네 개 이미지를 섞는다는 차이가 있습니다. Object detection 모델은 이렇게 4개 이미지가 믹스된 하나의 이미지를 입력받아 한 번에 물체를 찾도록 학습합니다. 보통 이미지 각각은 질감과 밝기 등의 일정한 특징을 갖습니다. 그런데 서로 다른 특징을 갖는 이미지를 모아 하나의 입력으로 학습을 하면 모델 입장에서는 다양한 특성을 한 번에 학습할 수 있게 됩니다. 따라서 학습 데이터에 없던 특성의 이미지나 갑자기 특성이 달라지는 이미지 등에 대해서도 더 강건하게 물체를 찾을 수 있게 됩니다.
두 번째는 Self Adversarial Training (SAT)입니다. Adversarial Training이란 의도적으로 데이터를 변형시켜 모델을 더 강건하게 학습하는 방법입니다.
위 그림은 SAT 방법을 표현한 그림입니다. 먼저 1단계에서는 입력 이미지에 대해 Adversarial Attack을 하여 모델이 물체를 인식하지 못하도록 만들어줍니다. 위 그림에서는 강아지, 고양이에 noise를 추가하여 형태를 거의 알아볼 수 없게 만들었습니다. 이렇게 되면 모델 입장에서는 물체가 없다고 판단하게 될 텐데요. 2단계는 이 상태에서 오히려 모델에게 object detection을 학습하는 겁니다. 이렇게 되면 모델 입장에서는 더 어려운 문제를 만들어서 푸는 게 되겠죠. 이러한 학습을 반복하면 모델은 점점 더 어려운 문제를 학습하면서 성능이 좋아지게 됩니다.
3-2. 기존 방법들의 변형
뿐만 아니라 YOLO v4에서는 기존 방법들을 변형하여 적용하기도 합니다.
3-2-1. CBAM
먼저 기존의 Attention Module인 CBAM을 변형하여 적용합니다.
위 그림은 기존의 CBAM과 YOLO v4에서 변형한 CBAM을 비교한 그림입니다.
먼저 위쪽의 CBAM을 보겠습니다. 입력 데이터에 대해 Max Pooling과 Average Pooling을 하여 (w, h,1) 정보로 압축하는 모습을 볼 수 있습니다. 이렇게 나온 (w, h, 1) 사이즈의 값은 Attention Score Map에 해당합니다. 이는 각 위치별로 하나의 값으로 Attention Score를 적용하겠다는 의미이니 Spatial Wise Attention이라고 표현할 수 있습니다.
반면 아래쪽의 변형된 CBAM을 보겠습니다. 이번에는 (w, h, c) 사이즈의 입력 데이터에 대해 동일한 사이즈의 Attention Score Map이 나오는 모습을 볼 수 있습니다. 이는 각 픽셀별로 하나의 Attention Score를 적용하겠다는 의미이니, Pixel Wise Attention이라고 표현할 수 있습니다. YOLO v4에서는 이처럼 CBAM을 변형하여 Pixel Wise Attention을 적용합니다.
3-2-2. PAN
다음은 Path Aggregation Network (PAN)의 변형 버전을 살펴보겠습니다.
위 그림은 PAN과 YOLO v4에서 적용한 변형된 PAN의 모습을 표현한 그림입니다.
먼저 왼쪽의 PAN을 보겠습니다. 서로 다른 Path의 정보가 addition을 통해 합쳐지는(Aggregation) 모습을 볼 수 있습니다.
반면 오른쪽의 변형된 PAN은 addition이 아닌 concatenation을 통해 정보가 합쳐지는 모습입니다. Concatenation은 addition과 달리 기존 정보를 섞지 않고 원형을 유지한다는 특징이 있습니다. YOLO v4에서는 이처럼 addition이 아닌 concatenation을 통해 각 path의 정보를 유지한 채 통합하여 사용합니다.
3-2-3. CmBN
다음은 Cross mini Batch Normalization (CmBN)을 살펴보겠습니다.
위 그림은 Batch Normalization(BN)과 Cross Batch Normalization(CBN), 그리고 YOLO v4에서 사용한 CmBN을 비교 설명한 그림입니다.
먼저 BN을 생각해 보겠습니다. BN은 mini batch 데이터의 mean과 variance를 측정합니다. 그리고 이렇게 측정한 mean과 variance로 mini batch 데이터들을 normalization 하죠. 이때 mean과 variance를 어떻게 조정했을 때 성능이 좋아지는지를 학습합니다. 이렇게 학습하는 파라미터가 𝛾와 𝛽죠.
이 흐름을 기억하고 위 그림의 BN을 보겠습니다. 먼저 BN은 mini batch에 대해 BN을 계산합니다. 따라서 calculate BN(mini batch)라고 표현할 수 있습니다. 그리고는 normalize 합니다. 앞선 mini batch에서 학습한 파라미터로부터 다음 mini batch의 파라미터를 학습합니다. 따라서 accumulate W라고 표현할 수 있습니다.
다음은 CBN을 생각해 보겠습니다. BN과 같이 계산할 때의 단점은 mini batch 사이즈가 작을 때 드러납니다. mini batch 사이즈가 작을 경우 mini batch별 mean과 variance가 크게 차이 나게 됩니다. 이렇게 되면 BN 파라미터를 학습해야 하는 모델 입장에서 값이 크게 왔다 갔다 하게 되겠죠. 따라서 학습이 불안정해집니다.
이를 개선하기 위해 CBN에서는 이전 mini batch의 (mean, variance)를 다음 mini batch의 (mean, variance)와 연결해 줍니다. 테일러급수를 사용하여 이들 값을 완만하게 연결해 주는 것이죠. 따라서 위 그림을 보면 accumulate BN이라고 표현한 모습을 볼 수 있습니다.
YOLO v4에서 사용한 CmBN은 이 둘의 장점을 결합한 방법입니다. CBN과 동일한 방법으로 이전 mini batch의 (mean, variance)를 이번 mini batch의 (mean, variance)와 연결해 줍니다. 따라서 accumulate BN이라고 표현할 수 있죠. 그러고 나서 가중치를 계산할 때는 BN과 마찬가지로 이전에 계산했던 가중치로부터 업데이트하는 방법을 사용합니다. 따라서 accumulate W라고 표현할 수 있습니다.
3-3. YOLO v4
지금까지 object detection 모델의 성능을 개선할 수 있는 다양한 방법들을 살펴봤습니다. 이제 최종적으로 YOLO v4에서 적용한 방법들을 정리해 보겠습니다.
먼저 architecture로는 아래의 방법을 사용했습니다.
- Backbone : CSPDarknet53
- Neck : SPP, PAN
- Head: YOLO v3
Backbone에 적용한 Bag of Freebies는 다음과 같습니다.
- CutMix and Mosaic data augmentation
- Dropblock regularization
- Class label smoothing
Backbone에 적용한 Bag of Specials는 다음과 같습니다.
- Mish activation
- Cross-stage partial connections(CSP)
- Multi-input weighted residual connections(MiWRC)
Detector에 적용한 Bag of Freebies는 다음과 같습니다.
- CIoU-loss
- CmBN
- DropBlock regularization
- Mosaic data augmentation
- Self-Adversarial Training
- Eliminate grid sensitivity
- Using multiple anchors for a single ground truth
- Cosine annealing scheduler
- Optimal hyperparameters
- Random training shapes
Detector에 적용한 Bag of Specials는 다음과 같습니다.
- Mish activation
- SPP-block
- SAM-block
- PAN path-aggregation block
- DIoU-NMS
4. 성능
이렇게 구현한 YOLO v4의 성능을 살펴보겠습니다.
위 그림은 MS COCO 데이터셋에 대한 YOLO v4와 기존 방법들의 성능을 비교한 그래프입니다. YOLO v4는 기존 방법들보다 빠르고 성능이 좋은 모습을 볼 수 있습니다.
5. 결론
지금까지 YOLO 네 번째 시리즈인 YOLO v4 논문을 살펴봤습니다. YOLO v4는 기존 object detection 연구들에서 제안된 다양한 아이디어를 정리하고 적용한 논문입니다. 이를 통해 기존 YOLO의 성능을 한 단계 업그레이드할 수 있었습니다. 하지만 기존에 제안되었던 아이디어 외에 새롭게 제안한 아이디어는 적다는 한계를 갖습니다.
6. 참고자료
- Lin, Tsung-Yi, et al. “Feature pyramid networks for object detection.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.
- Liu, Shu, et al. “Path aggregation network for instance segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
- Chen, Ting, et al. “A simple framework for contrastive learning of visual representations.” International conference on machine learning. PMLR, 2020.
- DeVries, Terrance, and Graham W. Taylor. “Improved regularization of convolutional neural networks with cutout.” arXiv preprint arXiv:1708.04552 (2017).
- Zhong, Zhun, et al. “Random erasing data augmentation.” Proceedings of the AAAI conference on artificial intelligence. Vol. 34. No. 07. 2020.
- Srivastava, Nitish, et al. “Dropout: a simple way to prevent neural networks from overfitting.” The journal of machine learning research 15.1 (2014): 1929-1958.
- Yun, Sangdoo, et al. “Cutmix: Regularization strategy to train strong classifiers with localizable features.” Proceedings of the IEEE/CVF international conference on computer vision. 2019.
- Geirhos, Robert, et al. “ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness.” arXiv preprint arXiv:1811.12231 (2018).
- Shen, Zhiqiang, et al. “Is label smoothing truly incompatible with knowledge distillation: An empirical study.” arXiv preprint arXiv:2104.00676 (2021).
- Yu, Jiahui, et al. “Unitbox: An advanced object detection network.” Proceedings of the 24th ACM international conference on Multimedia. 2016.
- He, Kaiming, et al. “Spatial pyramid pooling in deep convolutional networks for visual recognition.” IEEE transactions on pattern analysis and machine intelligence 37.9 (2015): 1904-1916.
- Hu, Jie, Li Shen, and Gang Sun. “Squeeze-and-excitation networks.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
- He, Kaiming, et al. “Delving deep into rectifiers: Surpassing human-level performance on imagenet classification.” Proceedings of the IEEE international conference on computer vision. 2015.
- Bodla, Navaneeth, et al. “Soft-NMS–improving object detection with one line of code.” Proceedings of the IEEE international conference on computer vision. 2017.