페이지

2021년 8월 17일 화요일

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

 지역화 와 탐지

이미지에 있는 물체를 탐지하는 시스템은 어떻게 작동하는 지 살펴보기로 하자, 객체 탐지를 이해하기위해서는 우선 지역화(localization)와 탐지(detection)이라는 두가지 작업을 알아야한다. 지역화는 이미지에 있는 하나 이상의 물체 위치를 판별하여 크기에 맞게 상자를 주위에 그리는 것인 반면, 탐지는 하나 이상의 이미지 내의 물체를 지역화 하고 그 박스안에 물체의 종류(class)를 분류하는 이 두가지 작업을 합친 것이다. 따라서 객체 탐지는 이러한 두가지 작업을 동시에 수행해야하다는 점에서 컴퓨터비전 중에 도전적 과제로 인식되어왔으나 지난 몇 년간의 딥러닝 기반 기술의 발전으로 속도나 정확도 면에서 비약적인 발전이 있었고 현재 다양한 객체 탐지 사례에서 적용되고 있다.

 

경계 상자(bounding box)

지역화는 이미지에 있는 물체 위치를 판별하여 상자를 주위에 그리는 것이라고 하였는데, 아래 그림처럼 빨간색의 상자가 고양이 위치 주위에 그려져 있다. 이것을 경계 상자(bounding box)라고 한다. 즉 이미지 안에 고양이가 있고 이 고양이라는 물체(객체)를 좌표를 가진 경계 상자로 컴퓨터에 이미지 상의 위치를 획득되게 하는 것이 지역화이다. 아래 그림1처럼, 이해하기 쉽게 이미지의 좌상단에 좌표를 (0,0), 우 하단에 (1,1)이라고 가정하고 경계 박스의 중앙에 좌표 (bx, by) 그리고 넓이 bw, 깊이 bh라고 변수를 정의한다면,


<그림 1. 경계 상자의 좌표들>

경계 상자 정중앙의 (bx, by) = (0.5, 0.5) 이고, 높이, bh = 0.8, 넓이 bw = 0.5 가 될 것이다. 이미지 크기가 (1,1) 이라고 가정해서, 경계 상자의 높이는 전체 이미지의 80% 정도 크기로 표시되는 것으로 보고 0.8로 표시했다.

객체 탐지는 대상이 하나 혹은 그 이상의 물체(객체)를 탐지하기 위한 것이어서 아래 그림 2와 같이 여러 종류(class)의 물체(객체)들을 경계 상자를 통해 탐지하고 그 안의 물체의 종류(class)분류해내는 2가지 작업을 수행한다.

 


<그림 2. 객체 탐지 >

목표 레이블 y 값의 결정

만약 위의 그림 2와 같이 고양이, , 오리 3가지 종류(class)에 대해 객체 탐지를 실시한다고 하면 1. 오리, 2. 고양이, 3. 개 라는 3가지 물체 종류에 대해 아래 그림 3과 같은 합성곱 신경망(CNN)을 통과하게 될 것이다. 아래 그림 3과 같이, 입력되는 이미지의 분류(classification)를 담당하는 일반적인 합성곱(convolutional neural network) 신경망이 특성을 추출하는 합성곱(CNN)층을 거쳐 탐지하는 완전연결(fully connected) 층을 통과하여, 소프트맥스를 통해 이미지의 일치 여부를 판별하는 구조라면, 지역화를 위한 심층망 구조에서는 특성(feature) 추출의 컨볼루션 네트워크를 지나 탐지층을 거쳐 소프트맥스 대신에, 벡터를 츨력 값으로 하는 심층신경망 구조를 가질 것이다. 즉 지역화에서는 이미지 분류를 처리하는 목적으로 사용되는 일반적인 합성곱 신경망의 구조에서, 이러한 그림 3의 ①에 표시된 벡터를 최종 출력으로 하는 구조로 변경한다는 점이 다를 것이다. x값이 입력되는 이미지라면, 이 벡터가 포함하는 값들은 결국 목표 레이블 y 가 되는 것이다. 훈련을 통해 x 값들에 대응하는 y 값들이 만들어지게 된다.

 



<그림 3. 객체 탐지 신경망 구조>

 

위의 그림 3의 ①의 벡터에 만들어지는 내용을 들여다보면 아래 그림 4와 같다. 그림 4에서 ①과 같이, 이미지내에 물체가 있는 경우에는, P_C 위치의 값이 1로 세팅 되고 경계 상자의 좌표 bx, by, bh, bw 들이 그 다음 값들로 채워진다. 여기서 벡터의 첫번째 요소 P-C 는 물체(객체)를 가지고 있을 확률을 표시한다. 그리고 이어서 경계 상자에 포착된 물체의 종류(class)one hot vector 형식으로 채워진다. 즉 하나의 경계 상자에는 하나의 물체의 종류만 탐지된다는 것을 뜻한다. 이 경우 그림 4의 ①과 같이 탐지된 고양이가 있는 자리에 1로 세팅 된다. ②와 같이, 이미지 내에 물체가 없는 경우는 P_C 0으로 표시되고 나머지 값들은 신경 쓰지 않는다.



<그림 4. 목표 레이블 벡터>

손실 함수

위와 같은 훈련세트가 만들어진 다음에, 훈련을 위한 손실 함수를 살펴보면 다음과 같다.

