페이지

2021년 8월 17일 화요일

객체 탐지는 어떻게 작동하는 걸까? – 2편

 지역 제안(Region Proposal)

지난 1편에서 객체 탐지를 위하여 슬라이딩 윈도우 탐지라는 것을 사용한다는 것을 배웠다, 슬라이딩 윈도우 탐지 방식은 이미지 분류에 뛰어난 성능을 자랑하는 합성곱(Convolutional) 신경망을 사용하지만, 슬라이딩하며 움직이는 모든 윈도우에 대해서 합성곱 연산을 시행하기 때문에 연산자원도 많이 들고 당연히 속도가 느리다는 단점을 살펴보았다. 이를 극복하기 위하여 완전 연결층(Fully Connected Layer)를 합성곱으로 변환하여 객체 탐지의 전체 과정을 합성곱 계산을 하도록 변경함으로써 연산비용 측면에서 개선하는 구조를 갖게 하는 방법을 배웠다. 그러나 슬라이딩하며 움직이는 모든 윈도우를 합성곱 신경망 연산으로 수행한다는 그 자체가 엄청난 연산수행을 필요로 한다. 이것을 개선하는 방법은 없을까? 이를 개선하기 위하여 지역 제안이라는 방법을 제안하였다. 논문은 여기.

R-CNN이라는 방법을 제안하는데 이는 Region CNN(합성곱)의 결합을 의미하며 즉, 전체 윈도우를 합성곱 연산을 하는 대신, 물체가 있다고 생각되는 지역만 합성곱 신경망 수행을 하자는 생각이다. 아래 그림 1을 보면, 좌측의 영상 입력을 분할(segmentation) 알고리즘이라는 것을 사용하여 우측과 같은 결과를 얻고, 여기에서 ①,,③과 같이 관심을 가지지 않아도 되는 배경과 같은 윈도우는 건너뛰고 실제로 객체(물체)로 생각되는 지역만 합성곱 신경망 수행을 하자는 것이다.

 



<그림 1. 지역 제안을 위한 분할 알고리즘>

예를 들어, 위 그림1의 분할이 되어 보이는 영역의 약 2000개의 윈도우만 선택하여 지역화 분류를 수행해보자는 생각이다. 이는 모든 슬라이딩 윈도우를 연산하는 것에 비하면 훨씬 작은 숫자이다. 따라서 R-CNN은 지역을 제안하고 그 지역을 분류하여 한 번에 하나씩 물체의 레이블(사람, 휴지통 등과 같은)과 경계상자(bounding box)를 출력한다. 그러나 R-CNN 알고리즘의 약점은 아직도 속도가 꽤 느리다는 점이다.

 

개선된 지역 제안 알고리즘들

Fast R-CNN , R-CNN이 선택된 지역 윈도우의 분류 연산만을 수행하는 것을, 지난 뉴스레터 1편의 완전연결층을 합성곱 층으로 변환하여 연산 비용 측면에서의 개선을 꾀한 것과 유사하게, 슬라이딩 윈도우의 합성곱(convolutional) 연산으로 수행하여 개선을 도모한 것이다. 논문은 여기이 방법은 R-CNN의 성능을 한 단계 더 향상시킨다. Fast R-CNN의 단점은 지역 제안을 위한 클러스터링 단계가 여전히 꽤나 느리다는 점이다. 무슨 뜻 인가하면, 제안된 여러 지역의 경계박스 중에 실제로 객체를 중첩되지 않고 정확하게 감싸는 경계박스를 결정하는데 있어 속도가 느리다는 뜻이다.

Faster R-CNN, 지역 제안 네트워크(Region Proposal Network)이라는 신경망을 통하여 ROI(Region of Interest) 연산의 GPU 활용이 가능해져 Faster R-CNN 보다 더 높은 정확도를 달성했다는 정도로 이해하고 넘어가자.   논문은 여기. 하지만 Faster R-CNN 도 그 이후에 출현한 YOLO 알고리즘에 비해서는 아직 느리다. 지역 제안 기반의 알고리즘들은 먼저 지역을 제안하고 그리고 분류를 수행하는 2 단계를 거친다는 점에서 YOLO(You Look Only Once) 같은 한 번에 모든 것을 처리하는 알고리즘과 대별된다.

 

