논문 읽기/Object Detection

[논문 리뷰] YOLO v1 (2016) 리뷰

AI 꿈나무 2021. 2. 2. 15:54
반응형

 이번에 리뷰할 논문은 'You Only Look Once: Unified, Real-Time Object Detection' 입니다.

 

 Deep Learning을 이용한 object detection 접근법은 크게 두 가지로 나눠볼 수 있습니다.

 


Object Detection의 두 가지 접근법

1. 2-stage Detector

  2-stage Detector은 특징 추출과 객체 분류, 두 가지 과정을 거쳐 객체를 탐지합니다. 특징 추출과 객체 분류라는 두 가지 문제를 순차적으로 해결하는 것입니다. 역할을 분담하여 문제를 처리하므로 정확도는 높지만, 속도가 느리다는 단점이 있습니다. 2-stage Detector에는  대표적으로 Fast R-CNN, OverFeat, DPM 등이 있습니다.

 

2-stage Detector의 전체적인 구조 (출처 : hoya012.github.io)

 

 논문에서 2-stage Detector 기법인 DPM과 R-CNN을 소개합니다.

 

(1) DPM

 DPM은 sliding window 기법을 이용합니다. 전체 이미지에 대하여 작은 구역에 일정한 간격(sliding window)을 두고 classifier를 실행합니다.

 

(2) R-CNN

 R-CNN은 region proposal(selective search를 이용)로 객체가 있을 법한 구역을 제안하고, 그 구역을 classifier로 분류합니다. 그리고 출력값으로 생성된 바운딩박스를 전처리과정(bounding box regression)을 거쳐 최종 바운딩박스를 선택하게 됩니다.

 

 2-stage Detector은 속도가 느리고, 최적화하기 어렵습니다. 그 이유는 각 요소를 개별적으로 학습시켜줘야 하기 때문입니다.

 

 이제 1-stage Detector를 살펴보겠습니다.

 

2. 1-stage Detector

 1-stage Detector은 특징 추출과 객체 분류를 한 번에 처리하는 방법입니다. 대표적으로 YOLO 계열과 SSD 계열이 있습니다. 이 포스팅에서는 YOLO v1만 다루도록 하겠습니다.

 

1-stage Detector의 전체적인 구조 (출처: hoya012.github.io)

 

 위 그림에서 보듯이 특징 추출, 객체 분류 두 문제를 단일 신경망으로 해결합니다.

 

 논문에서는 YOLO가 object detection을 single regression problem으로 재구성 했다고 합니다. 어떤 의미일까요?

 

 YOLO v1은 single convolutional network로 이미지를 입력받아, 여러 개의 바운딩 박스와 각 박스의 class를 예측합니다. 그리고 non-max suppression을 통해 최종 바운딩박스를 선정합니다. 

 

논문에 나와있는 YOLO system

 

 두 문제를 한꺼번에 처리를 하여 속도는 빠르지만 정확도가 떨어집니다. 이처럼 속도와 정확도에는 trade off 관계를 형성하고 있습니다.

 


YOLO v1 의 장점

논문에서 설명하고 있는 YOLO v1 장점을 살펴보겠습니다.

1. 매우 빠릅니다.

 YOLO는 복잡한 pipeline이 필요하지 않습니다. 단지, 이미지에 neural networ를 실행하기만 하면 됩니다. 추가적으로 YOLO는 실시간 객체 탐지 방법보다 2배 이상의 mAP(mean average precision)을 얻었다고 논문에서 말하고 있습니다.

 

 (mAP에 대해 궁금하신 분은 아래 포스팅을 참고해주세요)

 

[Object Detection] mAP(mean Average Precision)을 이해하고 파이토치로 구현하기

 안녕하세요 mAP(mean Average Precision)는 Faster R-CNN, SSD와 같은 object detector의 정확도를 측정하는 유명한 평가지표 입니다.  이번 포스팅에서는 mAP가 무엇인지 알아보고 파이토치로 구현해보도록 하.

deep-learning-study.tistory.com

 