그림 4의 ①과 같이 이미지 안에 고양이 물체가 있고 경계 박스의 실측 값(ground truth) 라고 할 때, 딥러닝을 통해 예측하고자 하는 값을  라고하면 손실은,



 , 위의 그림 4를 보면 y의 벡터가 8개 성분을 가지고 있는 벡터여서 실측값(ground truth) 과의 손실 값은 에측치  와의 각 성분 별 제곱 오차(square error)를 통해 산출된다. 그림 4에 보는 바와 같이, P_C 값이 1 이면 y1 = 1 이 되고 물체가 있다는 뜻이고 제곱 오차 손실 함수가 작동하겠지만, P-C 값이 0 이면 y1 = 0 이 되고 오직 관심은 첫번째 벡터 값 즉 P_C를 올바로 물체가 없다는 값으로 나타내는 가에 중점을 두게 된다. 여기서는 이해를 쉽게 하기 위해 제곱 오차를 손실로 사용했지만, 그림 4의 ①의 마지막 3 성분 즉 c1, c2, c3의 경우 우도손실을 소프트맥스에 기록하기도하고 P_C의 산출에 로지스틱회귀 함수를 사용하기도 한다.

 

슬라이딩 윈도우 탐지

  아래 그림 5와 같이 이미지의 고양이 물체를 탐지하기위해서는 우선 여러 종류의 고양이 물체가 입력 이미지에 안에 꽉 차도록 추출된(cropping) 이미지들을 1 이라는 레이블로, 그리고 물론 고양이가 아닌 이미지들도 0의 레이블을 주어 훈련시켜야 한다. 그런 다음 아래 그림 5와 같이 서로 다른 크기의 경계 상자들을 한 번에 하나씩 이미지의 좌상의 위치로부터 출발해서 일정 간격(stride)으로 모니터의 주사선이 움직이듯이 이미지 전체를 슬라이딩 하면서 경계 박스안에 있는 내용을 합성곱(convolution) 신경망에 입력하여 물체가 있는지 여부를 판별한다. 그런데 슬라이딩 윈도우 탐지는 직관적으로 보기에도 경계 박스에 들어온 모든 영상을 매 순간 합성곱 신경망에 보내어 계산해야 하는 무척 컴퓨팅 비용이 많이 드는 단점이 존재한다.

 



<그림 5. 슬라이딩 윈도우 탐지>

 

  이러한 합성곱 계산을 위한 컴퓨팅 비용 문제는 슬라이딩 윈도우에 꽤 좋은 솔루션이다. 객체 탐지의 전체 과정을 합성곱 계산을 하도록 변경함으로써 이러한 컴퓨팅 비용 문제를 개선할 수 있다. 합성곱 층은 2x2 필터 같은 것을 통하여 지역 패턴을 학습하는 데 반해, 완전연결 층은 입력 특성 공간에 있는 전역 패턴을 학습하는 근본적 차이가 있다. 이런 특징은 합성곱 신경망에 2가지 특성을 제공한다. 하나는 합성곱의 이동불변(permutation invariance) 특성이다. 이는 입력 벡터 요소의 순서에 상관없이 모델이 같은 출력을 생산하는 것이다. 두번째는 합성곱 신경망은 공간적 계층구조를 학습할 수 있다는 점이다. 첫 번째 합성곱 층이 작은 지역 패턴을 학습하면, 두 번째 합성곱 층은 첫 번째 합성곱의 특성으로 구성된 더 큰 패턴을 학습하는 식으로 층 간 가중치(weight)를 공유하는 특성이, 완전연결층이 n x n의 폭발적인 행렬 곱이 일어나는 컴퓨팅 비용에 비하면 훨씬 효율적인 것이어서 아래 그림 6과 같이 완전연결층을 합성곱 층으로 바꾸는 시도는 연산비용 측면에서 꽤 괜찮은 솔루션이 되는 것이다.

 

완전 연결(Fully Connected)층을 합성곱(Convolutional) 신경망으로

  객체 탐지를 하는 알고리즘이 아래 그림 6과 같이 14x14의 이미지 세 개(RGB채널)로 입력한다고 가정해보자. 우선 상단 그림을 보면, 그 다음 5x5 필러를 16개 사용하여 14x14x3 에서 10x10x16 으로 매핑한다. 필터를 이용하여 합성곱(convolution)을 하는 내용은 그림 7을 참조하자. 그림 7을 보면, 2x2 필터를 이용하여 4x4 화면을 3x3 으로 변환하는 것을 볼 수 있다

  반면, max pooling 은 그림 7의 우측과 같이 2x2 행렬 에서 가장 큰 값 즉 2 를 추출하는 것 즉 2x2 행렬에서 그 중 최고로 큰 값을 추출함으로써 예를 들어 2x2 입력을 대상으로 하면, 연산 이후의 값은 가로x세로 값이 절반으로 줄어드는 효과가 나타난다.

 


<그림 6. FC층을 합성곱 층으로 변환>



<그림 7. 합성곱(convolution)max pooling >

 

자 지금까지 살펴본 바와 같이, 완전연결층을 합성곱 층으로 바꾸는 시도는 결국 객체 탐지의 전체 과정을 합성곱 계산을 하도록 변경함으로써 연산비용 측면에서 개선하는 구조를 갖게 되었다.

댓글 없음:

댓글 쓰기