IOU(Intersection Over Union)

객체탐지에 있어서 경계박스가 정확히 객체 주위를 감싸고 있는지 어떻게 알 수 있을까? 또 다른 말로는, 어떻게 객체 탐지 지역화(localization)의 성능을 평가할 수 있을까? 이러한 경계박스(bounding box)의 유효성 검증에 IOU 함수가 사용된다. 아래 그림 2와 같이 객체를 탐지하는 경계박스 예상치가 얼마나 실측(ground truth) 경계방식과 겹치는 부분의 비율이 되는지를 산출하는 함수가 Intersection Over Union , IOU . 다시 말하면, Intersection over Union 즉 합집합 위의 교집합이라는 말이 의미하듯이 두 경계상자 면적의 합 (합집합)을 분모로 하고 그 위에 분자로 두 경계상자가 겹치는 부분(교집합) 즉 아래 그림 1의 ①로 표시된 면적을 분자로 하여 비율을 표시하는 것이다.

 



<그림 2. Intersection Over Union >

 

  예를 들어, 우선 실측(ground truth) 경계상자를 좌측의 bb1이라고 하고, 우측의 bb2를 예측하는 경계상자 값이라고 가정해보자. 만약 bb1 bb2 가 완벽하게 겹친다면, IOU 값은 1이 될 것이고 일반적으로 IOU 값이 0.5 보다 크거나 같으면 예측하는 경계상자 값이 비교적 정확한 범위로 간주한다. IOU 값이 1에 가까워질수록 예측하는 경계상자가 더 정확하다고 본다. , IOU는 두 경계상자의 겹침의 정도를 평가하는 척도다.

아래 그림 3, 그림2의 경계상자 좌표에 따른 IoU 값 산출 알고리즘이다.



<그림 3. 그림2에 대한 IoU 값 산출 알고리즘>

최대값 이외 억제 (Non-max suppression)

  위에 살펴본 경계상자의 IoU 값을 50%라고 설정했다고 치자. 문제는 IoU 값이 50% 이상이 되는 필요 이상의 경계박스가 표시된다는 것이다. 아래 그림 4와 같이 어떤 물체를 한번이 아니라 여러 번 감지할 수 있다는 것이다. Non-max suppression 은 알고리즘이 각 물체를 한 번씩만 감지하게 보장한다.

 



<그림 4. 필요이상의 경계박스 예>

 

최대값 이외 억제 알고리즘이 먼저 하는 일은 그림 4의 경계박스의 신뢰도 확률이 가장 높은 (이 경우에는 0.9의 빨간색 경계상자)를 먼저 선택하고 나머지 비교적 높은 IoU 를 표시하는 0.7 신뢰도의 보라색 그리고 0.6 신뢰도의 파란색 경계박스를 억제하는 것이다. 이는 지난 뉴스레터에서 목표 레이블 벡터라고 하는 곳의 값 P_C를 통해 최대값을 먼저 선택하여 물체를 찾았다고 경계박스를 강조하고 경계박스를 강조 표시한다. 그리고 나서, 최대값 이외 억제 알고리즘에 의해서 나머지 경계박스들을 검사해서 최대값의 경계박스와 겹치는 정도가 높은 것들(IoU 값이 높은 것들)을 억제한다. 위의 그림 4의 보라색 그리고 파란색 경계박스는 최대값 경계박스인 빨간색 경계박스와 많이 겹치므로 억제 대상이 된다.

 

Anchor Box

이제까지는 훈련세트 사진에 있는 각 물체들은 물체의 중심점에 해당하는 격자에 배정되었다. 아래 그림 5를 보면, 3 X 3 격자의 사진에 자동차와 사람이 겹쳐 있다. 그리고 사람과 자동차의 중심점도 거의 일치해 보인다. 이럴 경우, 만약 한 격자에서 여러 개의 물체를 감지하고 싶으면 어떻게 해야 할까? Anchor Box를 사용하면 된다.

 



