2015년 5월 13일 수요일

Vehicle place recognition

작성 중...

기 학습된 큰 규모의 CNN을 가져와서 이미 방문한 장소의 인식에 사용한다.  Overfeat를 사용하는데, overfeat는 대용량의 big data를 학습한 것이라서, 여러 사물에 대한 discriminative 능력이 뛰어날 것이라는 가정을 적용한 것이 아닐까 싶다.  이미 학습이 잘 되어 있을테니 새로운 입력 영상에 대한 특징의 분별 능력이 우수할 것이라는 가정을 사용한다.

Overfeat은 ImageNet 2012의 db를 이용하여 학습된 것인데 120만개의 이미지로 1000개의 부류를 학습하였다.

장소 인식 테스트는 Eynsham db의 9,575프레임(차량이 약 70 km을 주행하면서 얻은 데이터이다)에 대해 수행하며, 주행은 두 번으로 나누어 진행한다. 첫번째는 모델 db를 추출하는 과정, 두번째는 테스트 db를 추출해서 기 구축된 모델 db와 비교하여 장소를 인식하는 과정이다.

먼저 overfeat의 구조를 살펴 본다.
overfeat는 input층을 제외하고는 모두 21개의 층을 가진다:

Input,
conv-maxPooling-ReLU 층 2개, (6 layers)
conv-zeropadding$^{(1)}$-ReLU$^{(2)}$ 2개, (6 layers)
conv-zeropadding-ReLU-maxPooling 1개, (4 layers)
FC-ReLU 2개, (4 layers)
FC 1개(output), (1 layers)



그림 1. Overfeat의 구조. 색으로 각 layer를 표시.



장소 인식 방법은 모델 특징과 테스트 특징의 Euclidean 거리를 사용하며, overfeat에 도로 영상을 입력시켜 나온 특징(중간 층의 특징을 포함)을 상호 비교하는 것으로 인식을 수행 한다.


overfeat의 중간 층의 특징은 21개 층에서 모두 다 정의될 수 있지만 실험 결과를 보면 중간 층인 9,10 layer의 특징이 좋은 성능을 낸다.



먼저 이미지는 흑백영상으로 만들고 histogram 정규화를 해서 밝기의 variation을 줄여서 사용한다. 크기는 256x256조정해서 overfeat에 입력한다.
(overfeat 논문을 참고하면, 231x231보다 더 큰 이미지는 처리할 수 있다. 256x256으로 만들어 사용한다)


각각의 layer output을 $L_k(I),k=1,...,21$이라 하면, 비교를 위한 confusion matrix$^{(3)}$를 다음과 같이 구성한다:

$M_k(i,j)=d(L_k(I_i),L_k(I_j))$, $i=1,...,R, j=1,...,T$

여기서 $R$은 training image의 수이고, $T$는 test image의 수이다.  $M_k(i,j)$는 $i$번째 training image와 $j$번째 test image사이의 Euclidean 거리를 나타낸다.


매칭이 잘 되는 위치를 찾기 위해 거리 값이 가장 작은 특징 벡터를 가진 요소를 찾는다:

$M_k(j)=arg min M_k(i,j)$ for all $i$, and $j=1,...,T$


매칭 후보를 찾는 방법은 두 가지를 이용하는데, 첫번째는 spatial continuity조건이다.
연속된 두 테스트이미지가 주는 특징 거리의 차이가 작을 것이라는 가정이다:

$if \left\vert M_k(u-1)-M_k(u) \right\vert \le \epsilon$, $\forall u \in [j-d,j]$
여기서 $j=d,...,T$

$j$는 현재 테스트 이미지이고 $d$는 이전 시간으로 얼마 만큼 먼가를 나타낸다.

예를 들어 $d$=5라면, 현재 프레임 $j$에서 이전 5프레임 동안 두 인접 $M$값의 차이가 모두 작아야한다. 즉 traing-test 특징 값의 차이가 일정시간 동안 계속 작다면 상호 매칭으로 본다.

두번째는 매칭점 사이의 기울기 평가인데 간단하므로 논문을 참고한다.




References
[0] Convolutional neural network based place recognition, Z.Chen, M.Milford etc., 2014. Queensland Univ. of Tech.
[1] zero-padding, 이미지에 mask로 convolution연산을 하면 경계를 일부분 먹으면서 결과영상의 크기가 줄어든다. 이것을 원 이미지와 동일한 크기를 만들고 경계의 값은 0으로 채워준다.  또 다르게는 미리 경계를 0으로 두른 후에 마스크 연산을 하면 처리후 경계 부에 검은 띠 형성을 막을 수 있다.
[2] Rectifier activation function으로 $f(x)=max(0,x)$로 정의된다.
[3] Confusion matrix에서 가로(행)은 실제 부류를 나타낸다. 열은 예측된 부류를 가리킨다. 아래 표의 1행에서 실제 Cat를 Cat로 예측한 샘플은 5개, Dog로 오분류한 것은 3개, Rabbit로 분류한 것은 0이다.

(from wikipedia)