논문 제목 : You Only Look Once: Unified, Real-Time Object Detection
저자 : Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
연도 : 2016 (version 5)
YOLO v1 모델이 나오기 전, 기존 R-CNN 계열의 모델들은 Two-Stage Detector 방식을 취했습니다.
💡 Two Stage Detection 💡
물체의 위치를 찾는
Localization
과 물체의 클래스 확률을 예측하는Classification
을 별도로, 순차적으로 수행되는 방법론
- 병목 현상이 발생하여 detection 속도가 느려집니다.
- 파이프라인이 복잡하기 때문에 당연히 학습과 예측이 느려지고 최적화도 느려집니다
- 정확도는 올라가지만 시간이 오래 소요됩니다.
YOLO v1 저자는 논문에서 DPM(Deformable Part Model)
에서 사용하는 sliding window 방식과 R-CNN
계열의 region proposal의 비효율성을 언급하면서 One-Stage Detection 방식을 제안합니다.
💡 One Stage Detection 💡
localization과 classification을 하나의 문제로 정의하여 network가 동시에 두 task를 수행하도록 설계하는 방법론
image pixels
부터bounding box coordinates and class probabilities
까지 straight하게 진행된다고 저자는 말합니다.- 복잡한 파이프라인이 아니라 간단한 파이프라인으로 구성되게 됐습니다.
- 하나의 Network 구조로 되어 있어 end-to-end 방식을 사용할 수 있습니다.
- 두 문제를 한꺼번에 처리하기 때문에 속도는 빠르지만 정확도 면에서 떨어집니다.
💥 속도와 정확도는 trade-off 관계 💥
저자는 YOLO v1의 Extremeley fast speed를 언급합니다.
또한, YOLO v1은 localization error을 더 많이 발생시키지만, 배경에 대해 틀린 검출을 할 가능성은 적다고 합니다.
마지막으로, YOLO v1는 객체의 일반화할 수 있는 표현(general representations of objects
)들을 학습하기 때문에 DPM과 R-CNN과 다르게 다른 일반적인 도메인에서도 성능이 좋다고 합니다.
좀 더 자세히 살펴보겠습니다.
YOLO v1은 별도의 region proposals를 사용하지 않고 전체 이미지를 입력하여 사용합니다.
YOLO v1에서는 end-to-end 방식으로 하나의 convolution network를 거쳐서 마지막 feature map에서 bounding box와 class를 예측합니다.
동작하는 방식은 다음과 같습니다.
1. 이미지를 SxS 의 그리드로 분할합니다. (논문에서는 S = 7)
이 그리드의 크기가 최종 feature tensor의 , 가 됩니다.
grid cell당 1개의 객체가 할당되었습니다. 나머지 grid cell은 객체를 예측하는데 참여할 수 없음을 의미합니다.
여기서 객체의 중심이 특정 grid cell에 위치한다면, 해당 grid cell은 그 객체를 detect하도록 할당(responsible for
)됩니다.
2. 각각의 grid cell은 B개의 bounding box와 해당 bounding box에 대한 confidence score를 예측합니다.
💡 Confidence Score 란? 💡
- 해당 bounding box에 객체가 포함되어 있는지 여부와, box가 얼마나 정확하게 ground truth box를 예측했는지를 반영하는 수치입니다.
- confidence는 Confidence = 로 계산합니다.
- grid cell에 객체가 존재하지 않을 시에 는 0이 되어 confidence score는
0
이 됩니다.- 객체가 존재하면 는 1이 되고 IoU와 곱해져 confidence score는
IoU
가 됩니다.
각각의 bounding box는 box의 좌표 정보(x, y, w, h)
와 confidence score
라는 5개의 예측값을 가집니다.
(x, y)
: Bounding box의 중심점을 의미하며, grid의 범위에 대한 상대값으로 표현됨(w, h)
: w,h는 Bounding box의 너비와 높이로써 전체 이미지에 대해 상대값으로 표현됨confidence score
💡 하나의 bounding box는 하나의 객체만을 예측하며, 하나의 grid cell은 하나의 bounding box를 학습에 사용합니다. 💡
- 예를 들어 grid cell별로 B개의 bounding box를 예측한다고 할 때, confidence score가 가장 높은 1개의 bounding box만 학습에 사용하는 것입니다.
3. 각 grid cell은 Bounding Box 외에도 class 확률을 예측합니다.
Conditional Class Probability(확률)는 분류한 클래스의 확률입니다.
각 grid cell은 C개의 conditional class probabilities인
를 예측합니다.
💡 배경을 예측했다면 확률은 0이 됩니다.
최종적으로 로 물체가 있을 확률과 실제 물체의 bounding box와 예측 bounding box와의 iou를 곱해서 YOLO의 Confidence Score를 구하게 됩니다. 💡
4. non-max suppression을 거쳐서 최종 바운딩박스를 선정합니다.
최종적으로 예측값은 (S x S x (B * 5 + C))
크기의 tensor를 갖습니다.
7 x 7 x 30
의 사이즈를 가지고 있게 됩니다.💡 논문에서는 S = 7, B = 2, C = 20를 사용하여 7 X 7 X 30 tensor를 갖습니다. (PASCAL VOC 데이터셋을 사용하여 학습하였기에 class의 수가 20개)💡
- 7 x 7 x 30 의 의미는 다음과 같습니다.
7 x 7 x 30
= S x S x (5 x B + C)
S
= feature size 7
5
= (center_x, center_y, w, h, confidence score)
B
= number of boxes 2
C
= classes 20 (PASCAL VOC dataset)👉🏻 이미지를 7x7 grid로 나누고 각 grid cell은 2개의 bounding box와 해당 box의 confidence score, 그리고 C개의 class probabilities를 예측합니다.
👉🏻 즉, 이미지별 예측값의 크기는 7 x 7 x (2 x 5 + 20)입니다.
이와 같은 과정을 통해 bounding box의 위치와 크기, 그리고 class에 대한 정보를 동시에 예측하는 것이 가능해집니다.
YOLO v1 모델은 앞서 살펴본 최종 예측값의 크기인 7x7x30에 맞는 feature map을 생성하기 위해 DarkNet이라는 독자적인 Convolutional Network을 설계합니다.
YOLO v1은 GoogLeNet의 네트워크 구조를 모티브로 하였고, 24개의 convolutional layer와 2개의 fully connected layer로 이루어져 있습니다.
역할에 따라 네트워크 구조는 크게 3가지로 나눌 수 있습니다.
GoogLeNet을 이용하여 ImageNet 1000-class dataset을 사전에 학습한 결과를 Fine-Tuning한 네트워크를 말합니다.
이 네트워크는 20개의 Conv Layer로 구성되어 있습니다.
입력 데이터는 448 x 448 x 3
shape으로 넣어주어야 합니다.
보통 네트워크는 깊을 수록 더 많은 특징을 학습하기 때문에 정확도가 높아지는 경향이 있습니다.
하지만 Conv Layer를 통과할 때 사용하는 Filter 연산이 수행시간을 많이 잡아 먹기 때문에 무작정 네트워크를 깊게 쌓기에는 부담이 됩니다.
이 문제를 해결하기 위해 ResNet, GoogLeNet 등의 기법이 제안되었습니다.
Reduction Layer는 GoogLeNet이 처음 제안한 1x1 convolution
의 기법을 응용하여 연산량은 감소하면서 층은 깊게 쌓는 방식을 이용했습니다.
Pre-trained Network에서 학습한 feature를 이용하여 Class probability와 Bounding box를 학습하고 예측하는 네트워크입니다.
이렇게 학습된 모델로 예측을 하게되면 YOLO의 예측 모델은 S x S x (B * 5 + C)
개의 파라미터를 결과로 출력이 됩니다.
이 49개의 grid에 2개씩 Bounding Box가 생성되므로 총 98의 BB(Bounding Box)가 계산되며, 98개의 Class Specific Confidence Score를 얻을 수 있습니다.
이 98개의 Class Specific Confidence Score에 대해 각 20개의 클래스를 기준으로 non-maximum suppression을 하여, Object에 대한 Class 및 bounding box Location를 결정합니다.
기존 R-CNN 계열의 모델이 classification, localization task에 맞게 서로 다른 loss function을 사용했던 것과 달리 YOLO v1 모델은 regression 시 주로 사용되는 SSE(Sum of Squared Error)를 사용합니다.
위의 그림에서 볼 수 있듯이 Localization loss, Confidence loss, Classification loss의 합으로 구성되어 있습니다.
: 많은 grid cell은 객체를 포함하지 않아 confidence score가 0이 되어 객체를 포함하는 grid cell의 gradient를 압도하여, 모델이 불안정해질 수 있습니다.
5
로 설정합니다. : grid cell의 수(=7x7=49)
: grid cell별 bounding box의 수(=2)
: i번째 grid cell의 j번째 bounding box가 객체를 예측하도록 할당(responsible for)받았을 때 1, 그렇지않을 경우 0인 index parameter입니다.
grid cell에서는 B개의 bounding box를 예측하지만 그 중 confidence score가 높은 오직 1개의 bounding box만을 학습에 사용합니다.
: ground truth box의 x, y 좌표와 width, height. 여기서 크기가 큰 bounding box의 작은 오류가 크기가 작은 bounding box의 오류보다 덜 중요하다는 것을 반영하기 위해 wi,hi값에 루트를 씌어주게 됩니다.
: 예측 bounding box의 x, y 좌표, width, height
Object가 존재하는 grid cell i의 predictor bounding box j에 대해, x와 y의 loss를 계산합니다.
정답 좌표랑 예측 좌표 차이를 제곱하여 error를 계산하게 됩니다.
Object가 존재하는 grid cell i의 predictor bounding box j에 대해, w와 h의 loss를 계산합니다.
: 앞서 언급한 객체를 포함하지 않는 grid cell에 곱해주는 가중치 파라미터입니다.
: i번째 grid cell의 j번째 bounding box가 객체를 예측하도록 할당(responsible)받지 않았을 때 1, 그렇지 않을 경우 0인 index parameter입니다.
: 객체가 포함되어 있을 경우 1, 그렇지 않을 경우 0
: 예측한 bounding box의 confidence score
객체를 포함한 바운딩 박스에 대한 confidence error 입니다.
객체를 포함하지 않은 바운딩박스에 대해 confidence error를 계산합니다.
: 실제 class probabilities
: 예측한 class probabilities
클래스 확률에 대한 error입니다.
객체를 포함한 바운딩박스에 대해서만 계산합니다.
classification error에 대한 부분으로 생각할 수 있습니다.
다음은 YOLO v1 모델의 장단점을 소개하며 마무리하려 합니다.
기존 object detectors들과 비교하여 저자들이 언급한 YOLOv1의 큰 장점 3가지가 있습니다.
학습 파이프라인이 기존의 detection 모델들에 비해 간단하기 때문에 학습과 예측의 속도가 매우 빠릅니다.
YOLO v1 모델은 base network의 경우 45fps, 경량화한 fast version의 network는 150fps의 결과를 보여 매우 빠른 detection 속도를 보입니다. 실시간으로 0.0025 이하의 지연시간(latency)를 가지며 객체를 detect하는 것이 가능하다고 합니다.
sliding window 방식이나 region proposal 기반의 모델과는 달리 YOLO v1 모델은 모든 학습 과정이 이미지 전체를 통해 일어나기 때문에 단일 대상의 특징뿐 아니라 이미지 전체의 맥락을 학습하게 됩니다.
💡 Comparision wtih Faster R-CNN 💡
YOLO v1 모델은 일반화 가능한 표현(representations)를 학습하여 새로운 도메인이나 예상치 못한 입력 이미지에 대해 상대적으로 강건한 모습을 보입니다.
💡 새로운 이미지나 새로운 도메인에 적용할 때, DPM, R-CNN 같은 detection 방법을 크게 능가합니다.
자연 이미지(natural image)로 학습한 후 그림(artwork)에서 test를 진행해도 다른 모델들 보다 좋은 성능을 보인다고 논문에서는 말하고 있습니다. 💡
각 grid cell의 bounding box는 하나의 객체만을 예측하기 때문에 같은 grid cell 내에 있는 여러 객체를 탐지하지 못합니다.
당시 state-of-the-art 모델보다 정확도 측면에서 약간 부족한 성능을 보입니다.
YOLO는 1개의 grid cell당 1개의 class만 취급하기 때문에 2개 이상의 물체들의 중심이 한 grid cell에 모여있더라도 한가지의 class만 예측할 수 있습니다.
- 새 떼와 같은 작은 물체들이 모여있을때 감지를 하지 못하게 됩니다.
일정한 비율의 bbox로만 예측을 하다보니 색다른 비율을가진 물체에 대한 예측이 좋지 못합니다.
큰 상자의 작은 움직임에 비해 작은 상자의 작은 움직임은 훨씬 더 큰 영향을 끼치기 때문입니다.