약초의 숲으로 놀러오세요

YOLO v4 논문(YOLOv4: Optimal Speed and Accuracy of Object Detection) 리뷰 본문

Computer Vision/Object Detection

YOLO v4 논문(YOLOv4: Optimal Speed and Accuracy of Object Detection) 리뷰

herbwood 2021. 7. 18. 18:32

이번 포스팅에서는 YOLO v4 논문(YOLOv4: Optimal Speed and Accuracy of Object Detection)을 읽고 리뷰해보도록 하겠습니다. 최근 등장한 가장 정확한 딥러닝 모델은 실시간으로 동작하지 않고, 학습 시 많은 수의 GPU와 mini-batch 크기가 매우 크다는 문제가 있습니다. 본 논문에서는 GPU에서 실시간으로 동작하면서, 기존에 사용하던 하나의 GPU만으로 매우 빠른 학습이 가능한 새로운 모델인 YOLO v4를 소개합니다. 

 

YOLO v4는 당시 최신 딥러닝 기법을 적극적으로 활용하여 모델을 설계하고, 학습시켜 정확도와 속도 측면에서 모두 성능을 크게 끌어올렸습니다. 본 논문에서는 성능을 높힐 수 있는 다양한 접근법과 그와 관련된 최신 연구를 소개한 후, 이를 적절히 조합하여 실험하여 성능이 가장 높은 최적의 딥러닝 기법 조합을 찾아냈습니다. 개인적으로 이번 논문을 굉장히 흥미롭게 읽었고, object detection을 공부하는 입장에서 관련된 다양한 연구가 소개되어 있다는 점에서 충분한 가치가 있다고 생각합니다. 


Previous works

본 논문에서 언급한 최신 딥러닝 기법을 연구 분야별로 살펴보도록 하겠습니다. 빨간색으로 표시된 기법 혹은 네트워크는 YOLO v4 모델에서 사용됨을 의미합니다. 소개된 방법 옆에 논문 링크와, 제 블로그에서 이미 언급된 경우 해당 포스팅의 링크를 첨부해두었습니다. 

1. Object detection models

[그림 1] Object detection model architecture

근래의 detector는 ImageNet에서 pre-trained된 backbone과 class와 bounding box를 예측하는 head로 구성되어 있습니다. 그리고 최근에는 backbone과 head 사이에서 서로 다른 scale의 feature map을 수집하는 layer인 neck이 추가되었습니다. 

1.1 Backbone 

detector가 GPU 혹은 CPU에서 동작하는지에 따라 사용하는 backbone을 구분할 수 있습니다. 

 

1.1.1 GPU platform backbone

[그림 2] VGG-16(좌) ResNet-34(중간), SpineNet-49 architecture(우) 
[그림 3] EfficientNet의 Compound scaling(좌) CSPDarknet53의 Cross Stage Hierarchy 방법(우)

  • VGG16[논문] : 3x3 conv filter만을 사용하여 네트워크의 깊이를 크게 늘린 모델 
  • ResNet-50[논문] : Residual Block을 통해 네트워크의 층 수를 획기적으로 늘린 모델 
  • SpineNet[논문] : object detection에 보다 적합한 backbone network를 설계하기 위해 NAS를 활용하여 localization 및 multi-scale feature에 유리하도록 설계된 scale-permuted 모델 
  • EfficientNet-B0/B7[논문] : width, depth, resolution라는 3가지 scaling factor를 모두 고려하는 compound scaling을 AutoML을 통해 적은 연산량과 높은 정확도를 가지도록 설계된 모델 
  • CSPResNeXt50[논문] : ResNext-50 기반의 layer의 feature map을 분할 후 Cross-Stage Hierarchy 방법을 통해 결합하여 연산량을 획기적으로 낮춘 모델 
  • CSPDarknet53[논문]: DenseNet 기반의 layer의 feature map을 분할 후 Cross-Stage Hierarchy 방법을 통해 결합하여 연산량을 획기적으로 낮춘 모델

1.1.2 CPU platform backbone 

