0. Abstract
CNN의 정확도를 향상시키는 다양한 기능이 많이 존재합니다. 이러한 기능들의 조합을 대규모 데이터셋에서 실제로 테스트하고 결과를 이론적으로 정당화하는 것이 필요합니다. 일부 기능은 특정 모델이나 문제에만 적용되거나 소규모 데이터셋에만 적용될 수 있습니다. 그러나 배치 정규화(batch-normalization)와 잔차 연결(residual-connections)과 같은 기능은 대부분의 모델, 작업 및 데이터셋에 적용할 수 있습니다. 저희는 가중 잔차 연결(Weighted-Residual-Connections, WRC), 크로스 스테이지 부분 연결(Cross-Stage-Partial-connections, CSP), 크로스 미니 배치 정규화(Cross mini-Batch Normalization, CmBN), 자가 적대적 훈련(Self-adversarial-training, SAT) 및 Mish 활성화(Mish-activation)와 같은 범용적인 기능들이 있다고 가정합니다. 저희는 WRC, CSP, CmBN, SAT, Mish 활성화, Mosaic 데이터 증강(Mosaic data augmentation), CmBN, DropBlock 정규화(DropBlock regularization) 및 CIoU 손실(CIoU loss)과 같은 새로운 기능들을 사용하고 이를 조합하여 최첨단 결과를 달성했습니다. MS COCO 데이터셋에서 실시간 속도인 약 65 FPS에서 43.5% AP(65.7% AP50)의 결과를 얻었습니다. 소스 코드는 아래에서 확인하실 수 있습니다.
1. Introduction

Figure 1: 제안된 YOLOv4와 다른 최첨단 객체 탐지기의 비교. YOLOv4는 비슷한 성능을 가진 EfficientDet보다 2배 더 빠르게 실행됩니다. YOLOv3의 AP와 FPS를 각각 10%와 12% 향상시킵니다.

서론 대부분의 CNN 기반 객체 탐지기는 주로 추천 시스템에만 적용될 수 있습니다. 예를 들어, 도시 비디오 카메라를 통해 무료 주차 공간을 탐색하는 경우, 느리고 정확한 모델을 사용하며, 자동차 충돌 경고는 빠르지만 정확하지 않은 모델과 관련이 있습니다. 실시간 객체 탐지기의 정확도를 향상시킴으로써, 힌트 생성 추천 시스템 뿐만 아니라 독립적인 프로세스 관리와 인간의 입력을 줄일 수 있는 용도로 사용할 수 있습니다. 기존의 그래픽 처리 장치(GPU)에서 실시간 객체 탐지기를 실행함으로써, 저렴한 가격에 대규모 사용이 가능해집니다. 가장 정확한 최신 신경망은 실시간으로 작동하지 않으며, 대규모 미니배치 크기로 학습을 위해 많은 수의 GPU가 필요합니다. 우리는 기존 GPU에서 실시간으로 작동하는 CNN을 생성하고, 학습에는 단 하나의 기존 GPU만 필요한 방식으로 이러한 문제에 대처합니다.
이 작업의 주요 목표는 생산 시스템에서 객체 탐지기의 빠른 운영 속도와 병렬 계산을 위한 최적화입니다. 이론적 지표인 계산량 (BFLOP)보다는 낮은 계산량을 갖는 것보다는, 설계된 객체 탐지기가 쉽게 훈련 및 사용될 수 있는 것을 희망합니다. 예를 들어, 일반적인 GPU를 사용하여 훈련 및 테스트하는 사용자는 Figure 1에 나와 있는 YOLOv4 결과와 같이 실시간으로 고품질이고 설득력있는 객체 탐지 결과를 얻을 수 있습니다. 우리의 기여는 다음과 같이 요약됩니다:
- 우리는 효율적이고 강력한 객체 탐지 모델을 개발했습니다. 이 모델은 누구나 1080 Ti 또는 2080 Ti GPU를 사용하여 빠르고 정확한 객체 탐지기를 훈련할 수 있게 합니다.
- 우리는 객체 탐지기 훈련 중 최신 Bag-of-Freebies와 Bag-of-Specials 기법의 영향을 확인했습니다.
- 우리는 최신 기법들을 수정하여 단일 GPU 훈련에 더 효율적이고 적합하도록 만들었습니다. 이에는 CBN [89], PAN [49], SAM [85] 등이 포함됩니다.

