[논문] You Only Look Once: Unified, Real-Time Object Detection

:memo: 논문 리딩 스터디 #3: One-Stage Object Detector의 Breakthrough격 논문인 YOLO 논문을 번역하고 정리해봅니다.


논문 링크: You Only Look Once: Unified, Real-Time Object Detection

Abstract

우리는 물체 인식의 새로운 접근법인 YOLO를 제안합니다. 이전의 물체 인식은 분류기(classfiers)를 인식 작업을 위해 재구성했습니다. 대신, 우리는 물체 인식을 공간적으로 분할된 Bounding box와 연합된 클래스 가능성(Bounding box 내의 물체가 인식한 물체일 확률인 것 같음)을 예측하는 문제로 생각했습니다. 하나의 신경망은 전체 이미지로부터 한 번에 Bounding box와 클래스 가능성을 예측합니다. 모든 인식의 과정이 단일 네트워크 상에서 이루어지기 때문에, end-to-end로 인식 성능을 향상시키게 최적화될 수 있습니다. 우리의 통합된 구조는 엄청나게 빠릅니다. 우리의 기본 YOLO 모델은 이미지를 초당 45 프레임으로 실시간 처리합니다. 네트워크의 소형화된 버전인 Fast YOLO는, 다른 실시간 물체 검출 네트워크에 비해 두배의 mAP 스코어를 달성하면서 초당 155프레임 처리라는 깜짝 놀랄만 한 결과를 내놓았습니다. 현재 최상 성능(state-of-the-art) 을 가지는 검출 시스템과 비교할 때, YOLO는 더 많은 localization error들을 보이지만, 이는 배경(Background)에서 잘못 예측할 확률이 낮다는 것을 의미합니다. 마지막으로, YOLO는 물체의 범용적인 특징들을 학습합니다. YOLO는 자연 이미지에서 artwork와 같은 다른 도메인까지 넓은 범위에서 DPM과 R-CNN 등의 다른 물체 검출 방법보다 우수한 성능을 보입니다.

Introduction

인간은 이미지를 살짝 보고도 순간적으로 어떤 물체가 이미지 상에 있는지, 어디 있는지, 어떻게 상호작용하고 있는지를 알아챕니다. 인간의 시각 시스템은 빠르고 정확해서, 우리가 작은 지각들을 이용해 운전을 하는 것과 같은 복잡한 일들을 수행할 수 있게 합니다. 물체 인식을 위한 빠르고 정확한 알고리즘은 컴퓨터가 특수한 센서의 사용 없이 자동차를 운전하게 하고, 보조 장치가 실시간 상황 정보를 사람에게 전달하며, 범용 반응형 로봇 시스템의 잠재력을 끌어내줍니다. 지금의 인식 시스템은 분류기를 인식을 위해 다시 제작합니다(repurpose). 물체를 인식하기 위해서, 이 시스템들은 테스트 이미지 내 다양한 위치와 크기의 물체들에 대해 분류기를 동작하는 방식으로 동작합니다. DPM(deformable parts models)같은 시스템은 슬라이딩 윈도우를 이용하여 고르게 떨어진 위치에서 분류기를 실행하는 방식으로 진행됩니다.

R-CNN같은 많은 이전의 접근법들은 Region Proposal Method를 사용해서 이미지 내에서 가능성 있는 bounding box들을 만들고, 그 박스들에 대해서 분류기를 돌립니다. 분류가 끝난 후, 후처리는 bounding box를 다시 정의하고, 중복 검출을 지우고, 장면의 다른 물체들 기반으로 박스 안을 다시 평가하는 작업을 진행합니다. 이 복잡한 구조는 각각이 분리되어 학습하므로, 최적화하기 어렵고 또 오래 걸립니다. 우리는 물체 분류 문제를 입력 이미지의 픽셀들로부터 bounding box와 클래스 가능성을 추측하는 단일 regression 문제로 재정의했습니다.

Unified Detection