[그림 4] Fire Module(좌), Depthwise seperable convolution(중간), Channel Shuffle(우)

  • SqueezeNet[논문] : Fire module의 squeeze layer, expand layer를 통해 1x1 conv filter를 적절하게 사용하여 정확도는 유지하면서 네트워크의 크기를 효과적으로 줄인 모델 
  • MobileNet[논문] : Depthwise seperable convolution과 width, resolution multiplier를 통해 네트워크의 용량 감소와 추론 속도 향상을 이뤄낸 모델 
  • ShuffleNet[논문] : Pointwise convolution을 통해 연산량을 줄이고, Channel shuffle 방식을 통해 input과 output channel이 fully related하도록 하여 네트워크의 표현력을 향상시킨 모델 

1.2 Neck

Neck은 다양한 크기의 feature map을 수집하기 위해 block을 추가하거나, bottom-up path와 top-down path를 집계하는 방법을 사용합니다. 

 

1.2.1 Additional blocks

[그림 5] SPP layer(좌), ASPP layer(우)
[그림 6] RFB module(좌), CBAM의 sub module(우)

  • SPP(Spatial Pyramid Pooling)[논문] : conv layer의 마지막 feature map을 고정된 크기의 grid로 분할한 후 평균을 구해 고정된 크기의 representation을 얻음 
  • ASPP(Astrous Spatial Pyramid Pooling)[논문] : Spatial Pyramid Pooling 구조에 multi-scale 특징을 보다 잘 포착하기 위해 확장 계수를 추가한 Astrous convolution가 더해진 구조
  • RFB(Receptive Field Block)[논문] : 경량화된 CNN 모델에서 학습된 feature를 강조하여, 빠른 추론 속도와 더불어 향상된 정확도에 기여한 구조
  • SAM(Self-Attention Module)[논문] :  conv feature을 refine시켜 상대적으로 중요한 값을 강조하여 매우 적은 연산량 증가로 유의미한 정확도 성능 향상을 이뤄낸 attention module로, BAM, CBAM 등이 있음 

1.2.2 Path-aggregation blocks 

[그림 7] FPN(좌), PAN 프레임워크(우)
[그림 8] NAS-FPN with RetinaNet(좌), Fully-connected FPN(중간), BiFPN(우)
[그림 9] ASFF(좌), SFAM(우)

  • FPN(Feature Pyramid Network)[논문][블로그] : low-level feature map과 high-level feature map의 특징을 top-down, bottom-up, lateral connection을 통해 유의미하게 활용하여 객체 탐지 성능 향상에 기여한 네트워크 
  • PAN(Path Augmented Network)[논문] : Bottom-up Path Augmentation을 통해 low-level feature의 정보를 high-level feature에 효과적으로 전달함으로써 객체 탐지 시 localization 성능을 향상시킨 네트워크 
  • NAS-FPN(Neural Architecture Search-FPN)[논문] : NAS를 통해 효율적인 Feature Pyramid Network 탐색하여 얻은 최적의 FPN 구조 
  • Fully-connected FPN[논문] : 서로 다른 level의 feature map 간의 정보를 완전 연결(fully connect)하여 통합하는 방식의 Feature Pyramid 
  • BiFPN[논문] : 같은 scale의 feature map에 edge를 추가하여 더 많은 feature들이 융합할 수 있도록 구성한 FPN 구조
  • ASFF(Adaptively Spatial Feature Fusion)[논문] : Feature Pyramid에서 다른 level의 feature과 정보 통합 시 adaptive하게 fuse해줌으로써 feature map 간 발생하는 충돌을 방지하는 Feature Pyramid 
  • SFAM(Scale-wise Feature Aggregation Module)[논문][블로그] : multi-scale, multi-level feature map을 scale-level feature concatenation과 channel-wise attention을 통해 집계하여 multi-level feature pyramid를 구성하는 네트워크 

1.3 Head 

Head는 two-stage detector와 one-stage detector로 구분됩니다. 

 

1.3.1 Two-stage detector

two-stage detector는 다시 anchor-based detector와 anchor-free detector로 나눠집니다. 

 

1.3.1.1 Anchor-based Two-stage detector 

