앗! 광고가 차단되었어요!

글 내용이 방문자께 도움이 되었다면, 광고 차단 프로그램 해제를 고려해주세요 😀.

전공 정리/인공지능 (Coursera)

YOLO Algorithm Shallow Notes

this-gpa 2020. 7. 31. 11:13

오늘은 Coursera에서 학습한 YOLO와 그와 관련된 알고리즘을 정리한다.

 

Object Detection 또는 Localization 문제를 해결하기 위해, 간단한 접근 방법으로는 다음과 같을 것이다.

  • 이미지의 일부분을 crop 한다.
  • 미리 학습된 classifier을 적용한다.

 

그래서 classifier가 object를 인식하면, 그 박스가 하나의 bounding box가 되는 셈이다.

 

하지만 이러한 접근은 연산적으로 비싸다. 그 이유는 다음과 같다.

  • 다양한 크기로 crop 해야 한다.
  • 이미지 전체를 일정 보폭으로 crop 하면서 predict 해야 한다.

 

만약 이 접근(Sliding Windows Detection)이 영상 문제에 사용된다면 성능이 매우 나쁠 것이다.

 

 

Andrew Ng 교수님은 위 접근의 Convolutional Implementation을 추가로 설명해주신다.

  • Sliding Window 크기를 기준으로 classifier을 학습시킨다.
    이때 모든 FC layer를 Conv layer로 변형한다. 이는 1. 출력 shape을 n에서 (1, 1, n)으로 변형시키고, 2. 1 X 1 Filter를 사용하여 구현할 수 있다. 그러므로 마지막 output shape는 (1, 1, c)이다.
  • classifier에서 사용된 연산들(Conv, Pool)과 학습한 파라미터를 타깃 이미지에 그대로 적용한다.

 

예를 들어 (14, 14) classifier을 학습시켰다면, 이 연산들과 파라미터를 (16, 16) 이미지에 적용하면 (2, 2, c)가 모델의 output이 된다. 이는 sliding window (14, 14)를 왼쪽 위/오른쪽 위/왼쪽 아래/오른쪽 아래에 적용한 결과가 된다.


YOLO Algorithm은 타겟 이미지를 그리드로 나누고 (일반적으로 19 X 19)

각 칸에 중심점을 두는 bounding box를 predict 하는 방식이다.

 

앞의 방법과는 전혀 다르며, 더 Deep Learning 한 접근이라고 생각되는데,

이는 신경망이 더욱 blackbox처럼 느껴지기 때문이다.

 

YOLO 네트워크의 마지막 output shape은 (19, 19, 5 + c)이다.

여기서 마지막 5 + c는:

  • 5는 해당 칸에 물체가 존재한다는 확률, bounding box의 height, width, center x, center y이다.
  • c는 분류(클래스) 개수이다. categorical을 가정한다.

 

그런데 하나의 그리드 칸에 여러 개의 객체가 중심점을 두는 경우,

그리고 하나의 객체에 대해 여러 bounding box가 존재하는 경우에 대해 고민해야 한다.

 

첫 번째 문제는 anchor box라는 개념으로 해결한다.

  • anchor box는 인식하려는 객체의 ratio 정보를 담고 있다.
  • 이를 여러 개 준비하여, 다른 anchor box에 속하는 객체 여러 개를 검출할 수 있을 것이다.
  • output shape은 (19, 19, # of anchor boxes, 5 + c)로 결정된다.
  • 다시 말하면, 각 anchor box type에 대해 bounding box를 생성하는 셈이다.

 

두 번째 문제는 non-max suppression와 IoU 개념을 사용한다.

  • 물체가 존재할 확률이 큰 순서대로 box를 선택하여, IoU라는 지표로 다른 box와의 intersection을 확인한다.
  • 이 지표가 threshold보다 크면 다른 box를 제거하여, 중복 탐지된 것들을 정리한다.
  • 단, 비교하는 box들은 가장 높은 확률을 가진 class가 같아야 한다. 중복 탐지는 같은 객체가 검출되는 상황이기 때문이다.

 

레퍼런스: Coursera, Convolutional Neural Networks