2. Related Work
2.1 객체 탐지 모델 현대적인 객체 탐지기는 일반적으로 두 부분으로 구성됩니다. 하나는 ImageNet에서 사전 훈련된 백본(backbone)이고, 다른 하나는 객체의 클래스와 경계 상자를 예측하는 데 사용되는 헤드(head)입니다. GPU 플랫폼에서 실행되는 객체 탐지기의 백본은 VGG [68], ResNet [26], ResNeXt [86], DenseNet [30] 등이 될 수 있습니다. CPU 플랫폼에서 실행되는 객체 탐지기의 백본은 SqueezeNet [31], MobileNet [28, 66, 27, 74], ShuffleNet [97, 53] 등이 될 수 있습니다.
헤드 부분은 일반적으로 한 단계(object detector)와 두 단계(object detector)로 분류됩니다. 가장 대표적인 두 단계 객체 탐지기는 R-CNN [19] 시리즈로, fast R-CNN [18], faster R-CNN [64], R-FCN [9], Libra R-CNN [58] 등이 있습니다. 또한, 두 단계 객체 탐지기를 앵커 없는 객체 탐지기로 만들 수도 있으며, 이에는 RepPoints [87] 등이 있습니다. 한 단계 객체 탐지기로는 YOLO [61, 62, 63], SSD [50], RetinaNet [45] 등이 가장 대표적인 모델입니다. 최근 몇 년간 앵커 없는 한 단계 객체 탐지기도 개발되었습니다. 이러한 유형의 탐지기에는 CenterNet [13], CornerNet [37, 38], FCOS [78] 등이 있습니다.
최근 몇 년간 개발된 객체 탐지기는 백본과 헤드 사이에 몇 개의 레이어를 삽입하며, 이러한 레이어는 일반적으로 다른 단계에서 특징 맵을 수집하는 데 사용됩니다. 이를 객체 탐지기의 "넥(neck)"이라고 할 수 있습니다.
일반적으로 넥은 여러 개의 Bottom-up 경로와 Top-down 경로로 구성됩니다. 이러한 메커니즘을 갖춘 네트워크에는 Feature Pyramid Network (FPN) [44], Path Aggregation Network (PAN) [49], BiFPN [77], NAS-FPN [17] 등이 있습니다.
위에서 언급된 모델들 외에도, 일부 연구자들은 객체 탐지를 위해 새로운 백본(DetNet [43], DetNAS [7])이나 전체 모델(SpineNet [12], HitDetector [20])을 직접 구축하는 데 중점을 두고 있습니다.
요약하자면, 일반적인 객체 탐지기는 다음과 같은 여러 구성 요소로 이루어져 있습니다:
- 백본 (Backbone): 백본은 객체 탐지기의 특징 추출 구성 요소로, 일반적으로 ImageNet과 같은 대규모 이미지 분류 작업에서 사전 훈련됩니다. VGG, ResNet, ResNeXt, DenseNet, SqueezeNet, MobileNet, ShuffleNet 등의 기존 백본 네트워크일 수도 있고, DetNet이나 SpineNet과 같이 새롭게 설계된 백본일 수도 있습니다.
- 넥 (Neck): 넥은 백본과 헤드 사이에 삽입되는 중간 계층을 말합니다. 이 계층은 서로 다른 스케일이나 추상화 수준에서 추출된 특징을 결합하여 탐지 성능을 향상시킵니다. FPN(Feature Pyramid Network), PAN(Path Aggregation Network), BiFPN, NAS-FPN과 같은 넥 구조의 예가 있습니다.
- 헤드 (Head): 헤드는 객체의 클래스와 경계 상자를 예측하는 역할을 하는 부분입니다. 백본에서 추출한 특징을 넥에서 처리한 후, 헤드에서 분류 및 회귀 작업을 수행합니다. 객체 탐지 헤드에는 주로 원단계(detector)와 이단계(detector)의 두 가지 유형이 있습니다. 원단계 탐지기(YOLO, SSD, RetinaNet)와 이단계 탐지기(R-CNN 시리즈)가 대표적인 예입니다. 각 유형은 자체적인 특징과 장단점을 가지고 있습니다.
2.2. Bag of freebies
정확도 향상을 위한 추가 모듈 기법 및 후처리 방
위에서 언급한 데이터 증강 방법은 모두 픽셀 단위의 조정이며, 조정된 영역에서 원래의 픽셀 정보를 모두 보존합니다.
또한, 일부 데이터 증강을 연구하는 연구자들은 객체 가림 현상을 모사하는 데 중점을 두고 있습니다. 그들은 이미지 분류와 객체 탐지에서 좋은 결과를 얻었습니다. 예를 들어, random erase [100]와 CutOut [11]는 이미지에서 사각형 영역을 무작위로 선택하고 무작위 또는 보완 값으로 채우는 것입니다. hide-and-seek [69]와 grid mask [6]의 경우, 이미지에서 무작위로 또는 균일하게 여러 개의 사각형 영역을 선택하고 이를 모두 0으로 대체합니다. 특징 맵에 유사한 개념을 적용한다면 DropOut [71], DropConnect [80], DropBlock [16] 방법이 있습니다. 또한, 일부 연구자들은 여러 이미지를 함께 사용하여 데이터 증강을 수행하는 방법을 제안했습니다. 예를 들어, MixUp [92]는 두 개의 이미지를 서로 다른 계수 비율로 곱하고 겹쳐서 조정된 레이블을 사용합니다. CutMix [91]는 잘린 이미지를 다른 이미지의 직사각형 영역으로 덮어씌우고 혼합 영역의 크기에 따라 레이블을 조정합니다. 위에서 언급한 방법들 외에도, 스타일 전이 GAN [15]도 데이터 증강에 사용되며, 이러한 사용법은 CNN이 학습한 질감 편향을 효과적으로 줄일 수 있습니다.
위에서 제안된 다양한 방법과는 다르게, 다른 일부 bag of freebies 방법들은 데이터셋의 의미 분포에 편향이 있을 수 있는 문제를 해결하기 위해 특화되어 있습니다. 의미 분포 편향 문제를 다룰 때 매우 중요한 문제는 서로 다른 클래스 간에 데이터 불균형 문제가 있는데, 이 문제는 일부 연구자들에 의해 해결되었습니다. 예를 들어, two-stage 객체 탐지기에서는 어려운 부정 예제 마이닝 [72]이나 온라인 어려운 예제 마이닝 [67]을 통해 이 문제를 해결합니다. 그러나 이러한 예제 마이닝 방법은 one-stage 객체 탐지기에는 적용할 수 없습니다. 왜냐하면 이러한 탐지기는 밀집 예측 아키텍처에 속하기 때문입니다. 따라서 Lin et al. [45]은 다양한 클래스 간의 데이터 불균형 문제를 다루기 위해 포컬 로스를 제안했습니다. 또 다른 매우 중요한 문제는 서로 다른 카테고리 간의 연관성 정도를 원-핫 하드 표현으로 표현하는 것이 어렵다는 것입니다. 이러한 표현 체계는 라벨링을 실행할 때 자주 사용됩니다. [73]에서 제안된 라벨 스무딩은 훈련을 위해 하드 라벨을 소프트 라벨로 변환하여 모델을 더 견고하게 만드는 방법입니다. 더 좋은 소프트 라벨을 얻기 위해, Islam et al. [33]은 지식 증류의 개념을 도입하여 라벨 리파인먼트 네트워크를 설계했습니다.
마지막으로 소개할 bag of freebies는 바운딩 박스(BBox) 회귀의 목적 함수입니다. 전통적인 객체 탐지기는 일반적으로 BBox의 중심점 좌표와 높이, 너비, 즉 {xcenter, ycenter, w, h} 또는 좌상단 점과 우하단 점, 즉 {xtop lef t, ytop lef t, xbottom right, ybottom right}에 대해 평균 제곱 오차(Mean Square Error, MSE)를 직접적으로 회귀에 사용합니다. 앵커 기반 방법의 경우, 해당 오프셋을 추정하는 것입니다. 예를 들어, {xcenter of f set, ycenter of f set, wof f set, hof f set} 및 {xtop lef t of f set, ytop lef t of f set, xbottom right of f set, ybottom right of f set}입니다. 그러나 BBox의 각 점의 좌표 값을 직접적으로 추정하는 것은 이러한 점들을 독립 변수로 취급하는 것이며, 사실 객체 자체의 완전성을 고려하지 않습니다.
이 문제를 더 잘 처리하기 위해 최근 일부 연구자들은 IoU loss [90]를 제안했습니다. 이는 예측된 BBox 영역과 실제 BBox 영역의 커버리지를 고려합니다. IoU loss 계산 과정에서는 예측된 BBox와 실제 값과의 IoU를 실행하여 BBox의 네 개의 좌표를 계산한 다음 생성된 결과를 연결합니다. IoU는 스케일 불변 표현이므로 전통적인 방법이 {x, y, w, h}의 l1 또는 l2 손실을 계산할 때 스케일과 함께 손실이 증가하는 문제를 해결할 수 있습니다. 최근 일부 연구자들은 IoU loss를 개선하기 위해 계속 노력하고 있습니다.
예를 들어, GIoU loss [65]는 커버리지 영역 외에도 객체의 형태와 방향을 고려합니다. 예측된 BBox와 실제 BBox를 동시에 커버할 수 있는 가장 작은 영역의 BBox를 찾아 이를 분모로 사용하여 기존의 IoU loss에서 사용되던 분모를 대체합니다. DIoU loss [99]는 객체의 중심점까지의 거리를 추가로 고려하며, CIoU loss [99]는 겹치는 영역, 중심점 사이의 거리, 종횡비를 동시에 고려합니다. CIoU는 BBox 회귀 문제에서 더 나은 수렴 속도와 정확도를 달성할 수 있습니다.
2.3. 특수 기법(Bag of specials)
정확도 향상을 위한 추가 모듈 기법 및 후처리 방법
추론 비용을 크게 증가시키지 않으면서 객체 탐지의 정확도를 크게 향상시킬 수 있는 플러그인 모듈 및 후처리 방법들을 "특수 기법(Bag of specials)"이라고 부릅니다. 일반적으로 이러한 플러그인 모듈은 모델 내에서 특정 속성을 강화하기 위해 사용되며, 이는 수용 영역 확장, 어텐션 메커니즘 도입, 특징 통합 능력 강화 등을 포함할 수 있습니다. 후처리는 모델 예측 결과를 필터링하는 방법입니다.
반응 영역을 향상시킬 수 있는 일반적인 모듈로는 SPP (Spatial Pyramid Pooling) [25], ASPP (Atrous Spatial Pyramid Pooling) [5], 그리고 RFB (Receptive Field Block) [47] 등이 있습니다.
SPP 모듈은 Spatial Pyramid Matching (SPM) [39]에서 기원한 것으로, SPM의 원래 방법은 특성 맵을 d × d 크기의 동일한 블록으로 나눈 다음 공간 피라미드를 형성하고 단어 가방 특징을 추출하는 것이었습니다. SPP는 SPM을 CNN에 통합하고 단어 가방 연산 대신 최대 풀링 연산을 사용합니다. He 등이 제안한 SPP 모듈은 1차원 특성 벡터를 출력하므로 Fully Convolutional Network (FCN)에 적용하기 어렵습니다. 따라서 YOLOv3 [63]의 설계에서 Redmon과 Farhadi는 SPP 모듈을 향상시켜 커널 크기 k × k (여기서 k = {1, 5, 9, 13})와 스트라이드 1인 최대 풀링 출력의 연결로 변경했습니다. 이 설계를 통해 상대적으로 큰 k × k 최대 풀링이 백본 특성의 반응 영역을 효과적으로 증가시킵니다. 개선된 SPP 모듈을 추가한 후에는 YOLOv3-608에서 MS COCO 객체 감지 작업의 AP50가 0.5% 추가 계산 비용으로 2.7% 향상되었습니다.
ASPP 모듈 [5]과 개선된 SPP 모듈 간의 작동 차이는 주로 원래의 k × k 커널 크기, 스트라이드 1의 최대 풀링에서 여러 3 × 3 커널 크기, 확장 비율 k, 스트라이드 1의 확장 컨볼루션 연산으로 이루어집니다. RFB 모듈은 ASPP보다 더 포괄적인 공간 커버리지를 얻기 위해 k × k 커널의 여러 확장 컨볼루션을 사용합니다. RFB [47]은 MS COCO에서 SSD의 AP50를 5.7% 향상시키기 위해 추가로 추론 시간이 7%만 소요됩니다.
객체 감지에서 자주 사용되는 어텐션 모듈은 주로 채널별 어텐션(Channel-wise Attention)과 점별 어텐션(Point-wise Attention)으로 나뉩니다. 이 두 어텐션 모델의 대표적인 예는 Squeeze-and-Excitation (SE) [29]과 Spatial Attention Module (SAM) [85]입니다. SE 모듈은 ImageNet 이미지 분류 작업에서 ResNet50의 성능을 향상시킬 수 있으며 계산 비용을 2%만 증가시킴으로써 1% top-1 정확도를 얻을 수 있습니다. 그러나 GPU에서는 보통 추론 시간이 약 10% 증가하므로 모바일 기기에서 사용하기에 더 적합합니다. 반면, SAM은 추가적인 계산 비용으로 0.1%만 필요하며 ImageNet 이미지 분류 작업에서 ResNet50-SE의 0.5% top-1 정확도를 향상시킬 수 있습니다. 무엇보다도, 이는 GPU에서 추론 속도에 전혀 영향을 미치지 않습니다.
특성 통합 측면에서, 초기의 방법은 스킵 연결(Skip Connection) [51]이나 하이퍼-컬럼(Hyper-column) [22]을 사용하여 저수준의 물리적 특성을 고수준의 의미론적 특성에 통합하는 것이었습니다. 그러나 FPN과 같은 다중 스케일 예측 방법이 인기를 얻으면서, 다양한 피라미드 특성을 통합하기 위한 가벼운 모듈들이 제안되었습니다. 이러한 모듈들에는 SFAM [98], ASFF [48], 그리고 BiFPN [77] 등이 포함됩니다. SFAM의 주요 아이디어는 SE 모듈을 사용하여 다중 스케일로 연결된 특성 맵에 채널별 레벨 가중치를 적용하는 것입니다. ASFF는 소프트맥스를 사용하여 점별 레벨 가중치를 적용하고 다른 스케일의 특성 맵을 더합니다. BiFPN은 다중 입력 가중 잔차 연결을 제안하여 스케일별 레벨 가중치를 적용하고 다른 스케일의 특성 맵을 더합니다.
딥러닝 연구에서는 일부 연구자들이 좋은 활성화 함수를 탐색하는 데 중점을 두고 있습니다. 좋은 활성화 함수는 기울기를 효율적으로 전파할 수 있으면서도 추가적인 계산 비용을 최소화해야 합니다. 2010년에 Nair와 Hinton [56]은 기존의 tanh나 sigmoid와 같은 활성화 함수에서 자주 발생하는 기울기 소실 문제를 실질적으로 해결하기 위해 ReLU를 제안했습니다. 이후 LReLU [54], PReLU [24], ReLU6 [28], SELU [35], Swish [59], hard-Swish [27], Mish [55] 등의 활성화 함수들이 기울기 소실 문제를 해결하기 위해 제안되었습니다.
LReLU와 PReLU는 ReLU의 출력이 음수일 때 기울기가 0이 되는 문제를 해결하기 위해 고안되었습니다. ReLU6와 hard-Swish는 양자화 네트워크를 위해 특별히 설계된 함수입니다. SELU 활성화 함수는 신경망의 자기 정규화를 위해 제안되었습니다. Swish와 Mish는 연속적으로 미분 가능한 활성화 함수입니다.
딥러닝 기반 객체 검출에서 일반적으로 사용되는 후처리 방법은 NMS(비최대 억제)입니다. NMS는 동일한 객체를 잘못 예측하는 BBox를 걸러내고 높은 응답을 가진 후보 BBox만을 보존하는 데 사용될 수 있습니다. NMS가 개선을 시도하는 방법은 목적 함수를 최적화하는 방법과 일치합니다. NMS가 처음 제안한 방법은 문맥 정보를 고려하지 않았으므로 Girshick 등 [19]은 R-CNN의 분류 신뢰 점수를 참조로 추가하여 신뢰 점수의 순서에 따라 높은 점수부터 낮은 점수까지 탐욕적인 NMS를 수행하였습니다. Soft NMS [1]의 경우, 객체의 가림 현상이 IoU 점수를 사용한 탐욕적인 NMS에서 신뢰 점수의 저하를 초래할 수 있는 문제를 고려합니다. DIoU NMS [99] 개발자는 Soft NMS를 기반으로 BBox 스크리닝 과정에 중심점 거리 정보를 추가하는 방식으로 개선하였습니다. 언급할 만한 점은 위의 후처리 방법들은 캡처된 이미지 특성을 직접 참조하지 않으므로, 후속적인 앵커-프리(Anchor-Free) 방법의 개발에서는 후처리가 더 이상 필요하지 않습니다.
3. Methodology
신경망의 기본 목표는 생산 시스템에서의 빠른 운영 속도와 병렬 계산을 위한 최적화이며, 이론적인 계산량 (BFLOP)보다는 실제적인 지표를 사용합니다. 우리는 실시간 신경망의 두 가지 옵션을 제시합니다: • GPU를 위해 합성곱 레이어에서 소수의 그룹 (1-8)을 사용합니다: CSPResNeXt50 / CSPDarknet53 • VPU를 위해 그룹화된 합성곱을 사용하지만 Squeeze-and-Excitation (SE) 블록은 사용하지 않습니다. 구체적으로 다음 모델들이 이에 해당합니다: EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
3.1. 아키텍처 선택 우리의 목표는 입력 신경망 해상도, 합성곱 레이어 수, 매개 변수 수 (filter size2 * filters * channel / groups) 및 레이어 출력 수 (filters) 사이에서 최적의 균형을 찾는 것입니다. 예를 들어, 우리의 다양한 연구 결과는 ILSVRC2012 (ImageNet) 데이터셋 [10]에서 객체 분류 측면에서 CSPResNext50이 CSPDarknet53보다 훨씬 우수함을 보여줍니다. 그러나 반대로, MS COCO 데이터셋 [46]에서 객체 감지 측면에서는 CSPDarknet53이 CSPResNext50보다 우수합니다.
다음 목표는 수용 영역을 확장하기 위해 추가적인 블록을 선택하고, 다른 백본 레벨의 매개 변수 집계를 위한 최상의 방법을 선택하는 것입니다. 예를 들어 FPN, PAN, ASFF, BiFPN 등입니다.
분류에 최적인 참조 모델이 항상 감지에 최적이지는 않습니다. 분류기와는 달리 감지기는 다음을 필요로 합니다: • 더 높은 입력 네트워크 크기 (해상도) - 작은 크기의 다중 객체를 감지하기 위해 • 더 많은 레이어 - 증가된 입력 네트워크 크기를 커버하기 위한 더 큰 수용 영역 • 더 많은 매개 변수 - 하나의 이미지에서 다양한 크기의 여러 객체를 감지하기 위한 모델의 용량 증가
가설적으로 말하자면, 수용 영역 크기가 더 큰 모델(더 많은 3 × 3 합성곱 레이어를 가진)과 더 많은 매개 변수를 가진 모델이 백본으로 선택되어야 한다고 가정할 수 있습니다. 표 1은 CSPResNeXt50, CSPDarknet53 및 EfficientNet B3의 정보를 보여줍니다. CSPResNext50은 16개의 3 × 3 합성곱 레이어, 425 × 425 수용 영역 및 20.6M 매개 변수만을 포함하며, CSPDarknet53은 29개의 3 × 3 합성곱 레이어, 725 × 725 수용 영역 및 27.6M 매개 변수를 포함합니다. 이론적인 근거와 우리의 다양한 실험들과 함께, CSPDarknet53 신경망이 감지기의 백본으로서 두 모델 중에서 최적의 모델임을 보여줍니다.
다양한 크기의 수용 영역의 영향은 다음과 같이 요약됩니다: • 객체 크기까지 - 전체 객체를 볼 수 있게 합니다. • 네트워크 크기까지 - 객체 주변의 컨텍스트를 볼 수 있게 합니다. • 네트워크 크기를 초과 - 이미지 점과 최종 활성화 사이의 연결 수를 증가시킵니다.
우리는 CSPDarknet53에 SPP 블록을 추가합니다. 이는 수용 영역을 크게 증가시키고 가장 중요한 컨텍스트 특징을 분리하여 네트워크 작동 속도를 거의 감소시키지 않는다는 이점이 있습니다. 우리는 YOLOv3에서 사용된 FPN 대신에 다른 백본 레벨로부터의 매개 변수 통합 방법인 PANet을 사용합니다.
마지막으로, 우리는 YOLOv4의 아키텍처로 CSPDarknet53 백본, SPP 추가 모듈, PANet 경로 집계 넥, YOLOv3 (앵커 기반) 헤드를 선택합니다.
앞으로 우리는 감지기를 위한 Bag of Freebies (BoF)의 내용을 크게 확장할 계획이며, 이론적으로 일부 문제를 해결하고 감지기의 정확도를 향상시킬 수 있도록 각 특징의 영향을 실험적으로 순차적으로 확인할 것입니다.
우리는 Cross-GPU Batch Normalization (CGBN 또는 SyncBN) 또는 고가의 전용 장치를 사용하지 않습니다. 이로써 누구나 일반적인 그래픽 프로세서인 GTX 1080Ti 또는 RTX 2080Ti에서 우리의 최첨단 결과를 재현할 수 있습니다.
3.2. Selection of BoF and BoS
감지기 학습을 개선하기 위해 CNN은 일반적으로 다음과 같은 기법을 사용합니다:
- 활성화 함수: ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, 또는 Mish
- Bounding box 회귀 손실: MSE, IoU, GIoU, CIoU, DIoU
- 데이터 증강: CutOut, MixUp, CutMix
- 정규화 방법: DropOut, DropPath, Spatial DropOut, 또는 DropBlock
- 네트워크 활성화 정규화: Batch Normalization (BN), Cross-GPU Batch Normalization (CGBN 또는 SyncBN), Filter Response Normalization (FRN), 또는 Cross-Iteration Batch Normalization (CBN)
- 스킵-커넥션: 잔차 연결, 가중 잔차 연결, 다중 입력 가중 잔차 연결, 또는 Cross stage 부분 연결 (CSP)
학습 활성화 함수의 경우, PReLU와 SELU는 학습이 더 어렵기 때문에 후보 목록에서 제외합니다. 또한 ReLU6은 양자화 네트워크를 위해 특별히 설계된 함수이므로 제외합니다. 정규화 방법의 선택에서는 DropBlock이 다른 방법들과 자세히 비교되었고, 그 방법이 많은 성과를 얻었기 때문에 우리는 주저하지 않고 DropBlock을 정규화 방법으로 선택합니다. 정규화 방법의 선택에서는 하나의 GPU만 사용하는 학습 전략에 초점을 맞추고 있기 때문에 syncBN은 고려되지 않습니다.
3.3. Additional improvements
단일 GPU에서 학습에 더 적합한 디자인 감지기를 만들기 위해 다음과 같이 추가적인 설계와 개선을 수행했습니다:
- Mosaic 및 Self-Adversarial Training (SAT)과 같은 새로운 데이터 증강 방법을 도입했습니다.
- 유전 알고리즘을 적용하면서 최적의 하이퍼파라미터를 선택했습니다.
- 기존의 일부 방법을 수정하여 효율적인 학습과 감지를 위해 적합하도록 개선했습니다 - 수정된 SAM, 수정된 PAN 및 Cross mini-Batch Normalization (CmBN).