[그림 10] Fast R-CNN(좌), Faster R-CNN(우)
[그림 11] R-FCN(좌), Libra R-CNN(우)
[그림 12] Mask 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에 비해 학습 및 추론 속도, 정확도가 향상된 모델  
  • R-FCN[논문][블로그] : RoI끼리 연산을 공유하며 객체의 위치 정보를 포함하는 Position sensitive score map & RoI pooling을 도입하여 Translation invariance dilemma 문제를 해결한 모델 
  • Mask R-CNN[논문][블로그] : RoI pooling을 통해 얻은 feature와 RoI가 어긋나는 misalignment를 해결하기 위해 RoI Align 방법을 도입한 Instance Segmentation 모델  
  • Libra R-CNN[논문] : IoU-based sampling, Balanced Feature Pyramid, Balanced L1 loss를 도입하여 객체 탐지 모델 학습 시 발생하는 imbalance 문제를 완화한 모델 

1.3.1.2 Anchor-free Two-stage detector

[그림 13] RePoints

  • RepPoints[논문] : deformable convolution을 활용하여 객체의 둘레에 점을 찍어 얻은 reppoints를 기반으로 anchor 없이 객체 탐지를 수행하는 모델 

1.3.2 One-stage detector

one-stage detector 역시 anchor-based detector와 anchor-free detector로 나눠집니다. 

 

1.3.2.1 Anchor-based One-stage detector

[그림 14] YOLO v1 예시(좌), YOLO v3 architecture(우)
[그림 15] SSD architecture
[그림 16] RetinaNet architecture

  • YOLO[논문][블로그] : 하나의 통합된 네트워크를 기반으로 classification과 localization을 동시에 수행하여 빠른 추론 속도를 보인 모델 
  • SSD(Single Shot multibox Detector)[논문][블로그] : multi-scale feature map을 활용하였으며, 다양한 scale과 aspect ratio를 가진 default box를 통해 높은 정확도와 빠른 추론 속도를 보인 모델 
  • RetinaNet[논문][블로그] : Focal Loss를 도입하여 object detection task에서 발생하는 class imbalance 문제를 완화한 모델 
  • YOLO v3[논문][블로그] : Darkent-53을 backbone network로 사용하며 multi-scale feature map을 사용하여 빠른 추론 속도를 보인 모델 

1.3.2.2 Anchor-free One-stage detector

[그림 17] CornerNet(좌), MatrixNet(우)
[그림 18] CenterNet
[그림 19] FCOS architecture

  • CornerNet[논문] : hourglass의 출력 결과를 두 개의 모듈을 입력하여 얻은 두 쌍의 keypoint를 사용하여 bbox를 예측하는 모델 
  • CenterNet[논문] : Center pooling과 Cascade corner pooling을 통해 세 쌍의 keypoint를 사용하여 CornerNet의 단점을 개선한 모델 
  • MatrixNet[논문] : 객체와 더불어 객체의 size와 aspect ratio에 대한 정보를 네트워크에 포함하여 keypoint를 예측하는 모델 
  • FCOS[논문] : anchor를 사용하지 않고 중심점으로부터 bbox 경계까지의 거리를 예측하며, center-ness를 통해 중심점 거리를 normalize하여 low quality box를 제거하는 모델 

1.4 기타 

위에서 언급한 방법 외에 직접적으로 새로운 backbone을 설계하거나, object detection task를 위해 완전히 새로운 모델을 설계하는 접근법이 있습니다. 

 

1.4.1 Directly building new backbone

[그림 19] DetNet Backbone Comparison
[그림 20] DetNAS searching process

  • DetNet[논문] : dilated convolution이 추가된 bottleneck 을 적용함으로써 receptive field의 크기를 늘리고, spatial resolution을 보존함으로써 Localizatino에 유리한 feature를 보존한 backbone 모델 
  • DetNAS[논문] : 객체 탐지 task를 위해 NAS와 유전 알고리즘을 통해 설계된 최적의 backbone 모델 

1.4.2 New whole model for object detection 

[그림 21] HitDetector searching process

  • SpineNet : 1.1.1 GPU platform backbone SpineNet과 동일 
  • HitDetector[논문] : 객체 탐지 task를 위한 최적의 backbone, neck, head를 end-to-end 방식으로 계층적(hierarchical)으로 탐색하는 프레임워크 