2. Fast R-CNN 보다 background error가 두 배이상 적습니다.

 background error는 배경 이미지에 객체가 있다고 탐지한 것을 의미합니다. 어떻게 background error를 줄일 수 있었을 까요?

 

 YOLO는 예측할 때, 이미지 전체를 이용합니다. 이 덕분에 class와 객체 출현에 대한 contextual information까지 이용할 수 있습니다. 반면에 Fast R-CNN은 selective search가 제안한 영역만을 이용하여 예측하기 때문에 larger context를 이용하지 못합니다. 따라서 R-CNN은 배경을 객체로 탐지하는 실수를 하게 됩니다.

 

 위 그림은 Fast R-CNN과 YOLO의 에러 분석 자료입니다.

 YOLO의 background error가 절반 이상 적습니다.

3. 객체의 일반화된 representations를 학습하여 다른 도메인에서 좋은 성능을 보입니다.

 YOLO는 새로운 이미지나 새로운 도메인에 적용할 때, DPM, R-CNN 같은 detection 방법을 크게 능가합니다. 아마 전체 이미지에 대하여 학습을 하기 때문인 것 같습니다. 이러한 특성 덕분에 새로운 도메인에 적용하여 fine-tunning에 이점이 있습니다.

 


바운딩 박스 예측 방식

 

 YOLO는 object detection의 개별 요소를 하나의 network로 통했습니다. 어떠한 방식으로 작동하는지 알아보도록 하겠습니다.

 

(1) 입력 이미지를 S x S grid로 분할합니다.

 

(2) 객체의 중심이 grid cell에 맞아 떨어지면 그 grid cell은 객체를 탐지했다고 표기합니다.

 

(3) 각 grid cell은 B개의 바운딩박스와 각 바운딩박스에 대한 confidence score를 예측합니다.

 

 confidence score는 얼마나 자신있게 박스가 객체를 포함하고 있는지, 얼마나 정확하게 예측했는지를 반영합니다. confidence는 Pr(Object) * IoU로 계산합니다. cell에 객체가 존재하지 않을 시에 Pr(Object)는 0이 되어 confidence score는 0이 됩니다. 객체가 존재하면 Pr(Object)는 1이 되고 IoU와 곱해져 confidence는 IoU가 됩니다.

 

 IoU에 대한 내용은 여기서 확인하실 수 있습니다.

 

[Object Detection] IoU(Intersection over Union)를 이해하고 파이토치로 구현하기

 안녕하세요 이번 포스팅에서는 IoU에 대해 알아보도록 하겠습니다. IoU(Intersection over Union)은 무엇일까요?  Intersection over Union은 object detector의 정확도를 측정하는데 이용되는 평가 지표입니다..

deep-learning-study.tistory.com

 

(4) 각 바운딩 박스는 5개의 정보를 갖고 있습니다. x, y, w, h와 confidence 입니다. x,y는 바운딩박스의 중심을 나타내며 grid cell의 경계에 상대적인 값입니다. width와 height는 전체 이미지에 상대적인 값입니다. 마지막으로 confidence는 예측된 박스와 진짜 박스 사이의 IoU 입니다.

 

(5) 각 grid cell은 바운딩박스 이외에도 class 확률을 예측합니다.

 

 최종적으로 예측값은 (S x S x (B * 5 + C)) 크기의 tensor를 갖습니다. 논문에서는 S = 7, B = 2, C = 20를 사용하여 7 X 7 X 30 tensor를 갖습니다.

 

(6) non-max suppression을 거쳐서 최종 바운딩박스를 선정합니다.

 

 

[Object Detection] 비-최대 억제(NMS, Non-maximum Suppression)를 이해하고 파이토치로 구현하기

 안녕하세요! 이번 포스팅에서는 비-최대 억제(NMS,Non-maximum Suppression)을 알아보도록 하겠습니다.  비최대 억제를 이해하기 위해서는 IoU(intersection over unio)에 대한 개념을 알아야합니다.  IoU에..

deep-learning-study.tistory.com

 


YOLO v1 구조

 논문에 나와있는 YOLO v1의 구조를 살펴보겠습니다.

 

 YOLO는 convolutional layer로 이미지로부터 특징을 추출하고, FC layer로 바운딩박스와 class 확률을 예측합니다.

 

 YOLO는 24개의 convolutional layer와 2개의 fully connected layer로 이루어져 있습니다. 그리고 GoogLeNet에서 영향을 받아 1x1 차원 감소 layer 뒤에 3x3 convolutional layer를 이용합니다.

 

 

 최종적으로 7 X 7 X 30 tensor를 출력합니다.

 