Mosaic은 4개의 학습 이미지를 혼합하는 새로운 데이터 증강 방법을 나타냅니다. 따라서 4개의 다른 문맥이 혼합되며, CutMix는 입력 이미지를 2개만 혼합합니다. 이를 통해 정상적인 문맥 밖의 객체를 감지할 수 있습니다. 또한, 배치 정규화는 각 레이어에서 4개의 다른 이미지로부터 활성화 통계를 계산합니다. 이는 대용량 미니배치 크기의 필요성을 크게 줄입니다.
Self-Adversarial Training (SAT)은 또한 2단계의 전진-후진 단계로 작동하는 새로운 데이터 증강 기술을 나타냅니다. 1단계에서 신경망은 네트워크 가중치 대신 원본 이미지를 변경합니다. 이렇게 하면 신경망은 자체적으로 적대적 공격을 수행하여 원본 이미지를 변경하여 원하는 객체가 이미지에 없는 것처럼 속일 수 있습니다. 2단계에서는 신경망이 수정된 이미지에서 정상적인 방식으로 객체를 감지하도록 훈련됩니다.

CmBN은 Figure 4에 나와 있는 것처럼 수정된 CBN(Cross mini-Batch Normalization)의 버전을 나타냅니다. 이는 단일 배치 내의 미니 배치 간에만 통계를 수집합니다.
우리는 SAM을 공간 방식 주의(Spatial-wise Attention)에서 점별 방식 주의(Pointwise Attention)로 수정하고, PAN의 shortcut 연결을 Figure 5와 Figure 6에 나와 있는 것처럼 연결(concatenation)로 대체합니다.

