Submit : Redmon, Joseph, et al. CVPR (2016)
Paper : www.cv-foundation.org/openaccess/content_cvpr_2016/html/Redmon_You_Only_Look_CVPR_2016_paper.html
Code : github.com/qqwweee/keras-yolo3
0. Before
Image Object Detection 방법 중 하나인 R-CNN은 속도도 느리고 최적화가 어렵다는 문제점이 있습니다. Region proposal을 한 뒤 proposal에서 분류를 하기 때문입니다.
YOLO는 이미지를 일정한 개수의 grid로 나눈 뒤, 각 grid별로 object probability를 구하는 방식입니다. 각 grid에는 같은 object probability를 가지는 여러 bounding box(object 후보군)이 있을 수 있습니다.
1. Introduction
YOLO는 이미지 내 bounding box와 class probability를 single regression problem으로 간주합니다. 그래서 이미지를 한 번 보는 것 만으로 object의 종류와 위치를 추측할 수 있습니다. single convolutional network를 통해 여러 개의 bounding box에 대한 class probability를 계산합니다.
(1) YOLO의 장단점
- YOLO는 처리 과정이 간단해서 속도가 빠릅니다.
- 기존의 다른 real-time detection system에 비해 2배 정도 높은 mAP를 보입니다.
- image 전체를 한 번에 바라보기 때문에 class에 대한 context 이해도가 높습니다. 이로 인해 낮은 background error(False-Positive)를 보입니다.
- object에 대한 좀 어 일반적인 특징을 학습합니다. Natural image로 학습한 뒤 artwork에 테스트해도 다른 detection system에 비해 훨씬 높은 성능을 보입니다.
- 하지만 상대적으로 정확도가 낮습니다. (특히 작은 object)
2. YOLO의 동작
yolo는 1개의 neural net을 사용. image 1개를 가지고 모든 object의 bounding box를 찾는다
1. Input Image를 S x S 개의 grid로 나눕니다.
2. 각각의 grid cell에 대하여 B개의 bounding box를 만듭니다. 그다음 각 bounding box에 대한 confidence score를 예측합니다.
confidence score란 model이 각 bounding box 내 object가 존재하는지 model이 확신하는 정도입니다. ($Pr(Object)*IoU(^{truth} _{pred})$) $Pr(Object)$는 bounding box 내 object가 있을 확률을 의미합니다. cell 내 object가 없으면 confidence score는 0이 됩니다.
3. 각각의 grid cell은 Class 개수인 C개의 조건부 확률을 가집니다.
Conditional class probability는 하나의 grid cell에 있는 object가 어떤 class에 속하는지 나타내는 값으로, $PR(Class_i|Object)$입니다. Bounding Box의 개수와 상관없이 grid cell 하나당 하나씩 구합니다. 즉 하나의 grid cell에 있는 bounding box는 같은 object로 예측합니다. prediction layer의 tensor 크기는 $S x S x (B*5 + C)$입니다.
4. 각각의 bounding box는 x, y, w, h, confidence로 구성됩니다.
(x, y)는 bounding box의 중심점을 의미합니다. grid cell의 가로/세로 크기를 1로 봅니다. 예를 들어 bounding box가 이미지의 정 중앙에 있으면, x와 y 값은 각각 0.5, 0.5입니다.
(w, h)는 bounding box의 크기를 의미합니다. grid cell의 가로/세로 크기를 1로 봅니다. bounding box의 크기가 이미지 크기의 10%라면, w, h 값 둘 다 0.1입니다.
test를 할 때는 conditional class probability x bounding box의 confidence score를 곱하여 class-specific confidence score를 얻습니다.
논문에서는 yolo의 성능평가 때 pascal voc를 사용하였으며, s, b, c에는 각각 7,2,20이 할당되었습니다.
3.Network
(1) Yolo의 네트워크 구조
YOLO는 GoogleNet을 기반으로 하나 inception module 대신 1x1 convolution을 사용합니다. Convolution layer는 24 layer이고, fully-connected layer는 2 layer입니다. (Fast YOLO는 conv layer가 9 layer입니다.) 네트워크의 output은 7x7x30입니다.
(2) network로 yolo 이해하기
각각의 grid cell은 7x7개, 즉 49개입니다. 각각의 grid cell은 bounding box가 b개 있는데 위 이미지 기준 b=2입니다. bounding box에 대한 정보로 x, y, w, h, c 값이 채워져 있습니다.
6~10번째 값은 두 번째 bounding box에 대한 정보입니다. 1~10번째 값은 2개의 bounding box에 대한 정보를 담고 있습니다.
이 YOLO network는 class가 20개입니다. 나머지 20개 값은 20 class에 대한 conditional class probability를 가집니다.
각 bounding box의 confidence score, 그리고 그 bounding box가 있는 cell의 conditional class probability를 곱하면 bounding box의 class specific condifence score를 구할 수 있습니다.
이 계산을 각 bounding box에 대해 하게 되면 총 49개 grid에 대해 각각 2개의 bounding box, 총 98개의 class specific confidence score를 얻을 수 있습니다.
이 98개의 class specific confidence score에 대해 각 20개 클래스를 기준으로 non-maximum suppression(NMS)을 하여 object에 대한 class 및 bounding box localization을 결정합니다.
4. training process
(1) Todo
Grid cell에 있는 여러 bounding box 중에서 ground-truth box와 IOU가 가장 높은 bounding box를 predictor로 설정합니다.
- (1) : grid cell i에 object가 존재/ cell의 i에 있는 bounding box j
- (2) : grid cell i에 object가 존재하지 않음/ cell i에 있는 bounding box j
- (3) : object가 존재하는 grid cell (ground truth box의 중심점이 위치한 grid cell에 그 object가 있다고 간주합니다)
(2) loss function
Object가 있는 grid cell의 x, y, w, h에 대한 loss(1, 2), confidence loss(3), conditional class probability loss(5)를 계산합니다. Object가 없는 grid cell은 confidence score에 대한 loss(4)만 계산합니다.
- (1) Object가 존재하는 grid cell i의 predictor bounding box j에 대해 x, y의 loss를 계산
- (2) object가 존재하는 grid cell i의 predictor bounding box j에 대해, w와 h의 loss를 계산. 큰 box에 대해서는 small deviation을 반영하기 위해 제곱근을 취한 후, sum-squared error를 함(같은 error라도 더 큰 box의 경우 상대적으로 IOU에 영향을 적게 줌)
- (3) object가 존재하는 grid cell i의 predictor bounding box j에 대해 confidence score의 loss를 계산($C_i=1$)
- (4) object가 존재하지 않는 grid cell i의 bounding box j에 대해 confidence score의 loss를 계산($C_i=0$)
- (5) Object가 존재하는 grid cell i에 대해 conditional class probability의 loss 계산(correct class c: $p_i(c)=1$, otherwise:$p_i(c)=0$)
이 loss 함수에는 두 가지 파라미터 값이 있습니다.
- $\lambda_{coord}$: coordinates(x, y, w, h)에 대한 loss와 다른 loss들과의 균형을 위한 balancing parameter
- $lambda_{noobj}:$ object가 있는 box와 없는 box 간에 균형을 위한 balancing paratmeter. (일반적으로 image 내에는 object가 있는 cell 보다는 없는 cell이 훨씬 많기 때문)
(3) yolo의 한계
- 각각의 grid cell에는 하나의 class만 있습니다. 따라서 한 grid cell에 작은 object 여러 개가 있으면 제대로 예측하지 못합니다.
- Bounding box의 형태는 training data를 통해서 학습됩니다. 새롭거나 독특한 형태의 bounding box는 정확히 예측할 수 없습니다.
- Bounding box는 몇 단계의 layer를 거쳐 나온 feature map을 대상으로 예측합니다. 따라서 localization이 다소 부정확해지는 경우가 있습니다.
5. experiments
ImageNet 1000-class dataset으로 첫 20개의 conv layer를 1주일 정도 pre-training 합니다. DarkNet framework를 사용하며, 이후 detection을 사용할 수 있도록 모델을 바꿉니다. Pre-training을 끝낸 뒤 convolution layer 4개와 fully connected layer 2개를 추가합니다. (pre-trained layer에 convolution, fully connected layer를 붙이면 성능이 올라간다는 논문이 있기 때문입니다.)
detail 한 시각 정보가 중요하므로 image를 224 사이즈가 아닌 448 사이즈로 변경합니다. 예측할 bounding box의 width와 height는 0과 1 범위로 normalize 합니다. bounding box의 x, y 좌표값도 0과 1 사이의 값으로 normalize합니다.
이 모델이 추출할 cell에는 대부분 object가 존재하지 않아서 condifence score 값이 0이 되는데, 이런 경우의 gradient가 너무 커져서 모델이 부정확해줍니다. 따라서 λ_coord : 5, λ_noobj : 0.5 값을 곱해줍니다.
Hyperparameter는 아래와 같이 설정합니다.
- Batch size: 64
- Momentum: 0.9 and a decay of 0.0005
- Learning Rate: 0.001에서 0.01로 epoch마다 천천히 상승 시킴.
- 이후 75 epoch 동안 0.01, 30 epoch 동안 0.001, 마지막 30 epoch동안 0.0001
- Dropout Rate: 0.5
- Data augmentation: random scailing and translations of up to 20% of the original image size
- Activation function: leaky rectified linear activation
6. Result
다른 real-time object detect system에 비해 높은 mAP를 보여줍니다. fast YOLO의 경우 가장 빠른 속도를 보였습니다.
fast R-CNN과 비교했을 때 훨씬 적은 false-positive를 보였습니다(low background error)
Fast R-CNN과 같이 동작하면 fast R-CNN을 보완하는 역할을 할 수 있습니다.(low background error)
Natural image training을 한 뒤 artwork detection을 할 때 매우 강한 면모를 보였습니다.
7. Reference
'Paper review > Vision' 카테고리의 다른 글
[논문 리뷰] Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset (0) | 2020.06.14 |
---|---|
[논문 리뷰] Adversarial Examples Are Not Bugs, They Are Features (0) | 2020.06.14 |
[논문 리뷰] A Closer Look at Few shot Classification (0) | 2020.06.14 |
[논문 리뷰] Fast R-CNN (0) | 2020.05.24 |
[논문 리뷰] R-CNN: Region-based Convolution Network (0) | 2020.05.16 |