[논문 리뷰] You Only Look Once: Unified, Real-Time Object Detection 2
이 리뷰는 오직 학습과 참고 목적으로 작성되었으며, 해당 논문을 통해 얻은 통찰력과 지식을 공유하고자 하는 의도에서 작성된 것입니다. 본 리뷰를 통해 수익을 창출하는 것이 아니라, 제 학습과 연구를 위한 공부의 일환으로 작성되었음을 미리 알려드립니다.
이 논문은 YOLO의 초기 모델로 기존 RCNN 모델에서 Region proposal과정과 Classification 과정이 나누어져있는 2-Stage Detector 와는 다르게. 두가지 과정을 합쳐서 1-Stage Detector의 형태로 Region proposal과정과 Classification 과정이 동시에 이루어 Object Detection 분야에서 혁신을 준 YOLO 모델을 다룬다. 이 글은 이전 포스팅에 이어지고 이번 포스팅에는 논문을 정리해보고 YOLO의 Model architecture를 더 자세하게 다루어 보려고 한다.
https://c0mputermaster.tistory.com/37
[논문 리뷰] You Only Look Once: Unified, Real-Time Object Detection 1
이 리뷰는 오직 학습과 참고 목적으로 작성되었으며, 해당 논문을 통해 얻은 통찰력과 지식을 공유하고자 하는 의도에서 작성된 것입니다. 본 리뷰를 통해 수익을 창출하는 것이 아니라, 제 학
c0mputermaster.tistory.com
J. Redmon, S. Divvala, R. Girshick, and A. Farhadi, "You Only Look Once: Unified, Real-Time Object Detection," arXiv, 2016, [Online]. Available: https://arxiv.org/abs/1506.02640.
YOLO (you only look once) 동작과정
- 그리드 분할: 먼저 입력된 이미지를 가로와 세로로 동일한 크기의 그리드 영역으로 나눕니다.
- 바운딩 박스 예측: 각 그리드 영역에 대해, 해당 영역에 물체가 존재하는지 확인하고, 그 위치에 바운딩 박스와 함께 신뢰도 점수를 예측합니다. 신뢰도가 높을수록 바운딩 박스가 굵게 표시됩니다. 또한, 각 사물에 대한 분류 작업도 동시에 진행됩니다.
- 신뢰도가 낮은 박스 제거: 신뢰도가 낮은, 즉 사물이 있을 확률이 낮은 박스들은 제거하고, 신뢰도가 높은 굵은 박스들만 남깁니다.
- NMS(Non-Maximum Suppression): 최종적으로 NMS 알고리즘을 사용하여 중복되는 박스를 제거하고, 가장 신뢰도가 높은 바운딩 박스들만 남깁니다. 예를 들어, 최종적으로 3개의 경계 박스만 남게 됩니다.
(1)에서 사진이 입력되면 가로 세로를 동일한 그리드 영역으로 나눈다. 그후 (2)에서 각 그리드 영역에 대하여 사물이 어디 존재하는지 바운딩 박스를 만들고 박스에 대한 신뢰도 점수를 계산한다.
바운딩 박스 (Bounding Box)
- (x, y): 셀의 경계를 기준으로 바운딩 박스의 중심 좌표. 즉, 이미지에서 바운딩 박스가 위치하는 중심점입니다.
- (w, h): 바운딩 박스의 너비(width)와 높이(height), 이 값은 이미지 전체를 기준으로 예측된 값입니다.
- 신뢰도(Confidence): 모델이 해당 바운딩 박스 내에 객체가 존재한다고 예측한 정도를 나타내는 값입니다. 이 신뢰도는 예측 상자와 실제 상자(ground truth box) 간의 IOU (Intersection Over Union) 값에 영향을 받습니다.
IOU (Intersection Over Union)
- 정의: IOU는 예측된 바운딩 박스와 실제 바운딩 박스(ground truth) 간의 겹치는 부분을 전체 면적으로 나눈 비율입니다.
- IOU = (겹치는 영역의 면적) / (두 상자 영역의 합집합 면적)
- 의미: IOU가 클수록 모델이 예측한 바운딩 박스가 실제 상자와 잘 일치한다는 의미입니다.
신뢰도 점수 (Confidence Score)
- 신뢰도 점수는 Pr(Object)와 IOU의 곱으로 정의됩니다.
- Pr(Object): 모델이 바운딩 박스 내에 객체가 존재할 확률을 의미합니다.
- IOU: 예측된 상자와 실제 상자 간의 겹침 정도.
- 신뢰도 점수 = Pr(Object) * IOU
- 객체가 없을 때: 신뢰도 점수는 0입니다. 즉, 객체가 없다고 모델이 판단한 경우, 그 상자는 신뢰도 점수가 0이 됩니다.
그 후 (3)에서 내부에 객체가 존재하는 모든 그리드 셀에 대해 각 조건부 클래스 확률(Class probability)를 예측하고 (4)에서 Test(테스트) 시, 조건부 클래스 확률(S)과 바운딩박스(B) 신뢰도 예측을 곱하여 각 각 박스에 대해 클래스의 확률을 통해 객체의 위치와 여부를 예측한다.
yolo의 초기 모델에서는 그리드셀 하나당 2개의 바운딩 박스를 예측하는데 2개의 바운딩 박스에 대해 예측한 5가지 과 그리드 셀에 있는 오브젝트가 어떤 클래스 인지 확률을 하나의 텐서에 넣는다.
결과적으로 그러면 이와 같이 4x4x30의 아웃풋 텐서가 나오게 된다. ( 만약 이미지가 7x7이라면 7x7x30 ) class의 가 20개이기 때문에 20개의 하늘색 박스에는 해당 그리드셀이 각 클래스에 속할 확률이 들어간다.
Model architecture ( Network )
YOLO 네트워크 아키텍처는 이미지 분류를 위한 GoogLeNet 모델에서 영감을 받았다. 네트워크는 24개의 컨볼루션 레이어와 2개의 완전 연결된 레이어로 구성된다. GoogLeNet에서 사용된 인셉션 모듈 대신, 1 × 1 축소 레이어와 그 뒤를 따르는 3 × 3 컨볼루션 레이어를 사용하며, 이는 Lin et al의 방식과 유사하다. 인셉션 모둘을 제거하고 FC와 컨볼루션 층을 추가했다.
GoogLeNet
GoogLeNet 모델에서 영감을 받았다고 하여서 GoogLeNet 모델을 먼저 살펴보았다. 여기서 파란색 블록들은 모두 1x1의 컨볼루션 레이어이다. 각 연산 과정에서 1x1 Conv를 넣어서 Dimension Reduction을 해주게 되어 연산량을 줄였다고 한다.
GoogLeNet은 Inception module을 쌓아서 만든 네트워크이다. GoogLeNet은 메모리 효율을 고려하여 초반에는 일반적인 Conv layer를 사용하고, 뒤쪽에는 inception module을 사용한다. 모든 Convolutional 연산 뒤에는 ReLU함수를 사용했고, 224x224 RGB 컬러이미지를 입력으로 받으며, 평균값을 빼는 전처리를 수행하했다.
하지만 YOLO에서는 Inception module을 없애고 단순 1x1 layer로 대체하였고 한다. 추가로 Conv layer를 20개에서 24개로 늘리고 Fc layer도 2개 추가하여 26개의 레이어로 네트워크를 구성했다고 한다.
- 총 24개의 컨볼루션 레이어와 2개의 완전 연결(FC) 레이어로 구성됨.
- 앞의 20개의 컨볼루션 레이어는 ImageNet 데이터셋(1000개 클래스)으로 사전 훈련된 부분이다.
- 뒤에 4개의 추가적인 컨볼루션 레이어와 2개의 FC 레이어를 붙여서 Pascal VOC 데이터셋에 대해 파인 튜닝(fine-tuning)을 진행했다.
정리하자면 논문에서 YOLO는 Inception 블럭 대신 단순한 224x224 크기의 ImageNet Classification으로 pretrain을 진행했습니다. 이후 448x448 이미지를 input image로 받아 24개의 Conv Layer 중 앞의 20개의 컨볼루션 레이어는 고정한 채 뒷 단의 4개의 레이어와 2개의 Fully Connected Layer만 object detection task에 맞게 학습하게 됩니다. 이후 예측 텐서(Prediction Tensor)를 뽑아내게 됩니다. 이것을 바탕으로 디텍션 및 분류작업을 수행하게 됩니다.
그렇게 Conv Layer, FC Layer를 통과하여 Prediction Tensor (7 x 7 x 30) 피쳐맵을 가지고 학습과 예측을 한다고 할 수 있다.
여기서 추가로 YOLOv2에서는 7 x 7 x 30의 피쳐맵이 아닌 n x n x 125의 모습을 하고있는데 이는 YOLOv2가 총 5개의 anchor box를 갖고 있고 각각의 앵커박스마다 Class probability를 가지고 있어, 5 x 25(x, y, w, h, confidence, class갯수20개)으로 YOLO버전마다 피쳐맵이 다르다는 점이 있다.
https://techblog-history-younghunjo1.tistory.com/186
[ML] YOLO(You Only Look Once) Object Detection 모델
🔊 해당 포스팅에서 사용된 컨텐츠는 인프런의 딥러닝 컴퓨터 비전 완벽 가이드 강의 내용을 기반으로 했음을 알립니다. 설명에서 사용된 자료는 최대한 제가 직접 재구성한 자료임을 알립니
techblog-history-younghunjo1.tistory.com
여기 블로그를 참고하였다.
Loss function
YOLO는 각 grid cell마다 다수의 bounding boxes를 예측하지만 true positive에 대한 loss를 계산하기 위해 탐지된 객체를 가장 잘 포함하는 box 하나를 선택해야 한다.
이를 위해 ground truth와 IOU를 계산하여 가장 높은 IOU를 가진 하나를 선택한다. 이로써 크기나 가로, 세로 비율에 대해 더 좋은 예측 결과를 얻을 수 있다.
- YOLO는 loss를 계산하기 위해 예측과 ground truth 사이의 SSE(sum-squared error)를 사용하며, loss function은 다음 세 가지로 구성된다.
- classification loss
- localization loss (errors between the predicted boundary box and the ground truth)
- confidence loss (the objectness of the box)
Confidence loss
객체가 탐지되지 않은 경우는 λnoobj (default: 0.5)에 의해 loss의 가중을 적게 한다. 이렇게 하는 이유는 클래스 불균형 문제를 방지하기 위함이다.
대부분의 box가 객체를 포함하고 있지 않은 경우가 더 많기 때문에 배경에 대한 가중을 줄이지 않는 경우 배경을 탐지하는 모델로 훈련될 수 있다.
Localization loss
localization loss는 예측된 바운딩 박스의 위치와 크기에 대한 에러를 측정한다. 위치에 대한 오차는 sum squared error(합산 제곱 오차)를 그대로 적용하지만, 크기(높이와 너비)에 대해서는 루트 값을 씌워 계산합니다. 그 이유는, 절대적인 수치로 크기를 계산할 경우 큰 박스의 오차가 작은 박스의 오차보다 훨씬 더 큰 가중치를 받게 되기 때문입니다. 예를 들어, 큰 박스에서 4 픽셀의 오차는 작은 박스(너비 2 픽셀)의 4 픽셀 오차와 같은 비중으로 고려되어야 하기 때문에, YOLO는 높이와 너비에 제곱근을 적용하여 이 문제를 해결합니다. 또한, 더 높은 정확도를 위해 λcoord(디폴트 값: 5)를 loss에 곱하여 위치에 대한 가중치를 높여줍니다. 이 방식은 작은 객체와 큰 객체가 동일한 비율로 모델에 의해 학습되도록 도와줍니다.
Classification loss
피쳐맵을 통해 탐지된 결과의 각 cell의 classification loss는 각 클래스의 class conditional probabilities의 제곱오차이다. 객체가 없으면 0
Non-maximal suppression
같은 객체에 대해 여러 개의 탐지(예측된 boundary boxes)가 있을 수 있다. 이를 해결하기 위해, YOLO는 낮은 confidence를 가진 중복된 예측을 제거하는 Non-Maximum Suppression (NMS) 기법을 적용한다.
구현 방법은 다음과 같다:
- Confidence score 순으로 예측을 정렬한다.
- 가장 높은 score에서 시작하여, 이전 예측 중 현재 예측과 클래스가 같고 IOU(Intersection over Union)가 0.5 이상인 예측이 있으면, 현재 예측은 무시한다.
- 모든 예측을 확인할 때까지 Step 2를 반복한다.
비-최대 억제(non-max suppresion)를 이용해 object detector가 예측한 bounding box 중에서 정확한 bounding box를 선택하도록 했다.
후기
오늘은 저번 포스팅에서 읽었던 You Only Look Once: Unified, Real-Time Object Detection 논문을 정리해보고 YOLO의 Model architecture와 객체 탐지 방법을 알아보았다. 유용한 시간이었고 다음번에는 YOLO 모델의 발전 과정에 대하여 깊게 알아보려고 한다.