2015년 6월 29일 월요일

SPP net

SPP-net은 기존 conv-net과 달리 분류기(fc층)에 입력하기 위한 특징 갯수를 입력 영상 크기에 무관하게 추출할 수 있는 장점을 가진다.


기존 cnn에서 자동차나 등대는 crop 후 고정된 크기로 변경되어 conv층에 입력된다. 이는 fc 층이 항상 고정된 특징(즉, 고정된 크기의 특징맵) 수를 요구하기 때문이다.
SPP-net 에서 이미지는 크기 변경없이 그대로 입력된다. 이로 인해 fc층 직전 특징맵의 크기가 달라지는데 맵 크기가 달라져도 SPP에 의해 고정된 특징 수 추출이 가능하다.


아래에서는 물체 위치 추출 입장에서 spp 적용을 요약한다:


논문에서 R-CNN과 비교하여 주로 설명하는 이유는 물체 detection을 위한 후보 영역(window) 생성을 R-CNN처럼 Selective search를 사용하기 때문이다.

기존 R-CNN은 테스트 할 대상 이미지 내에서 2,000개 후보 영역을 생성시켜 각 영역을 검증하며, 2,000개의 영역은 중복되어 생성되기 때문에 계산량이 큰 문제가 발생한다.
각 후보 window는 227x227 크기로 만들어 net를 통해 특징을 생성하고 이 값을 SVM을 통해 분류한다.


이와 비교하여 SPP의 가장 큰 장점은 특징맵(conv-pool 반복 층에서 마지막 conv층 출력 map)$^{(1)}$ 크기와 무관하게 고정된 특징 수를 추출 한다는 것이다.  따라서, conv계산 한번 만으로 모든 후보 영역(window)에 대해 동일한 spp 특징(분류기(svm나 fc layer)에 넣기 위한) 수를 만들 수 있다.


상기 그림은 3-level spp를 사용하고 있고, bin이 4x4, 2x2, 1x1인 경우를 보여준다.  각 bin에서 max pooling을 사용한다.


R-CNN과 SPP 차이를 요약하면 R-CNN은 이미지 영역에서 직접 특징을 추출하지만, SPP는 특징 맵 영역에서 window-wise 특징을 추출한다.


만일 4-level SPP(spatial pyramid pool)를 사용한다면 (즉, 1x1, 2x2, 3x3, 6x6로 전부 50개) 3-level 보다 더 많은 수의 특징을 추출한다. 이 때 마지막 conv층 특징 map 이미지 수가 256개라면 50x256=12,800개 특징 추출이 가능하다.




위치 추출 학습에서 positive sample을 만들기 위해서는 ground-truth 윈도를 사용한다. negative sample은 약 30%정도 positive와 겹치게 추출한다. 만일 negative끼리 70%이상 겹치면 제거한다. 이렇게 만든 정/부 샘플을 SVM으로 학습하게 된다.




적용 방법은 2가지로 대상 이미지를 1-scale/5-scale 두가지로 크기 변경 후 실행하는데,
1-scale에서는 대상 이미지 작은 변의 크기(min(w,h)=s)를 688로 크기 변경 후에 실행.
5-scale에서는 s를 {480,570,688,864,1200}으로 스케일링 후 각기 적용한다.





특징 맵의 가시화



화살표는 특징 맵 내 가장 강한 응답과 이미지 내에서 해당 위치를 보여준다. Pooling을 통하여 이러한 특징을 추출한다.
차량에서는 윈도와 바퀴 부분이 강한 특징으로 추출된다. 우측은 다양한 영상 입력에 대해 강한 응답을 나타내는 영역을 보여준다. 차 윈도나 바퀴와 비슷한 외형 물체들이 표시 되었다.
두번째 그림에서는 ^ 형상 이미지 영역과 v 형상 이미지 영역에서 강한 response를 나타낸다.





이미지(또는 윈도) 크기에 무관하게 특징 갯수를 정하는 방법