3.4. YOLOv4
YOLOv4는 다음과 같은 구성으로 이루어져 있습니다: • Backbone: CSPDarknet53 [81] • Neck: SPP [25], PAN [49] • Head: YOLOv3 [63]
YOLOv4는 다음과 같은 요소들을 사용합니다: • Backbone에 대한 Bag of Freebies (BoF): CutMix와 Mosaic 데이터 증강, DropBlock 정규화, 클래스 라벨 스무딩 • Backbone에 대한 Bag of Specials (BoS): Mish 활성화 함수, Cross-stage partial connections (CSP), Multiinput weighted residual connections (MiWRC) • Detector에 대한 Bag of Freebies (BoF): CIoU-loss, CmBN, DropBlock 정규화, Mosaic 데이터 증강, Self-Adversarial Training, 그리드 민감도 제거, 단일 ground truth에 대한 여러 앵커 사용, 코사인 앤닐링 스케줄러 [52], 최적의 하이퍼파라미터, 무작위 훈련 형태 • Detector에 대한 Bag of Specials (BoS): Mish 활성화 함수, SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS
즉, YOLOv4는 CSPDarknet53를 기반으로 하고, SPP와 PAN을 이용한 넥(neck) 구조, 그리고 YOLOv3를 이용한 헤드(head)를 가지고 있습니다. BoF와 BoS를 통해 backbone과 detector의 다양한 개선 기법과 요소들을 적용하여 성능을 향상시키고 있습니다.
4. Experiments
우리는 다양한 훈련 개선 기술이 ImageNet (ILSVRC 2012 val) 데이터셋에서 분류기의 정확도에 미치는 영향을 테스트하였으며, 그 다음 MS COCO (test-dev 2017) 데이터셋에서 탐지기의 정확도에 미치는 영향을 테스트하였습니다.
1. Intro
<YOLOv4에서 적용한 기법>
- WRC (Weighted-Residual-Connections)
- CSP (Cross-Stage-Partial-Connections)
- CmBN (Cross mini-Batch Normalizations)
- SAT (Self-Adversarial-Training)
- Mish Activation
- Mosaic Data Agumentation
- Drop Block Regularization
- CIOU Loss
- 최신 Neural Networks들은 높은 정확도를 가지지만, 낮은 FPS(실시간 X)와 너무나 큰 mini-batch-size로 인해 학습하는데 많은 수의 GPU들이 필요하다는 단점이 존재.

