티스토리 뷰

[업데이트 2018.07.06 15:28]


열두번째 요약할 논문은 "You Only Look Once: Unified, Real-Time Object Detection"(https://arxiv.org/pdf/1506.02640.pdf) 입니다. YOLO의 새로운 접근 방법의 핵심은 하나의 convolutional neural network 모델에 기존 3가지 단계로 분리되어 있던 Object Detection 과정 통합하여 end-to-end 학습한 것입니다. 아래의 Figure 1. R-CNN의 경우 2.후보 영역 추출3.CNN 학습 과정 그리고 4.분류기 모두 별도로 동작하여 성능이 많이 떨어지게 됩니다. 향후 이를 보완한 Fast R-CNN, Faster R-CNN이 나오지만, YOLO의 경우 후보 영역 추출 방법 등에 차이가 있습니다. 



아래의 Figure 1에서 알 수 있듯이 YOLO의 경우 위의 3가지 단계에 대한 학습이 하나의 convolutional neural network안에서 통합되어 동작하고 있음을 알 수 있습니다.



YOLO의 경우 실시간 환경에서 좋은 성능을 보여주고 있는데, base model 의 경우 45 FPS, base model보다 작은 버전의 네트워크를 가진 Fast YOLO의 경우 155 FPS 처리 능력을 보여준다고 합니다.  또한 학습된 YOLO 모델로 Generalization 테스트 결과, Artwork과 Natural 이미지 인식에 있어서 DPM이나 R-CNN 등 더 좋은 성능을 보여주고 있습니다. (Figure 6)



YOLO는 기존 Object Detection에서 정의하던 것과 다르게 single regression problem으로 문제를 재정의하게 됩니다. Image pixel로 부터 bounding box coordinates 및 class probabilities를 구하게 됩니다. YOLO는 Figure 1에서 알 수 있듯이 3단계를 거쳐 동작합니다.


1. Resize Image

YOLO에서 사용하는 CNN의 입력 이미지 사이즈는 448x448x3으로 원본 이미지를 CNN 입력 이미지 사이즈에 맞게 resize합니다. 448x448은 YOLO v1 기준(본 논문)의 입력 이미지 사이즈로 YOLO v2에서는 416x416 또는 임의의 사이즈(설정값에 따라)가 가능하다고 합니다. Coursera YOLO v2 exercise의 경우 입력 이미지 사이즈로 608x608을 사용하고 있습니다.


2. Run convolutional network

아래의 Figure 2.는 YOLO의 모델이며, 입력 이미지를 CNN을 통해 학습하게 되면 최종적으로 prediction을 위해 아래와 같이 encoding된 tensor를 출력값으로 얻게 됩니다. 결국 입력 이미지에 대해 S x S grid로 해당 정보를 표현하게 되며(Convolution implementation of sliding window 참고, http://arclab.tistory.com/166), 각 grid cell에 B개의 bounding box(anchor box)와 각각 bounding box(x,y,w,h)에 해당하는 confidence score(pc, 해당 bounding box안에 예측하는 사물이 존재하는지) 표현되며, 각 grid cell별 C개의 class probabilities를 encoding하게 됩니다.


최종 encoding되어 출력된 tensor 사이즈는 다음과 같습니다. 여기서 5는 위에 이야기한 정보 bounding box coordinates(x,y,w,h) 4개 + confidence score(pc) 1개 = 5개를 의미합니다.


S x S x (B * 5 + C)



본 논문에서는 Pascal VOC 데이터셋을 실험하기 위해 S = 7, B = 2, C = 20(Pascal VOC 데이터셋 클래스 개수)로 지정되며, 따라서 YOLO에서 구성한 CNN 구조는 다음과 같으며, 최종 encoding된 출력 사이즈는 7x7x30입니다.



따라서 YOLO에서 쓰는 학습 데이터의 정답 레이블의 경우 아래와 같이 구성될 수 있습니다. (Coursera Autonomous driving application - Car detection exercise 참고)



조금 더 자세한 설명을 위해 Cousera 자료(YOLO v2)를 참조하면, 다음과 같습니다. 여기서 S x S grid cell size는 19 x 19 이며, 각 grid cell별 anchor box(bounding box) 개수는 5개, 그리고 각 anchor box별로 class 개수 80개(예제에서 사용한 데이터셋 class 개수) + 5개(bounding box x,y,w,h + confidence score) 총 85개로 아래와 같이 출력 사이즈가 정해집니다.


- 입력 : (m, 608, 608, 3)   // m은 batch size

- 출력 : (m, 19, 19, 5, 85)

=> YOLO Architecture, IMAGE (m, 608, 608, 3) -> DEEP CNN -> ENCODING (m, 19, 19, 5, 85)




3. Non-max Suppression

마지막 단계에서는 학습을 통해 얻은 encoding된 tensor (m, 19, 19, 5, 85)의 각각의 정보를 가지고 2단계를 거치게 됩니다.


1) Score-thresholding



첫번째로 각 grid cell별 anchor 박스별 probability score를 계산하여 주어진 threshold 값보다 작은 box들은 제거합니다. 위의 수식처럼 confidence score(pc)와 80 class 확률값간에 element-wise 곱셉을 수행하여 anchor 박스별 probability score 계산합니다.


2) Non-maximum suppression(NMS)

마지막으로 1번 단계에서 남은 anchor box에 대해 아래의 절차를 통해 NMS를 수행합니다.



(1) 현재 남은 box에서 가장 큰 probability score를 가진 box를 선택합니다.

(2) 선택된 box와 ground truth box값간의 IoU를 구하여, 특정 threshold 값보다 작은 경우 목록에서 제거합니다. 여기서 IoU는 두 영역간의 합집합과 교집합의 비율로 ground truth 영역과 겹치는 영역이 커질수록 IoU값은 1에 가까워지게 됩니다.

(3) 현재 선택된 box의 probability score보다 작은 값이 없을때까지 1,2번 단계를 반복합니다.




최종적으로 테스트 이미지를 YOLO v2모델에 입력값으로 주어 prediction을 수행한 결과입니다.




* 참고:

[1] https://arxiv.org/pdf/1506.02640.pdf

[2] https://www.coursera.org/learn/convolutional-neural-networks/home/week/3

[3] https://groups.google.com/forum/#!topic/darknet/qv1fxnsf62E

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함