2. Bag of Freebies 

주로 detector는 오프라인으로 학습되고, 연구자들은 이러한 장점을 살려, 모델의 inference 시간을 늘리지 않으면서 더 높은 정확도를 얻을 수 있도록 학습시키는 방법을 연구합니다. 본 논문에서는 이처럼 inference 시간에는 영향을 주지 않으면서 학습 비용만 추가되는 학습 방법을 Bag of Freebies(이하 BoF)라고 부릅니다. BoF에는 학습 데이터를 변형하는 Data augmentation, 데이터 샘플 분포에서의 불균형을 의미하는 Semantic distribution bias, bounding box를 학습시키기 위한 loss function인 Objective function of Bounding box regression와 같은 접근법이 있습니다. 

2.1 Data augmentation 

Data augmentation의 목적은 입력 이미지의 변동성을 높혀, 설계된 모델이 다른 환경에서 얻은 이미지에 보다 강건해질 수 있도록 하기 위함입니다. 일반적으로 Data augmentation에는 Pixel-wise adjustment와 Simulating object occlusion, Using multiple images, GAN이라는 네 가지 접근법이 있습니다. 

 

2.1.1 Pixel-wise adjustment 

픽셀 단위로 정보를 변경시키는 방법으로, data augmentation 후에 변동된 영역의 원본 픽셀 정보가 보존된다는 특징을 가집니다. 이러한 방법에는 photometric distortion과 geometric distortion 방법이 있습니다. 

 

2.1.1.1 Photometric distortion 

[그림 22] Photometric distortion example

  • brightness : 이미지의 밝기 조절  
  • contrast : 이미지의 대비 조절 
  • hue : 이미지의 색조 조절 
  • saturation : 이미지의 채도 조절 
  • noise of an image : 이미지에 노이즈 추가 

2.1.1.2 Geometric distortion 

[그림 23] Geometric distortion example

  • random scaling : 이미지 랜덤하게 크기 변경 
  • cropping : 이미지 일부분 자르기 
  • flipping : 이미지 뒤집기 
  • rotating : 이미지 회전시키기 

2.1.2 Simulating object occlusion 

객체가 서로 겹치는 상황을 가정하고, 이러한 상황에 모델이 보다 잘 대처하게끔 하기 위해 사용하는 방법입니다. 이를 위해 이미지의 특정 영역을 0으로 채우거나, feature map 단계에서 이러한 방법을 수행하는 방법이 있습니다. 

 

2.1.2.1 Image level 

[그림 24] Random Erase(좌), Cutout(우)
[그림 25] Hide-and-Seek(좌), Grid Mask(우)

  • Random erase[논문] : 하나의 물체가 다른 물체에 의해 부분적으로 가려져 보이지 않는 occlusion 문제를 해결하기 위해 이미지의 일부분을 랜덤한 값으로 채워 regularization 효과와 모델의 강건함을 향상시킨 data augmentation 기법 
  • CutOut[논문] : occlusion 문제를 해결하기 위해 이미지의 일부분을 0으로 채우는 data augmentation 기법 
  • Hide-and-seek[논문] :  이미지 패치를 랜덤하게 숨김으로써 네트워크가 가려지지 않은 객체의 일부분에 대해 학습하여 모델의 분류 성능을 향상시키는 방법 
  • Grid mask[논문] : 고정된 크기의 grid로 이미지를 가려 이미지의 일부분을 제거하는 방법으로 인해 객체의 특징이 제대로 학습되지 못하는 단점을 보완한 data augmentation 기법 

2.1.2.2 Feature map level 

[그림 26] Dropout(좌), DropConnect(우)
[그림 27] DropBlock

  • DropOut[논문] : 네트워크에서 무작위로 일부 뉴런을 학습에서 배제하여 regularization 효과를 주는 방법 
  • DropConnect[논문] : 네트워크에서 뉴런 사이의 connection을 학습에서 배제하여 모델의 표현력을 살리면서 regularization 효과를 주는 방법 
  • DropBlock[논문] : feature map 내에서 연속하는 영역의 activation을 0으로 만들어 네트워크에 regularization 효과를 주는 방법  