손실 함수

 YOLO는 sum-squared error 를 손실함수로 이용합니다. 하지만 여기에는 여러가지 문제점이 있어 손실 함수를 수정합니다. 어떤 문제점이 있는지 살펴보겠습니다.

 

(1) localization error와 classification error를 동일하게 가중치를 둡니다.

 

(2) 객체를 포함하고 있지 않은 grid cell은 confidence 값이 0을 갖습니다. 이는 객체를 포함한 grid cell의 gradient를 폭발하게 하고 model이 불안정하게 만듭니다.

 

 이 문제를 해결하기 위해서 바운딩 박스의 좌표에 대한 손실을 증가시키고 객체를 포함하고 있지 않은 박스에 대한 confidence 손실을 감소시킵니다. 이를 실행하기 위해 두 가지 파라미터를 사용합니다.

 

 

 $\lambda_{coord}$는 바운딩 박스 좌표 손실에 대한 파라미터입니다. 바운딩 박스에 대한 손실을 5배 가중치로 두어 높은 패널티를 부여합니다. 

 $\lambda_{noobj}$은 객체를 포함하고 있지 않은 박스에 대한 confidence 손실의 파라미터 입니다. 0.5로 설정했습니다. 즉, 배경인 경우 0.5의 가중치를 두어서 패널티를 낮추는 것입니다.

 

 위 두 가지 파라미터로 localization error(바운딩 박스 좌표)와 classification error(잘못된 클래스 분류)에 가중치를 다르게 부여하게 됩니다.

 

 

 논문에 나와있는 최종 수식은 다음과 같습니다.

 

 

 위 수식을 한줄한줄 살펴보면서 어떤 의미를 갖는지 살펴보겠습니다.

 

 x,y는 바운딩 박스 좌표입니다. 정답 좌표랑 예측 좌표 차이를 제곱하여 error를 계산하게 됩니다.

 $1^{obj} _{ij}$는 obj는 객체가 탐지된 바운딩 박스를 말합니다.(가장 높은 IOU를 갖고 있는 바운딩박스), 이 수식은 i번째 grid에서 j번째 객체를 포함한 바운딩박스를 의미합니다.

$\lambda_{coord}$는 localization error의 페널티를 키우기 위한 파라미터로 5로 설정되어있습니다.

 즉, 객체를 포함한 바운딩박스의 좌표에는 5배의 페널티를 부과합니다.

 

 

 바운딩 박스의 너비와 높이에 대한 error 입니다. 너비와 높이에도 5배의 페널티를 부여하는 것을 확인할 수 있습니다. 큰 박스에서 작은 변화와 작은 박스에서 작은 변화는 차이가 있습니다. 이를 보정해주기 위해 루트를 씌어준 다음 제곱을 해주었습니다.

 

 

 객체를 포함한 바운딩 박스에 대한 confidence error 입니다.

 

 

 객체를 포함하지 않은 바운딩박스에 대해 confidence error를 계산합니다. 

 

  

 p(c) 클래스 확률에 대한 error입니다. 객체를 포함한 바운딩박스에 대해서만 계산합니다. classification error에 대한 부분으로 생각할 수 있습니다.

 


YOLO v1 한계

 1. 각 grid cell은 하나의 클래스만을 예측합니다. object가 겹쳐있으면 제대로 예측하지 못합니다.

 

 2. 바운딩 박스 형태가 data를 통하여 학습되므로, 새로운/독특한 형태의 바운딩박스의 경우 정확히 예측하지 못합니다.

 

 3. 작은 바운딩 박스의 loss가 IoU에 더 민감하게 영향을 줍니다. localization에 안좋은 영향을 미칩니다.

 


YOLO v1 성능

 

 Real-Time Detectors에서 가장 좋은 성능을 보이고 있습니다.

 Less Than Real-Time에서도 준수한 정확도를 보입니다.

 


참고자료

[1] nuggy875.tistory.com/20

[2] taeu.github.io/paper/deeplearning-paper-yolo1-03/

[3] arxiv.org/abs/1506.02640

반응형