주어진 스케치는 특징 맵 크기가 13x13이다. 요구된 bin이 3x3이라면 필기한 방법을 통해 얻어진 win크기 5와, stride 4를 적용하여 특징을 추출한다. 그러면 3x3개의 bin이 정의되므로 모두 9개 특징 추출이 가능하다.
여기서 a=13(맵 크기)이고 n=3(bin 수)에 대한 경우를 살펴 보았다. a가 바뀔경우라도 win과 stride만 재 계산해서 적용하면 항상 고정된 bin 수를 얻을 수 있다.



(주1) 일반적 CNN의 경우, 입력 영상 크기가 달라지면 FC층에 입력되기 직전인 마지막 conv층 맵 크기가 달라지므로 맵 크기에 따라 정의되는 특징 갯수가 달라지게 된다.




References
[1] Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition, PAMI 2015.



2015년 6월 3일 수요일

Multi-Box prediction

학습

물체 위치를 나타내는 출력노드가 400개(100개의 위치), 각 위치에 대한 confidence를 나타내는 출력노드가 100개인 CNN이 있다. 학습 되기 전의 CNN 내부 파라메터는 임의로 초기화되어 있다.

CNN은 하나의 학습 이미지에 대해 100개의 위치와 각 위치에 대한 100개의 conf를 출력하도록 구성된다. 이때 위치는 $p_i$, conf는 $s_i$로 표시한다. 따라서, 각 위치와 conf는 인덱스 i로 연결되어 있다.


학습 샘플은 내부에 복수 개의 물체를 가지고 있다. 따라서 ground-truth는 cnn이 예측한 위치와 일치하는 것도 있고, 그렇지 않은 것도 있을 것이다.

이때 위치가 일치하는 것 만을 학습에 반영시키기를 원한다. 즉 gt와 겹치지 않은 prediction은 학습에 기여하지 못한다.

따라서 예측된 위치가 gt 위치와 일치하는 것에 해당하는 i를 선정한다. 현 단계에서 물체 부류정보는 전혀 반영되어 있지 않다.


i=1~100이기 때문에 gt와 겹치는 위치를 가진 i만을 선정한다$^{(1)}$. 예를 들면 i={2,50,72}라고 하면 100개의 prediction 중에서 3개만 true와 일치하는 경우이다.



loss 함수의 정의는 box위치의 예측 값인 $p_i$가 true의 위치와 일치할 수록 좋고, conf $s_i$는 클 수록 좋게 구성한다.

따라서 loss함수를 수학적으로 모델링하고 이 loss함수를 minimize하도록 CNN의 파라메터들은 update된다.

학습동안 CNN의 파라메터들을 적절히 조정되서 $p_i$가 true와 가능하면 일치되도록, $s_i$는 가능하면 크지도록 갱신이 발생하게 된다.



상기한 네트웍 구조와 최적화 방법의 장점은 각 학습 sample이 입력되었을 때, 출력 값 중 true 라벨과 겹치는 prediction은 몇 개 되지 않기 때문에 갱신 연산이 빠르다는 것이다.

학습이 끝나면 새로운 이미지에 대한 출력은 prediction box위치가 가능하면 true와 잘 겹치고 conf도 큰 출력을 주게 된다.




분류

테스트할 이미지에 대해 다수의 내부 crop을 추출한다. 각 추출 crop를 CNN에 넣으면 100 개의 box와 conf 값이 출력된다.

또한 이 crop은 class를 prediction하는 부류 분류기에도 입력한다. 분류기는 crop이 무슨 물체를 가졌는지 출력을 주게된다. 따라서 각 crop은 부류에 대한 확률 값을 가지게 된다.


crop에 대한 데이터를 모으면, 각 crop에서 나온 100개 box의 위치 정보, 각 box의 conf 값, 또 각 crop은 부류에 속하는 확률 값을 가진다.


이때 특정 부류에 대한 box들을 모으고 각 box의 conf 값을 이용하여 nonmax supp하면 위치 detection이 가능하다.














각주
(1) Jaccard similarity.  두 영역의 교집합과 합집합의 비가 threshold(예를 들면 0.5) 이상인지를 평가.  $s_j(a,b)= {{a \cap b} \over {a \cup b}}$



Reference
[1] Scalable object detection using deep neural networks
[2] CVPR'2014 Tutorials