흔히 YOLO라고 하면 Life style중의 하나로 자신의 행복을 가장 중시하는 태도를 말합니다.
그것과 비슷하게 여기서는 You Only Live Once에서 Live를 Look으로 바꿔서 한번에 보고 바로 처리를 하겠다는 신경망인 YOLO에 대해서 알아보도록 하겠습니다.
1. Introduction
먼저 R-CNN의 한계점에 대해 명확하게 인지해보겠습니다. 사람은 이미지나 환경을 볼 때 어떠한 개체들이 있는지 한눈에 들어오게 됩니다. 하지만 R-CNN은 Detection시스템을 두 단계에 걸쳐서 진행을 합니다. 객체가 있을법한 Bounding box를 치고나서 이것들을 가지고 Classification을 진행해줬습니다.
따라서 YOLO 저자들은 전체 이미지를 보고 이미지 안에 어떠한 객체들이 존재하구나 라고 즉각적으로 반응하기에는 부족하다라는 문제점을 인식하였다고 합니다.
- YOLO는 이미지 내 bounding box와 class probability를 하나의 regression 문제로 엮어, 이미지를 한 번 보는 것만으로 이미지 내에 위치한 객체의 종류와 위치 정보를 추측할 수 있는 unified detection을 이용한 모델 !
- 이것으로 인해 매우 빠른 속도를 기대할 수 있다.
x축은 속도를 나타내고 y축은 정확도를 나타내는데 Fast R-CNN에 비하여 YOLO는 매우 빠른 속도를 보인다. 정확도가 떨어진다는 단점이 있지만 이 모델을 계기로 속도도 빠르고 정확도도 높은 모델들로 발전해나가는 모습을 볼 수 있다.
Pros:
- 간단한 처리과정으로 빠른 속도 + 기존 Real-Time Detection 시스템들과 비교해 2배 가량 높은 mAP
- 이미지 전체를 한 번에 바라보기 때문에 Class에 대한 맥락 이해가 높고, 이 덕분에 Background error가 낮음
- 이미지 전체를 보며 객체의 일반화된 특징을 학습 -> "사진 속 의자의 모습을 학습한 후, 정물화 속 의자 추측 가능"
Cons: 다른 객체 인식 모델에 비해 상대적으로 낮은 정확도 (esp. 크기가 작은 객체 검출 시)
2. Unified Detection
1. Input Image를 S X S개의 Grid로 나눠준다.(In the paper, S=7)
2. 각각의 Grid cell은 B개의 Bounding box와 각 bounding box에 대한 confidence score 를 가진다. 1
[Confidence Score: Pr(Object)*IOU truthpred] 이 논문에서는 B=2로 설정]
따라서 49개의 Grid cell에 대해서 98개의 Bounding box가 생김.
해당 Grid cell에 객체가 없으면 Pr(Object)=0이 되기 때문에 confidence score가 0이된다.
Grid cell에 어떤 객체가 확실히 있다고 예측했을 때, 즉 Pr(Object)=1일 때가 가장 이상적이며, confidence score가 IOU와 같은게 제일 좋다.
각각의 bounding box는 5개의 예측치로 구성되어 있습니다. x, y, w, h, confidence가 그것입니다. (x, y) 좌표 쌍은 bouning box 중심의 grid cell 내 상대 위치를 뜻합니다. 따라서 0~1 사이의 값을 갖습니다.
만약 bounding box의 중심인 (x, y)가 정확히 그리드 셀 중앙에 위치한다면 (x, y)=(0.5, 0.5)입니다.
(w, h) 쌍은 bounding box의 상대 너비와 상대 높이를 뜻합니다. 따라서 당연히 이 값도 0~1 사이값을 가집니다.
이렇게 0~1값을 가지게 하는 이유는 Loss function에서 사용하기 위함.
3. 각각의 Grid cell은 C개의 Conditional Class Probability(C)를 가진다.
[Conditional Class Probability: Pr(Class i | Object)]
Class=20으로 지정 각각의 Grid cell이 어떤 클래스에 들어갈지 확률적인 계산
다시말해 Grid cell 안에 객체가 있다는 조건 하에 그 객체가 어떤 클래스(class)인지에 대한 조건부 확률이다.
Grid cell에 몇 개의 bounding box가 있는지와는 무관하게 하나의 Grid cell에는 오직 하나의 class에 대한 확률 값만을 구한다는 의미이다.
Test Time에서는 conditional class probability(C)와 각 Bounding box의 Confidence score를 곱해, Class-Specific Confidence Score를 계산합니다.
이 score는 bounding box에 특정 클래스(class) 객체가 나타날 확률(=Pr(Class_i))과 예측된 bounding box가 그 클래스(class) 객체에 얼마나 잘 들어맞는지(=IOU_pred^truth)를 나타냅니다.
2. 1. Network Design
-이제까지 다뤄온 Detection Model들과는 다르게 하나의 Convolutional Neural Network 구조
-Convolution 계층, FC layer로 클래스 확률과 Bounding box의 좌표(coordinates)를 예측
-모델의 최종 output은 7 x 7 x 30의 예측 텐서(prediction tensors)
- YOLO의 기본 Network Architecture는 GoogLeNet을 기반으로 함
- 24개의 Convolutional Layer + 2개의 Fully Connected Layer
- GoogLeNet의 인셉션 구조 대신 YOLO는 1 x 1 축소 계층(reduction layer)과 3 x 3 컨볼루션 계층의 결합을 사용
- 좀 더 빠른 객체인식을 위해 Fast YOLO에서는 24개가 아닌 9개의 Convolutional Layer 사용(정확도 감소)
조금 더 직관적으로 살펴보겠습니다.
- 224 x 224 크기의 ImageNet Classification으로 Pretrain 실시
- 이후에 입력 이미지로 448 x 448 크기 이미지를 입력으로받는다.
- 앞쪽 20개의 GoogLeNet을 이용한 convolution layer는 고정한다.
- 뒷 단의 4개 layer만 Object detection Task에 맞게 학습시켜준다.
- 그러고 2번의 FC layer를 거치고 Reshape을 거쳐서 7 x 7 x 30의 Output 산출.
그렇다면 최종 Output에 어떠한 정보들로 담겨져 있는지 살펴보도록 하겠습니다.
- 7 x 7은 앞서 말했던 49개의 Grid cell을 말하는 것
- Grid cell은 B개의 Bounding Box를 지니며, 최초 5개의 값은 Grid Cell은 첫 번째 Bounding box에 대한 값
- (x, y, w, h, confidence) bounding box를 grid cell에 맞게 표준화, x,y설정, w, h (0~1)값으로 설정
두개의 bounding box에 대한 값을 가져야 하므로 6~10번째는 두 번째 Bounding box에 대한 값이되겠습니다.
또한 나머지 20개의 값은 전체 20개 Class에 대한 Conditional Class probability를 나타냅니다.
첫 번쨰 바운딩 박스의 끝부분에 있는게 confidence score니까 이것을 각 Conditional Class Probability 20개를 곱하면 첫 번째 바운딩 박스의 class-specific confidence score가 나오게 되고, 두 번째 바운딩 박스의 class-specific confidence score도 구할 수 있게 됩니다.
- 따라서 총 98개의 class specific confidence score를 구할 수 있습니다. (49개의 grid cell, B=2이므로)
그렇게 첫번째 Grid cell부터 마지막 49번째 Grid셀까지 Bounding box의 class-specific confidence score도 구할 수 있게 됩니다.
따라서 다음과 같은 결과를 얻을 수 있습니다.
2. 2. Training
1. Grid Cell의 두 개의 Bounding box중, Ground-truth box와의 IOU가 가장 높은 Bounding box를 predictor로 설정
- 둘중에 더 잘 맞는 Bounding box를 선택
2. 1번의 기준에 따라 분류
- 1) Object가 존재하는 Grid cell i의 predictor bounding box j (obj i j)
- 2) Object가 존재하지 않는 Grid cell i의 bounding box j (noobj i j)
- 3) Object가 존재하는 Grid cell i (obj i)
Loss Function
1. Object가 존재하는 grid cell i의 predictor bounding box j에 대해, x와 y의 loss를 계산
-ground thuth box와 bounding box의 x, y좌표의 위치차를 구해서 loss계산
2. Object가 존재하는 grid cell i의 predictor bounding box j에 대해, w와 h의 loss를 계산
-큰 box에 대해서는 small deviation을 반영하기 위해 제곱근을 취한 후, sum-squared error (같은 error라도 larger box의 경우 상대적으로 IOU에 영향 적게 줌), 큰 에러가 아닌데 그 값들의 크기가 크기에 큰 에어로 판별할 오류 방지
3. Object가 존재하는 grid cell i의 bounding box j에 대해, confidence score의 loss를 계산(Ci=1)
-디폴트 값은 1임(존재하는 것에 대한 loss를 구함) 따라서 1-confidence socre를 빼서 loss를 구함.
4. Object가 존재하지 않는 grid cell i의 bounding box j에 대해, confidence score의 loss를 계산(Ci=0)
-객체가 존재하지 않으면 디폴트 0 하지만 confidence score는 클래스 확률값을 곱했기에 0보다 항상높음
-그럼 이것이 0보다 얼마나 높은지에 대한 loss를 구하는것
5. Object가 존재하는 grid cell i에 대해, conditional class probability의 loss 계산 (Correct class c: pi(C)=1, otherwise: pi(C)=0)
-각각의 grid cell이 총 20개의 class probability를 가지고 있게 되는데 ground-thuth값이 있고 예측한 conditional probability가 20개가 있는데 이 두 값을 계산해주는 것이 마지막 lossfunction
람다coord : x, y, w, h의 loss를 정할 때 사용되는데 좌표가 잘 맞아야 잘 예측 할 수 있기에 loss값을 크게 가져간다. 여기서는 5를 곱해줌.
람다noobj : 49개의 grid cell중 객체가 없는것이 훨씬 많기 때문에 이 loss를 계산하면 불필요 정보들이 학습된다.
따라서 객체가 없는 곳에서는 loss에 영향을 줄여주는 역할 (0.5를 곱해줌)
- Limitations of YOLO
- 각 그리드는 두개의 bbox를 예측하고 하나의 class를 가질 수 있기 때문에 공간적 제약이 생길 수 밖에 없다. 때문에 작은 물체에 대한 탐지가 어려움이 생긴다.
- bounding box의 형태가 학습 데이터를 통해서만 학습되기 때문에, 새로운 Input으로 이전에 학습되지 않은 형태의 Bounding box를 예측해야 할 경우, 제대로 된 예측을 할 수 없다.
- 몇 단계의 Convolutional Layer를 거쳐 나온 Feature map을 대상으로 Bounding box를 예측하기 때문에 객체의 위치를 정확히 파악하는 Localization이 다소 부정확해지는 경우가 발생
3번 부연설명 : 기존의 디텍션 모델은 바운딩박스를 잡고 해결하기 때문에 Localization이 로버스트하게 이뤄짐(x, y, w, h를 정확하게 잡고나서 객체를 인식)
YOLO의 경우 바운딩박스를 치기 이전에 convol layer를 거치는 과정에서 이미 위치정보가 많이 깨졌을 수 있음.
3. Experiments
다른 Real-Time Detection 시스템보다 월등히 높은 mAP를 기록함
Real-Time에서는 확실히 강한 장점을 보이지만 Real-Time이 아닌 경우에는 조금 낮은 성능을 보인다.
Fast R-CNN과 비교해보았을 때, 훨씬 낮은 Background error를 보이며, 이는 이미지 전체를 보고 학습하기 때문에 배경에 대한 학습이 잘 되었다는 반증이 되기도 한다. 하지만 Loc(위치) 에러가 Fast R-CNN에 비해 매우 크다.
Picasso Dataset을 이용해서 Pre-train 후, Object를 검출하게 한 결과, 다른 모델들 보다 훨씬 더 좋은 성능을 보였고, 이는 일반화가 아주 잘 되고 있다는 결과이다.
-> 사진에서 나타난 의자와 정물화해서 나타난 의자를 가지고 생각해볼 때 욜로는 둘다 잘 의자라고 분류하지만 R-CNN은 정물화된 의자는 잘 판단하지 못한다는 의미
4. Conclusion
- YOLO 모델은 간단하게 구현이 가능하며, 전체 이미지를 바로 학습시킬 수 있다
- Classified-based 접근 방식과는 다르게 Detection 성능과 직접적인 관계를 맺고 있는 loss function을 통해 학습
- YOLO는 Real-Time Object Detection의 성능 지표를 올렸으며, 일반화가 잘 되기 때문에 새로운 도메인에도 쉽게 적용 가능한 모델이다.
- bounding box가 객체를 포함한다는 것을 얼마나 믿을만한지, 예측한 bounding box가 얼마나 정확한지를 나타냄. [본문으로]
댓글