- OLO v4는 EfficientDet과 비슷한 AP 성능을 내면서도 2배 더 빠른 FPS를 보유.
- YOLO v3에 비해서 AP는 10%, FPS는 12% 향상됨
2. Related Work
2.1 Object detection models

- 현대의 Detector의 경우 pre-trained된 1. Backbone과, class와 bounding box를 예측하는 2. head로 구성됨
- 최근 몇 년 간 개발된 Detector는 Backbone과 Head 사이에 몇 개의 layer를 삽입함으로써 일반적으로 다른 단계에서 feature map을 수집하는데 사용됨. 이를 ‘Neck’이라고 표현
1. Backbone
- detector가 GPU or CPU에 따라 backbone을 구분함
1.1 GPU
→ VGG [68], ResNet [26], ResNeXt [86], DenseNet [30]
1.2 CPU
→ SqueezeNet [31], MobileNet [28, 66, 27, 74], ShuffleNet [97, 53]
2. Head
- head 부분의 경우 One-stage와 Two-stage로 나뉨
2.1 Two-stage
- two-stage detector는 다시 anchor-based detector와 anchor-free detector로 나뉘어짐
2.1.1 Anchor-based Two-stage detector
→ R-CNN 시리즈로, fast R-CNN, faster R-CNN, R-FCN, Libra R-CNN 등이 존재