2.1.3 Using multiple images 

다수의 이미지를 함께 사용하여 data augmentation을 수행하는 방법입니다.

[그림 28] MixUp과 CutMix 결과

  • MixUp[논문] : 두 데이터의 이미지와 label을 weighted linear interpolation하여 네트워크의 일반화 능력을 향상시키는 data augmentation 기법 
  • CutMix[논문] : 이미지 내 특정 패치 영역에 label이 다른 학습 이미지를 잘라 붙여넣어 학습 픽셀을 효율적으로 사용하며 regularization 효과를 유지하는 data augmentation 기법 

2.1.4 GAN

이러한 방법을 통해 CNN에 의해 학습된 texture bias를 효과적으로 줄일 수 있습니다.

[그림 29] Styllized-ImageNet 이미지 예시

  • Stylized-ImageNet(SIN)[논문] :  이미지 분류 모델이 가지는 texture bias를 해결하기 위해 style transfer를 통해 이미지의 shape은 유지하면서 texture만 변형시킨 이미지 

2.2 Semantic distribution bias

학습 데이터셋 자체에 내재하는 semantic distribution bias를 해결하는 연구가 있습니다. 

 

2.2.1 Class Imbalance

객체 탐지 시에는 발생하는 positive/negative sample 사이의 심각한 class imbalance 문제가 발생합니다. 이를 해결하기 위해 two-stage와 one-stage detector는 서로 다른 해결책을 고안합니다. 

 

2.2.1.1 Two-stage 

[그림 30] Hard negative example mining(좌), OHEM(우)

  • Hard negative example mining[논문][블로그] : 모델이 잘못 판단한 false positive sample을 학습 과정에 추가하여 재학습함으로써 모델을 강건하게 만들며, false positive라고 판단하는 오류를 감소시키는 방법 
  • OHEM(Online Hard Example Mining)[논문][블로그] : 모든 RoI를 forward pass한 후 loss를 계산하여 높은 loss를 가지는 RoI에 대해서만 backward pass를 수행하여 모델의 학습 속도 개선과 성능 향상을 이뤄낸 bootstrapping 방법 

2.1.1.2 One-stage 

[그림 31] Focal loss의 하이퍼 파라미터 gamma에 따른 loss 값 변화

  • Focal loss[논문][블로그] : class imbalance 문제를 해결하기 위해 easy negative를 down-weight하여 hard negative sample에 집중하여 학습시키는 loss function 

2.2.2 One-hot hard representation 

또 다른 문제는 서로 다른 category 간의 어느 정도 관계를 가지는지를 one-hot hard representation 방식을 통해 표현하기 어렵다는 문제가 있다. 이는 주로 labeling 시 발생하게 된다. 

[그림 32] label smoothing clustering 결과(좌) Label Refinement Network(우)

  • Label smoothing[논문] : label을 0 또는 1 이 아니라 smooth하게 부여함으로써 모델의 regularization 및 일반화 능력을 향상시키며 recalibration에 도움을 주는 방법 
  • Label refinement network[논문] :  서로 다른 해상도에 대하여 coarse한 label을 예측한 후 순차적으로 더 세밀한 label을 예측하도록 구성된 모델 

2.3 Objective function of Bounding box regression

Bounding box regression을 수행하기 위해 Anchor 기반과 IoU(Intersection over Union) 기반의 loss function이 있습니다.

2.3.1 Anchor-based method

  • MSE(Mean Squared Error) : bounding box의 좌표에 대한 regression을 직접적으로 수행하는 loss function

2.3.2 IoU-based method

MSE를 통해 bounding box의 좌표값을 직접 예측하는 방법은 각각의 좌표를 독립된 변수로 고려하는 셈입니다. 하지만 이로 인해 객체의 온전한 상태를 간과하게 됩니다. 이러한 문제를 해결하기 위해 IoU 기반의 loss function이 등장합니다. IoU는 scale invariant하기 때문에 기존의 L1, L2 loss와 같이 loss가 scale에 비례하는 문제가 발생하지 않습니다.

 

