사냥꾼의 IT 노트

[논문 리뷰]YOLO v1 본문

논문 리뷰

[논문 리뷰]YOLO v1

가면 쓴 사냥꾼 2022. 7. 6. 12:09

논문: https://arxiv.org/pdf/1506.02640.pdf


Abstract

우리는 기존의 Object Detection과 다른 YOLO라는 모델을 제안합니다. 전체 이미지에 대해서 bounding boxes 와 class probabilities를 한번에 작업합니다. 중간에 추가 개입이 필요 없는 end-to-end 로직이 사용됩니다. 초당 45frame의 속도를 가지고 있으며, real-time에 굉장히 가깝습니다. 성능이 조금 떨어져도 초당 155frame까지 속도를 올릴 수 있습니다. YOLO는 state-of-the-art 모델과 비교했을 때 localization의 에러가 거의 없습니다. DPM과 R-CNN과 비교했을 때 자연 이미지와 artwork에서도 더욱 범용적인 면을 보입니다.

 


Conclusion

우리가 제안한 YOLO 모델은 매우 간단하고 빠른 성능을 지니고 있습니다. boungind boxes를 일일히 작업하는게 아닌 loss function을 이용해 범용적이고 통합된 작업을 진행합니다. YOLO는 Object Detection에서 강건합니다. 


Introduction

사람들은 이미지를 보면 필요한 부분이 파악되며, 빠르고 정확합니다. 우리가 정확하고 빠른 Object Detection을 컴퓨터에 제안하면 즉각적인 반응이 가능할 것입니다. 이는 로보틱스나 운전 같은 분야에 큰 도움이 될 것입니다. DPM같은 이전 모델들은 하나의 이미지에 여러가지 bounding box를 작업했습니다. R-CNN은 bounding box를 classification에 접목하여 결과를 도출하는 로직이었습니다. 이들의 공통점은 속도가 느리다는 것입니다. 우리는 이런 단점을 보완하기 위해 YOLO 모델을 제작하게 되었습니다. 이미지를 한번만 보고 모든 작업이 처리됩니다.

 

  • Figure 1
    1. input 이미지를 448*448로 resize 합니다.
    2. convolutional 네트워크를 실행합니다.
    3. 모델의 필요한 부분한 가져와 결과를 도출합니다.

 

YOLO 모델에는 다음과 같은 장점이 존재합니다.

  1. 빠릅니다. YOLO는 이미지를 한번만 보고 regression하기 때문에 작업 속도가 빠른 편입니다. 초당 45frame에서 최대 초당 150frame까지 처리할 수 있습니다.
  2. 이미지 전체를 한번에 보기 때문에 중요한 정보들을 바로 확인할 수 있습니다. R-CNN 모델은 bounding boxes를 일일히 파악해서 속도가 떨어지지만 YOLO는 그렇지 않습니다.
  3. 일반화 성능이 뛰어납니다. 일반적인 Object Detection 모델들이 작업하지 않는 artwork에서도 범용적으로 잘 작동합니다. 추후에 자연 이미지가 아닌 것에도 작업을 하고 싶다면 YOLO를 추천합니다 !!

하지만 아직 부족한 점도 있습니다. 속도가 빠른 대신 작은 모델에 대해선 정확도는 떨어집니다. 그러나 우리는 이를 개선하기 위해 계속 개발중입니다.


Unified Detection

우리는 single neural network에서 작업합니다. 우리의 네트워크는 이미지의 bounding box를 한번에 보고 작동합니다. input 이미지를 S x S 그리드로 resize하고, grid cell별로 모델을 예측하는 작업을 진행합니다. grid cell별로 B개의 bounding box를 만들고, 해당 box마다 confidence score를 매깁니다. 셀 내에 오브젝트가 존재하지 않으면 0입니다. 이는 confidence score가 오브젝트가 존재하는 정확도를 의미하기 때문입니다. 각 grid cell은 C개의 conditional classes를 예측합니다.

 

  • Figure 2
    1. input 이미지를 S x S grid로 나눕니다.
    2. 각 grid cell에 대해 B개의 bounding box를 생성합니다.
    3. bounding box에 대한 신뢰도 및 C 클래스 확률을 예측합니다.
    4. 이런 것들은 최종적으로 S x S x (B * 5 + C)로 계산됩니다.

PASCAL VOC 표준 데이터셋에서 YOLO 작업을 했으며, 우리는 S = 7, B = 2, C= 20을 넣어줬습니다. 최종 prediction는 7*7*30 tensor 값입니다.


Network Design

우리는 convolutional neural network에 기반해서 YOLO를 개발했습니다. 추가로 PASCAL VOC도 사용했습니다. 개발 당시 유행하던 GoogLeNetmodel을 차용했으며 24개의 convolutional layer를 만들었습니다. 또한 더 빠른 모델의 YOLO를 준비중인데, 더 적은 개수의 필터와 9개의 convolutional layer를 사용했습니다. 최종 네트워크는 7 x 7 x 30 tensor 예측입니다.

 


Loss

우리는 c로 만든 자체적인 프레임워크 Darknet을 이용해 학습시켰습니다. 이미지 사이즈가 어느정도 커야 하기 때문에 224 x 224를 448 x 448로 resize 해줬습니다. class probabilities와 boundig box의 포지션 좌표를 한번에 예측하며, 0에서 1사이의 값이 되도록 bounding box를 일반화합니다. grid cell location도 마찬가지로 진행합니다. 대부분의 이미지는 object를 포함하지 않습니다. 그렇기 때문에 confidence score가 0이 될 확률이 높으며, 수렴하지 않고 발산할 위험이 큽니다. 따라서 저희는 bounding box coordinate 예측값과 confidence predictions에 가중치를 줘서 진행시켰습니다. 만약 큰 박스와 작은 박스가 동일한 가중치를 가져 에러가 생길 수 있어서 루트를 씌운 다음에 예측을 합니다. YOLO에서는 grid cell별로 bounding box를 예측하는데, 학습 과정에서 신뢰도가 높은 bounding box를 하나 정하고 싶습니다. 이런 경우 가장 높은 IOU를 갖고 있는 bounding box를 사용합니다. 따라서 더 높은 정확도가 우리 YOLO에 적용이 됩니다.

  • loss function:


Training

PASCAL VOC 2007과 2012의 데이터셋을 이용해 총 135 epochs 만큼 학습시켰습니다. 최종 테스트는 2012버전을 사용했고, 배치 사이즈는 64였습니다. 안전성을 위해 첫번째 epoch는 10-3 부터 10-2로, 작은 것부터 큰 것으로 점진적으로 늘렸습니다. 마지막에는 10-4에 30epoch을 사용했습니다. 원본 이미지의 20%정도를 random scaling에 사용했습니다.