<그림 5. Anchor Box>

 

 위의 그림 5와 같이 두개의 Anchor Box 를 통해 서 있는 사람에게는 Anchor Box 1을 그리고 자동차는 Anchor Box 2를 만들어 사용해본다. 격자안에 두 물체가 겹치는 예를 들어, 8번째 격차 같은 경우는, 아래 그림 6과 같이, ①번의 사람에 대한 내용이 들어있는 Anchor Box 1 값을, 이어서 아래에 ②번에 자동차에 대한 값을 넣어 사용한다.

 



<그림 6. Anchor Box 12의 결합>

 

이제 훈련세트 사진에 있는 각 물체들은 물체의 중심점과 가장 높은 IoU 를 갖는 anchor box 가 소속된 격자에 배정된다. 따라서, 위의 그림 5의 왼쪽 사진의 8번째 그리드의 경우에는, (grid cell, anchor box) 정보를 가지고 물체가 목표 레이블로 인코딩 된다.

 

YOLO(You Only Look Once) 알고리즘

 20165월 워싱턴대학의 레드몬은 You Look Only Once 라는 제목의 논문을 선보인다. 논문은 여기. 아래 그림 7과 같이 class는 보행자, 자동차, 오토바이로 3가지 이고, Anchor Box 는 ①과 ② 두개라면 y = 3 x 3 x 2 (anchor box) x 8 (한 개의 anchor box 당 목표 벡터 레이블 차원 수) 로 나타낼 수 있다. 왼쪽 훈련 이미지를 대상으로, 자동차는 anchor box ②에 모양이 좀 더 가깝다고 보고 (자동차는 넓이가 길쭉하니까) 그림 7의 ④번 행렬의 하반부 값 즉 anchor box 2 값을 갖게 된다. 이때 8개 차원중 class 를 나타내는 맨 마지막 3개의 차원은 010 으로 두번째 digit 1로 되어 자동차임을 알 수 있다. 왼쪽 훈련 이미지의 첫번째 격자의 배경은 물체가 없으므로 ③의 값을 취하게 된다.

 



<그림 7. YOLO 훈련>

 

 아래 그림 8과 같이 YOLO 신경망 구조는 24개의 합성곱 층과 2개의 완전 연결층으로 이루어져 있다. 맨 마지막의 output layer 가 우리가 예시에서 살펴본 것과 같은 (이 경우는, 3 grid 인 경우) 3 x 3 x 2 x 8 차원을 가진 벡터를 출력한다.



<그림 8. YOLO 구조>

 

YOLO 신경망에서 예측을 하는 방식

 아래 그림 9와 같이, YOLO 알고리즘으로 구현된 신경망이 예측을 하는 방식은 왼쪽의 입력 이미지에 대하여 3 X 3 의 격자를 설정하여 각 격자에 대해서 훈련을 진행하다가 8번째 격자를 만났을 때, ①과 같은 목표 레이블 벡터를 만들어 8번째 그리드에 anchor box 2의 값이 반영되어 bounding box 값과 물체 class 값을 벡터안에 남기게 된다.



<그림 9. 신경망이 예측을 하는 방식>

 

결언

  지금까지 2회에 걸쳐 객체 탐지가 작동하는 방식에 대해 살펴보았다. 초기 지역화와 분류로부터 슬라이딩 윈도우 방식, 완전 연결층을 합성곱 신경망으로 변환하는 개념, 지역제안과 개선된 지역제안 알고리즘들 그리고 IoU 와 최대값 이외 억제, Anchor Box의 개념 그리고 YOLO 알고리즘으로 객체 탐지와 관련된 기본적인 개념들을 살펴보았다. YOLO 알고리즘은 즉 객체가 있는 격자 셀에서만 훈련을 통해 y 벡터 행렬을 도출함으로써 이전의 모든 격자 셀에서 훈련을 감행했던 방식과 대조되며 효율성과 실시간 탐지의 가능성이 인정되어 이후 꾸준히 새로운 버전이 출시되고 있다

댓글 없음:

댓글 쓰기