◎ Detection 과정
YOLO는 single neural network를 사용하여 분리된 요소의 detection 시행.
모든 bounding box와 class 확률을 동시에 예측 -> end-to-end 학습 시행 가능. real-time detection 시행.
- 인식할 이미지를 S*S 크기의 grid로 분리.
- 각 grid는 bounding box를 예측하고 여기에 confidence score를 매김. confidence score는 해당 bounding box가 물체를 포함하고 있는지, box의 예측이 얼마나 정확한지 알고리즘이 생각하는 정도. confidence는 Pr(Object) * IOU 으로 정의. 물체가 없으면 object probability가 0이므로 confidence score는 0. 그렇지 않으면 confidence score는 ground truth와 bounding box 사이의 IOU가 된다.
- 각 bounding box에는 (x,y) 좌표, box의 너비(w)와 높이(h), 그리고 confidence score까지 5개의 예측을 하게 됨.
- 각 grid cell은 Pr(Class|Object)인 C를 구함. 이때 grid cell은 bounding box와 다르다는 것을 주의. conditional probability C는 grid 갯수인 S*S 만큼 구해짐.
- C * confidence = Pr(Class|Object) * Pr(Object) * IOU = Pr(Class) * IOU 로 class-specific confidence score를 구함. 해당 클래스가 box에 나타날 확률과 box가 물체와 얼마나 잘 맞는지를 나타낸다.
이 예측은 S*S*(B*5+C) tensor에 encode 된다(한 grid당 B개의 box, 한 box당 5개의 예측, 그리고 한 grid당 클래스 확률).
◎ Network Architecture
YOLO 알고리즘의 모델은 CNN기반으로 이루어짐. GoogLeNet에서 영향을 받았다고 한다.
layer들은 크게 다음과 같은 역할을 한다.
- initial convolutional layers : extract image's feature
- fully connected layers : probabilities and coordinates 예측
GoogleNet에서의 inception module 대신에 3by3 convolution layer를 사용해 1x1 reduction layer를 사용했다고 한다. (이해가 잘 안됨.)
전체 구조는 위의 그림에서 확인할 수 있다.
구조가 간소화된 빠른 YOLO를 사용할 수도 있다.
◎ Training
논문에서는 Darknet Framework를 사용하여 학습을 했음. 그 결과 ImageNet 2012 set에서 88%의 정확도를 얻음.
x,y,w,h parameter는 이미지 크기에 맞춰 normalize 진행.
activation 함수는 밑과 같은 leaky rectified linear activation 함수 사용.
마지막 layer의 activation은 linear activation 사용.
SSE로 최적화하는 것이 간단한 방법이나, localization error와 classification error를 가중하기 때문에 이상적이지 않다고 함. object가 없는 grid cell의 confidence score은 0에 가깝고 이것이 object가 있는 grid cell의 가중치에 영향을 주어 모델을 불안정하게 하고 diverge하게 만듦. 따라서 coordinate predictions의 loss를 높이고 object가 없는 box의 confidence prediction의 loss를 낮춤.
YOLO에서는 다음과 같은 loss function을 쓴다고 한다.
λcoord : coordinate loss (5)
λnoobj : no object loss. (0.5)
1ijobj : jth bounding box predictor in cell i is “responsible” for that prediction
1iobj : if object appears in cell i
x,y : coordinate
w,h : image width and height
C : Pr(Class|Object)