우리는 물체 분류의 분리된 요소들을 하나의 신경망으로 통합했습니다. 우리의 네트워크는 전체 이미지에서 추출한 특징을 bounding box를 예측하기 위해 사용합니다. 네트워크는 또 bounding box들과 동시에 이미지의 클래스를 동시에 예측합니다. 이것은 우리의 네트워크가 전체 이미지와 이미지 내의 모든 물체를 생각한다는 것을 의미합니다. YOLO는 높은 precision을 유지하면서 실시간의 속도를 낼 수 있게 종단간 학습을 수행할 수 있게 설계되었습니다. 우리의 시스템은 입력 이미지를 S x S 크기 그리드로 나눕니다. 물체의 중심이 그리드 셀 내부에 들어갈 경우, 그 그리드 셀은 물체를 감지하기 좋습니다. 각각의 그리드 셀은 bounding box B와 그 박스들에 대한 점수들을 반환합니다. 이 점수는 이 모델이 박스 안에 물체를 포함하고 있는지와 박스 내의 물체를 예측한 것이 얼마나 맞는지를 반영합니다. 우리는 신뢰도를 Pr_Object(물체 box prediction score) x IOU_pred^truth 로 정의하였습니다. 물체가 셀 내에 없을 경우, 신뢰도 점수는 0이 될 것입니다. 우리가 원하는 것은 신뢰도 점수가 ground truth와 예측한 박스 사이의 IOU와 같아지는 것입니다. 각 바운딩 박스는 5개의 예측 값을 가지고 있습니다. x, y, w, h, 신뢰도 점수입니다. x와 y는 그리드 셀의 범위와 연관된 박스의 좌표를 의미합니다. w와 h는 전체 이미지에 연관되어 예측됩니다. 결과적으로 신뢰도는 예측한 박스와 ground truth 박스 사이의 IOU 점수를 대표하게 됩니다. 각 그리드 셀은 클래스 가능성 C를 예측합니다. 이 가능성은 객체를 포함하는 그리드 셀에 따라 결정됩니다. 우리는 box의 개수 B와 관계없이, 하나의 그리드 셀당 하나의 클래스 가능성 세트만을 예측합니다. 테스트할때, 우리는 클래스 가능성과 박스 가능성 예측을 곱했습니다. (식은 조건부 확률 식을 이용함, \(Pr(C \vert O) * Pr(O)\) = 박스 안에 물체가 있으면서 그 클래스일 확률)

조건부 확률 : \(P(A \vert B)P(B) = P(A \cap B)\) = 클래스 O, Bounding box O

개인적인 정리

네트워크 디자인 : GoogLeNet 의 영향을 받음, 24개의 컨볼루션 레이어, 2개의 FC를 사용.

fast YOLO : 컨볼루션 레이어가 9개 쓰인거 빼고는 차이 없음(모든 parameter들이 동일)

출력 : 7 x 7 x 30 크기 텐서

학습 : 컨볼루션 레이어를 ImageNet으로 미리 학습.

20개의 conv 레이어로 미리 학습했고, ImageNet Top-5 acc 88% 달성.

224 * 224 이미지를 448 * 448로 해상도를 올림.

x, y, w, h를 0에서 1 사이 값을 가지도록 정규화.

leaky-ReLU 사용.

합 제곱 오차 사용 : 최적화하기 쉬움. 하지만 mAP를 구하는 작업과 완벽히 맞지는 않음.

논문 발췌 : 모든 이미지에서 많은 그리드 셀에는 어떤 객체도 포함되어 있지 않습니다. 이렇게 되면 해당 셀의 신뢰도 점수가 0으로 떨어지며 객체가 포함된 셀의 그래디언트에까지 영향을 미치게 됩니다. 그로 인해 모델이 불안정해져서, 학습이 일찍 실패할 수 있습니다.

  • 이 문제를 해결하기 위해서, Bounding box를 regression하는 regressor의 Loss 함수에 5를 곱해주고 (\(\lambda _\text{coord} = 5\)), 해당 Bounding Box 내에 물체가 있는지 없는지 여부를 판단하는 이중 분류기의 Loss에는 0.5를 곱해주는 방식으로(\(\lambda_\text{noobj} = 0.5\)), Loss의 위력을 달리해서 해결합니다.

49개의 Grid를 만들어서, 하나의 Grid당 2개의 BB(Bounding Box) 생성.

각 Grid에 대해 학습 - 처음 5개 : 1번 BB의 x, y, w, h, cfd, 다음 5개 : 2번 BB의 x, y, w, h, cfd 다음 20개 : 각 클래스별 그 클래스일 예측 확률 (클래스 개수)

그 클래스일 확률이 0.2 이하이면 그냥 0으로 만들어버림.

여러개의 그리드가 같은 물체를 예측할 수 있으니까 같은 물체에 대해서 수많은 박스가 나옴.

다른 BB와 50%이상 겹칠 경우, 예측 신뢰도가 제일 높은것만 남기고 다 지움.

어떤 그리드 셀에서의 클래스 예측 신뢰도가 모두 0이라면, 그 그리드의 경계 박스는 다 지움.

GoogLeNet에서 inception 대신 1 x 1 Convolution으로 대체해서 분류기 학습.

Multi-task Loss 활용 : (x, y, w, h)를 예측하는 Bounding box regressor Loss, Object의 존재 여부를 분류하는 이중 분류기의 Loss, 클래스 예측을 위한 분류기의 Loss까지 3개를 더해서 동시에 사용함.

mAP 개념 참조: http://better-today.tistory.com/3