- Fast R-CNN: 단일 이미지를 CNN에 입력하여 RoI(Region of Interest)를 얻은 후 RoI pooling을 통해 고정된 크기의 feature vector를 fc layer에 전달하여 R-CNN에 비해 학습 및 추론 속도이 향상된 모델
- Faster R-CNN: RPN(Region Proposal Network)을 추가하여 모델의 동작 과정에서 발생하는 병목 현상을 최소화하여 Fast R-CNN에 비해 학습 및 추론 속도, 정확도가 향상된 모델
Libra R-CNN: classification 과 regression loss 에 대한 balance 를 생각한 모델
- IoU-based sampling, Balanced Feature Pyramid, Balanced L1 loss를 도입하여 객체 탐지 모델 학습 시 발생하는 imbalance 문제를 완화한 모델
2.1.2 Anchor-free Two-stage detector
→ RepPoints가 대표적임

- RepPoints: deformable convolution을 활용하여 객체의 둘레에 점을 찍어 얻은 reppoints를 기반으로 anchor 없이 객체 탐지를 수행하는 모델
2.2 One-stage
2.1.3 Anchor-based One-stage detector
→ YOLO, SSD, RetinaNet등이 대표적
- YOLO : 하나의 통합된 네트워크를 기반으로 classification과 localization을 동시에 수행하여 빠른 추론 속도를 보인 모델
SSD(Single Shot multibox Detector): multi-scale feature map을 활용하였으며, 다양한 scale과 다양한 ratio를 가진 default box를 정의해서 다양한 크기와 비율의 객체들을 인식함. 높은 정확도와 빠른 추론 속도를 보인 모델
- 기존 2-stage 모델은 정확도를 위해 속도를 희생하고, 1-stage 모델은 속도를 위해 정확도를 희생하는 trade-off를 근본적으로 개선하고자 함
- Base Network라 불리는 사전 학습된 합성곱 신경망에 추가적인 합성곱 계층들(Extra Feature Layers, Auxiliary Network)를 이어붙여 구성됨
https://skyil.tistory.com/202
- RetinaNet: Focal Loss를 도입하여 object detection task에서 발생하는 class imbalance 문제를 완화한 모델
2.1.4 Anchor-free One-stage detector
CornerNet: keypoint 방식으로 두가지 키포인트로 object detection 진행
- CornerNet은 왼쪽 위, 오른쪽 아래, 두개의 모서리를 인식하여 경계박스를 얻어냄
- object의 경계선을 인식하는데 뛰어나지만, 안에 있는 물체의 전체적인 정보가 부족해, 경계선의 어디까지가 오브젝트인지 인식을 잘 못하는 경우가 발생해, 잘못된 경계박스를 만들어내기도 함
https://velog.io/@to2915ny/CenterNet
CenterNet: Center pooling과 Cascade corner pooling을 통해 세 쌍의 keypoint를 사용하여 CornerNet의 단점을 개선한 모델