[그림 33] GIoU 예시(좌) DIoU loss의 중심점 거리(우)

  • GIoU(Generalized IoU)[논문] : 겹치는 객체 사이의 IoU를 기반으로 scale invariant한 속성을 유지하면서 두 객체 사이의 거리까지 고려한 loss function 
  • DIoU(Distance IoU)[논문] : GIoU loss에 두 객체 사이의 중심점 거리에 해당하는 penalty term을 추가하여 수렴 속도를 향상시킨 loss function 
  • CIoU(Complete IoU)[논문] : DIoU loss에 두 객체 사이의 aspect ratio를 고려하는 penalty term을 추가하여 객체가 겹치지 않은 경우 더 빠른 수렴을 가능하도록 한 loss function 

3. Bag of Specials 

본 논문에서는 object detection 시, inference 시 cost를 아주 조금 증가시키지만 정확도를 크게 향상시킬 수 있는 추가 모듈 혹은 후처리(post-processing) 방법을 Bag of Specials(이하 BoS)라고 부릅니다. 모델에서 특정 속성을 강조하기 위해 receptive field를 늘리거나, attention 매커니즘을 도입하거나 혹은 feature를 통합하는 능력을 향상시키는 접근법이 있습니다. 이밖에도 후처리(post processing) 방법에는 모델의 예측 결과를 걸러내는(screening) 접근법이 있습니다. 

3.1 Enhance receptive field

backbone network에서 얻은 feature map에 대한 receptive field를 키우는 방법입니다.

  • SPP : 1.2.1 Additional block의 SPP와 동일하지만, kernel의 크기를 다양하게({1, 5, 9, 13})하여 max pooling을 수행하여 feature map에 대한 receptive field를 늘리도록 개선함  
  • ASPP : 1.2.1 Additional blocks의 ASPP와 동일 
  • RFB : 1.2.1 Additional blocks의 RFB와 동일 

3.2 Attention module

객체 탐지 모델에 적용하는 Attention module은 channel-wise, point-wise로 나눠지고 이는 각각 SE module, SAM에 해당합니다. 

[그림 34] Squeeze-and-Excitation module

  • SE(Squeeze-and-Excitation)[논문] :  입력된 feature map에 대하여 Global Average Pooling 수행 후 fc layer에 입력하여 channel별 중요도를 파악한 후, 이를 원본 feature map에 곱해줘 channel별 중요도를 재보정하는 모듈 
  • SAM : 1.2.1 Additional blocks의 SAM과 동일 

3.3 Feature integration 

feature map을 통합하기 위해 FPN보다 경량화된 버전의 방법에 대한 연구가 있습니다.

  • SFAM : 1.2.2 Path-aggregation blocks의 SFAM과 동일 
  • ASFF : 1.2.2 Path-aggregation blocks의 ASFF와 동일 
  • BiFPN : 1.2.2 Path-aggregation blocks의 BiFPN과 동일 

3.4 Activation function 

좋은 activation function은 gradient가 더 원활하게 흐르도록 하며, 연산량이 많지 않습니다. 이에 대한 연구는 다음과 같습니다.

[그림 35] Leaky ReLU/PReLU(좌), ReLU6(중간), SeLU(우) 그래프
[그림 36] Swish(좌), hard Swish(중간), Mish(우) 그래프 

  • LReLU(Leaky ReLU)[논문] : dying ReLU 문제를 해결하기 위해 기존 ReLU 함수에서 음수값에 대하여 gradient가 0이 되지 않도록 작은 값(default=0.01)을 곱해준 activation function 
  • 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 

3.5 Post-processing method

같은 객체를 예측하는 불필요한 bounding box를 제거하는 NMS로 다음과 같은 방법이 있습니다.

[그림 37] Soft NMS 예시(좌), DIoU NMS 예시(우)

  • 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 방법 

Main Ideas 

본 논문에서는 모델의 성능을 개선하기 위한 접근법에 따른 다양한 방법을 조합하여 최고의 성능을 보이는 모델인 YOLO v4를 소개합니다. 단순히 기존 연구의 방법을 조합했을 뿐이 아니라 독자적인 data augmentation 방법과 기존 모듈을 변형시키는 등 독자적인 방법을 제시합니다. 

