물체 감지(object detection) 개념 돌아보기

1. 개요

 

물체 감지는 한 장의 사진에 포함된 여러 물체에 대해 영역과 이름을 확인하는 작업

 

이미지의 어디에 무엇이 비치는지 알 수 있다

 

그림은 물체 감지 결과이다.

 

왼쪽 그림을 보면 이미지 내에 사람과 말이 있는 것을 알 수 있다.

 

오른쪽 그림에 사람과 말에 각각 테두리가 표시되어있다.

 

물체의 위치를 나타내는 테두리를 bounding box(BBox)라고 한다.

 

테두리의 왼쪽 상단에는 라벨명이 나오고, person:1.00, horse:1.00이 표시되어있다.

 

라벨명은 감지된 클래스를 보여준다.

 

사람은 사람으로, 말은 말로 감지되었다.

 

라벨명 후반의 숫자 1.00,...은 신뢰도(confidence)이다.

 

신뢰도 수치가 높을수록(최대 1.00) 얼마나 명확하게 감지했는지 알 수 있다.

 

 

2. 입력과 출력

 

입력은 이미지이고 출력은 다음과 같다

 

1) 이미지의 어디에 물체가 존재하는지 나타내는 바운딩 박스의 위치와 크기 정보

 

2) 각 바운딩 박스가 어떤 물체인지 나타내는 라벨 정보

 

3) 검색 신뢰도 confidence

 

 

3. bounding box의 표현

 

bounding box는 여러가지 표현방법이 있다.

 

다음은 대표적인 2가지 표현방법이다.

 

 

 

bounding box는 사각형을 만들기 위해 위 그림 왼쪽처럼 사각형의 왼쪽 xmin 좌표, 상단 ymin 좌표, 오른쪽 xmax 좌표, 하단 ymax 좌표를 지정한다.

 

왼쪽 상단이 원점 (0,0)이다.

 

 

SSD, single shot multibox detector알고리즘은 오른쪽 그림처럼 bounding box의 형태를 중심의 x좌표 cx, 중심의 y좌표 cy, bounding box의 너비 w, bounding box의 높이 h로 표시한다.

 

라벨 정보는 감지하려는 물체의 클래스 수 O에 어떠한 물체도 아닌 배경 클래스 하나를 더한 (O+1) 종류의 클래스이며 각 bounding box당 하나의 라벨을 구한다

 

신뢰도는 각 bounding box와 라벨에 대한 신뢰도이며, 신뢰도가 높은 bounding box만 최종 출력한다

 

 

4. SSD, single shot multibox detector 알고리즘

 

SSD는 입력 이미지의 크기를 300*300 픽셀로 바꾸어 입력하는 SSD300과 512*512픽셀로 처리하는 SSD512 두 패턴이 있다.

 

여기서는 SSD300에 대해 알아보자

 

SSD에서는 이미지에서 물체의 bounding box를 도출할 때, bounding box의 정보를 출력하는 것이 아니다.

 

일반적인 사각형 default box(DBox)를 준비해두고, 어떻게 변형시키면 bounding box가 되는지에 대한 정보를 출력한다.

 

default box를 변형시키는 정보를 오프셋 정보라고 한다

 

 

default box의 정보가 $(cx_d, cy_d, w_d, h_d)$인 경우 오프셋 정보는 $(\Delta cx, \Delta cy, \Delta w, \Delta h)$의 4변수이다.

 

SSD에서 바운딩 박스의 정보는 다음과 같이 나온다

 

$$cx = cx_d + 0.1\Delta cx \times w_d$$

$$cy = cy_d + 0.1\Delta cy \times h_d$$

$$w = w_d + exp(0.2\Delta w)$$

$$h = h_d + exp(0.2\Delta h)$$

 

위 식은 이론적으로 도출된 식이 아니고 SSD에서 딥러닝 모델을 학습시켜서 생겨난 계산식이라고 한다

 

 

5. SSD 감지 흐름 6단계

 

 

 

첫번째 단계는 이미지 전처리로, 300*300 픽셀 크기로 resize시키며, 색 정보 표준화도 수행한다

 

 

 

두번째 단계는 다양한 크기 및 화면 비율(가로,세로 비율)의 default box를 준비한다.

 

SSD300은 8732개의 default box를 준비하며, 각 default box는 입력 이미지와 관계없이 모든 이미지에 대해 똑같이 준비한다.

 

 

세번째 단계는 전처리한 이미지를 SSD 네트워크에 입력한다.

 

8732개의 각 default box를 bounding box로 수정하는 오프셋 정보 4변수와 default box가 각 클래스의 물체인 신뢰도 21개(21개는 각 클래스 수에 대응함)의 합계 8732*(21+4) = 218300개의 정보를 출력한다

 

이게 와닿질 않네 무슨말인지

 

 

 

4번째 단계는 8732개의 default box중 신뢰도가 높은 것을 상위에서 top_k개(SSD300에서는 200개) 추출한다.

 

default box에 대응하는 라벨은 그 중에서도 신뢰도가 가장 높은 클래스이다.

 

 

5번째 단계는 오프셋 정보를 사용해서 default box를 bounding box로 변형시킨다

 

4번째 단계에서 꺼낸 top_k개의 default box중 bounding box와 겹치는 것(같은 물체를 감지한 것으로 보이는)이 많다면 가장 신뢰도가 높은 bounding box만 남긴다

 

 

6번째 단계는 최종 bounding box와 라벨을 출력한다.

 

신뢰도의 임계치를 결정해서 그 이상의 신뢰도를 가진 bounding box만 최종적으로 출력한다.

 

잘못된 검출을 피하고 싶다면 높은 임계값을 설정하고, 검출되지 않는 것을 피하고 싶다면 낮은 임계값을 설정한다

 

 

TAGS.

Comments