- cascade corner pooling은 먼저 똑같이 경계선쪽에 maximum value를 찾은뒤, 최대 경계값의 위치를 따라 안쪽의 internal maximum value를 찾음
- maximum value들을 합쳐서 corner들이 경계박스와, 안에 있는 object의 information까지 다 얻을 수 있어서, 정확한 경계박스를 추론할 수 있다고 함
FCOS: anchor를 사용하지 않고 중심점으로부터 bbox 경계까지의 거리를 예측하며, center-ness를 통해 중심점 거리를 normalize하여 low quality box를 제거하는 모델
- bbox 중심에 대한 pixel의 편차를 예측하는 방식을 center-ness라고 함
- FCN으로 해결이 가능한 semantic segmentation과 같은 다른 task들과 합쳐서 다시 사용할 수 있음
- anchor, proposal을 사용하지 않아 튜닝해야 할 parameter들이 줄어들어 좀 더 단순하게 학습이 가능
https://talktato.tistory.com/26
3. Neck
- 일반적으로 넥은 여러 개의 Bottom-up 경로와 Top-down 경로로 구성됨
→ Feature Pyramid Network (FPN) , Path Aggregation Network (PAN) , BiFPN , NAS-FPN 등이 존재

FPN(Feature Pyramid Network)
- low-level feature map과 high-level feature map의 특징을 top-down, bottom-up, lateral connection을 통해 유의미하게 활용하여 객체 탐지 성능 향상에 기여한 네트워크
→ feature map을 nearest neighbor upsamling 기법을 적용하여 해상도를 2배씩 키움
→ bottom-up pathway의 feature map에 1x1 conv를 적용하여 feature map의 channel을 감소시킨 뒤에 단순히 top-down pathway feature map에 더하여 계산하는 방식
https://deep-learning-study.tistory.com/491
Bottom up Path 추가 = Bottom up을 한번 더 해준거로 이해하면 됨※ Bottom-up Path AugmentationHigh-level, Low-level정보가 골고루 섞이도록 하는 역할→ 이후에, pooling 해주고, ROI 추출하던지 segmentation 하고자 하는 방식에 따라 d or e 방식으로 진행해줌
- → 기존에는 a와 같이 하게 될 경우, 한 층마다 ResNet-50의 모델을 지나가기 때문에 정확한 정보를 담지 못하게 된다는 단점이 존재 (FPN) → 이를 개선하기 위해 단순한 N2,3,4,5의 층을 구성해 bottom up을 한 번 더 해줌

Fully-connected FPN
- 서로 다른 level의 feature map 간의 정보를 완전 연결(fully connect)하여 통합하는 방식의 Feature Pyramid
BiFPN
- 같은 scale의 feature map에 edge를 추가하여 더 많은 feature들이 융합할 수 있도록 구성한 FPN 구조
※ 일부 연구자들은 객체 탐지를 위해 새로운 백본(DetNet [43], DetNAS [7])이나 전체 모델(SpineNet [12], HitDetector [20])을 직접 구축하는 데 힘쓰고 있다고 함
2.2 Bag of freebies
- inference 시간에는 영향을 주지 않으면서 학습 비용만 추가되는 학습 방법을 Bag of Freebies(이하 BoF)라고 부름
- Data augmentation
- Semantic distribution bias
- Objective function of Bounding box regression
2.2.1 Data augmentation
2.2.2 Semantic distribution bias
- semantic distribution bias를 해결하기 위한 방법
- Two-Stage
- Hard negative example mining: 모델이 잘못 판단한 false positive sample을 학습 과정에 추가하여 재학습함으로써 모델을 강건하게 만들며, false positive라고 판단하는 오류를 감소시키는 방법
- OHEM(Online Hard Example Mining): 모든 RoI를 forward pass한 후 loss를 계산하여 높은 loss를 가지는 RoI에 대해서만 backward pass를 수행하여 모델의 학습 속도 개선과 성능 향상을 이뤄낸 bootstrapping 방법
- One-stage
- Focal Loss
- One-hot hard representation
➡️ 서로 다른 category 간의 어느 정도 관계를 가지는지 one-hot hard representation 방식을 통해 표현하기 어렵다는 문제가 존재. 이는 주로 labeling 시 발생
- Label smoothing: label을 0 또는 1 이 아니라 smooth하게 부여함으로써 모델의 regularization 및 일반화 능력을 향상시키며 recalibration에 도움을 주는 방법
- Label refinement network: 서로 다른 해상도에 대하여 coarse한 label을 예측한 후 순차적으로 더 세밀한 label을 예측하도록 구성된 모델
2.2.3 Objective function of Bounding box regression
- Anchor-based method
- MSE(Mean Squared Error) : bounding box의 좌표에 대한 regression을 직접적으로 수행하는 loss function
- IoU-based method
- IoU: 교집합 / 합집합
- GIoU: 두 박스를 모두 포함하는 최소 영역인 C 박스 활용
- DIoU: IoU와 중심점 좌표 함께 고려
- CIoU: DIoU loss에 두 객체 사이의 aspect ratio를 고려, 객체가 겹치지 않은 경우 더 빠른 수렴을 가능하도록 한 loss function
https://silhyeonha-git.tistory.com/3
2.3 Bag of specials
- 정확도 향상을 위한 추가 모듈 기법 및 후처리 방법을 의미
- receptive field 증가
- attention 매커니즘을 도입
- feature를 통합하는 능력을 향상시키는 접근 방식
- activation function
- 후처리: 모델의 예측 결과를 걸러내는(screening) 접근법
2.3.1 Enhance receptive field
- backbone network에서 얻은 feature map에 대한 receptive field를 키우는 방법
2.3.2 Attention module
1. Channel-wise Attention
- SE(Squeeze-and-Excitation): 입력된 feature map에 대하여 Global Average Pooling 수행 후 fc layer에 입력하여 channel별 중요도를 파악한 후, 이를 원본 feature map에 곱해 channel별 중요도를 재보정하는 모듈
2.3.3 Feature integration
- feature map을 통합하기 위해 FPN보다 경량화된 버전의 방법에 대한 연구
- SFAM: SE 모듈을 사용하여 다중 스케일로 연결된 특성 맵에 채널별 레벨 가중치를 적용
- ASFF: 소프트맥스를 사용하여 점별 레벨 가중치를 적용하고 다른 스케일의 특성 맵을 더함
- BiFPN: 다중 입력 가중 잔차 연결을 제안하여 스케일별 레벨 가중치를 적용하고 다른 스케일의 특성 맵을 더함
2.3.4 Activation Function