New Ideas and Modifications 

Mosaic

[그림 38] Mosaic

본 논문에서는 네 개의 학습 이미지를 섞는 독자적인 data augmentation 방법인 Mosaic을 소개합니다. 이미지를 섞음으로써 객체가 인식되는 일반적인 맥락에서 벗어난 관점을 네트워크에 제공하게 됩니다. 

SAT(Self-Adversarial Training)

본 논문에서 제안한 또 다른 독자적인 data augmentation 방법으로. foreward, backward 두 번의 stage를 걸쳐 수행되는 data augmentation 방법입니다. 첫 번째 stage에는 원본 이미지를 변형시켜,  이미지 내에 객체가 없는 것처럼 보이는 adversarial attack을 가합니다. 두 번째 stage에서는 변형된 이미지를 사용하여 학습합니다. 

Minor Modifications

[그림 39] CmBN

  • CmBN은 CBN을 변형시킨 버전으로, Cross mini-Batch Normalization을 의미합니다. 해당 방법은 하나의 batch에서 mini-batch 사이의 batch statistics를 수집합니다. 

[그림 40] 변형된 SAM(좌), 변형된 PAN(우)

  • SAM에서 spatial-wise attention을 point-wise attention으로 변형합니다
  • PAN에서 shortcut connection을 concatenation으로 대체합니다. 

Best Combination 

위에서 소개한 다양한 모듈, 네트워크, 방법 중 YOLO v4의 네트워크는 다음과 같은 요소로 구성되어 있으며, 

  • Backbone : CSPDarknet53
  • Neck : SPP, PAN
  • Head : YOLOv3

다음과 같은 방법을 사용합니다.

  • 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

Experiments 

본 논문에서는 다양한 최고의 성능을 위한 다양한 실험을 진행합니다. 

 

1) Classifier 학습 시 label smoothing, data augmentation이 주는 영향에 대한 실험 

2) Detector 학습 시 서로 다른 feature의 영향에 대한 실험 

3) Detector 학습 시 서로 다른 backbone과 pretrained weight의 영향에 대한 실험 

4) Detector 학습 시 mini-batch 크기에 따른 영향에 대한 실험 

[그림 41] 다양한 object detector와 YOLO v4와의 성능 비교

위와 같은 실험을 토대로 YOLO v4와 다양한 object detector와의 성능을 비교한 결과, YOLO v4는 파레토 최적(Pareto optimality) 곡선에 위치합니다. 이는 곧 추론 속도가 가장 빠르며, 정확도 역시 가장 높음을 의미합니다. 


YOLO v4는 MS COCO 데이터셋에서 43.5%라는 AP 값을 보이며, 당시 SOTA 성능을 보였습니다. 또한 Tesla V100 GPU에서 65 FPS라는 매우 빠른 추론 속도를 보였습니다. 뿐만 아니라, 다양한 방법을 적용하여 기존에 사용하던 상대적으로 낮은 성능의 GPU에서도 빠른 학습 및 추론에도 기여했습니다. 

 

개인적으로 굉장히 흥미로운 논문이었습니다. 객체 탐지라는 분야와 관련된 다양한 연구를 접할 수 있어 의미있었습니다. 특히 모델의 성능을 개선하는데 있어, 네트워크 구조를 수정하는 방법 외에도 loss function, NMS, module, regularization 등과 같은 다양한 접근법이 있다는 점을 알게 되어 딥러닝을 바라보는 시야가 넓어지는데 도움이 되었던 것 같습니다. 다음 포스팅에서는 EfficientDet 논문을 리뷰해보도록 하겠습니다. 

 

 

Reference

YOLO v4 논문(YOLOv4: Optimal Speed and Accuracy of Object Detection)

https://ratsgo.github.io/insight-notes/docs/interpretable/smoothing

https://programmersought.com/article/20017209995/#hardSwish_141

https://hwk0702.github.io/ml/dl/deep%20learning/2020/07/09/activation_function/

 

Comments