- LReLU(Leaky ReLU)
- PReLU(Parametric ReLU): 기존 ReLU 함수에서 음수값의 계수를 학습 가능한 파라미터로 지정한 activation function
- ReLU6: 기존 ReLU 함수의 최대값을 6으로 지정하여 효율적인 최적화가 가능한 activation function
- SELU(Scaled Exponential Linear Unit): self-normalizing 효과가 있어 gradient exploding, vanishing 문제를 방지하는 activation function
- Swish: Sigmoid 함수에 입력값을 곱해준 형태로, 깊은 layer를 학습시킬 때 좋은 성능을 보이는 activation function
- hard-Swish: 임베디드 기기에서는 Swish 함수에서 sigmoid에 대한 연산량이 높기 때문에 이러한 문제를 해결하기 위해 적용한 activation function
- Mish: upper bound가 없어 캡핑으로 인한 포화가 발생하지 않으며, 약간의 음수를 허용하여 gradient가 잘 흐르도록 설계된 activation function
2.3.5 Post-processing method
- NMS: 같은 객체를 예측하는 불필요한 bounding box를 제거
- Greedy NMS: 높은 confidence score를 가지는 bounding box를 기준으로, 임계치 이상의 IoU 값을 가지는 bounding box를 제거하는 가장 일반적인 NMS 방법
- Soft NMS: confidence score가 높은 bounding box와 임계치 이상의 IoU 값을 가지는 bounding box에 대해 confidence score를 decay(부패)시켜 탐지 성능 하락을 방지하는 NMS 방법
- DIoU NMS: 기존의 NMS 임계치에 DIoU penalty term을 추가하여 겹친 객체에 대한 탐지 성능을 향상시킨 NMS 방법
3. Methodology
3.2 Selection of BoF and BoS
- Activation function: ReLU, leaky-ReLU, parametric-ReLU, 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 Batch Normalization (CGBN 또는 SyncBN), Filter Response Normalization (FRN), 또는 Cross-Iteration Batch Normalization (CBN)
- Skip-connections: 잔차 연결, 가중 잔차 연결, 다중 입력 가중 잔차 연결, 또는 Cross stage patial connections (CSP)
3.3 Additional improvements
1. Mosaic

- 4개의 학습 이미지를 혼합하는 새로운 data augmentation 방법
- 대용량 미니배치 크기의 필요성을 크게 줄임 (batch size=4를 하나의 이미지로 보여주는 효과를 지님)
2. SAT(Self-Adversarial Training)
- foreward, backward 두 번의 stage를 걸쳐 수행되는 data augmentation 방법
- 첫 번째 stage에는 원본 이미지를 변형시켜, 이미지 내에 객체가 없는 것처럼 속이는 adversarial attack을 가함
- 두 번째 stage에서는 변형된 이미지를 사용하여 학습
3. Minor Modifications

- CmBN은 CBN을 변형시킨 버전으로, Cross mini-Batch Normalization을 의미함
- 하나의 batch에서 mini-batch 사이의 batch statistics를 수집함
- 기존의 배치사이즈를 또 나눠서 진행한 것을 의미
- 기존 배치사이즈에서 mini batch 단위로 나눈 후, batch normalization을 추가로 또 수행
4. Modified Existing Methods

- SAM
- point wise 단위로 설정해서 사용
- PAN
- 기존에는 더했다면, 수정된 방식으로는 concate을 진행해줌
3.4 YOLOv4
• Backbone: CSPDarknet53 [81] • Neck: SPP [25], PAN [49] • Head: YOLOv3 [63]
- Bag of Freebies(BoF) for backbone
- CutMix and 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
- Eliminate grid sensitivity
- Using multiple anchors for a single ground truth
- Cosine annealing scheduler
- Optimal hyperparameters
- Random training shapes
- Bag of Specials(BoS) for detector
- Mish activation
- SPP-block
- SAM-block
- PAN path-aggregation block
- DIoU-NMS
4. Experiments
'Deep Learning > [논문] Paper Review' 카테고리의 다른 글
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis (1) | 2023.07.13 |
---|---|
XLM: Cross-lingual Language Model Pretraining (0) | 2023.07.09 |
EfficientNet (0) | 2023.07.07 |
cGAN/Pix2Pix (0) | 2023.07.07 |
R-CNN (0) | 2023.07.06 |