전공관련/기타 etc.

HOG Feature / Descriptor

매직블럭 2014. 12. 10. 18:23



일반적으로 보행자 검출이나 사람의 형태에 대한 검출에 많이 사용되는  HOG Feature


Histogram of Oriented Gradients 의 줄임말로 image의 지역적 gradient를 해당영상의 특징으로 사용하는 방법이다.


cell 이니 block 이니 하면서 가끔 다시보면 햇갈릴떄도 있는 개념. 정리해두자.


HOG feature 를 계산하는 순서는 일단 다음과 같다.


영상에서 Gradient를 계산

Gradient 를 이용하여 Local Histogram 생성

Local Histogram 을 이어붙여 1D vector 생성(HOG Feature)


순서만 보면 참 심플한 방식이다.


각 순서를 보기전에 일단 몇가지 개념을 짚고 넘어가자.

Cell, Block 의 구분정도만 해 주면 되겠다. 일단.


영상은 기본적으로 픽셀들의 집합인건 잘 알고있지.


이런 픽셀들을 몇개 묶어서 소그룹을 만들면 그게 cell 이되는거다.

또 다시 셀들을 몇개 묶어서 그룹을 만들면 그게 block 이 되는거고.


아래 그림을 보면 쉽게 이해가 가겠지. 

한칸한칸이 픽셀, 같은색으로 묶인 픽셀들이 하나의 셀 (2x2 pixel)

또 네개의 셀들이 묶인 그룹하나가 block(2x2 cell, 4x4 pixel)


paper에서 얘기한 크기는 64x128크기를 가지겠지만 그건 그리기 너무 크니까 보기쉽게 간략화 해서 본다고 생각하자.




뭐 이런 개념이 있다는거 짚고 넘어가기로 하자. 



이제 제일 먼저 영상에서 gradient를 계산해야 한다.

gradient 를 계산하기위해 먼저 영상에서 edge를 계산한다.


일반적으로 아래와 같은 많이쓰는 다양한 edge kernel 이 있다.


실제 edge 검출에서는 sobel kernel을 많이 사용하는데 본 paper에서는 성능이 좋지 않다고 얘기한다.



그럼 edge를 검출하기위해 어떤 방식을 쓰냐 하면 


아래와 같은 가장 심플한 1D kernel 을 사용한다.



그냥 쉽게 말해서 양옆에 픽셀값을 빼준단 얘기다.

간단하다.


x축 방향 edge와 y축 방향 edge를 계산했으면 이 두 값을 이용하여 

orientation을 계산한다.


삼각함수 중에서 arctan 함수를 이용하면 두 edge에 의해 발생하는 orientation을 구할 수 있다. 


이러한 orientation을 그냥 다쓰면 histogram의 bin 이 int 형태로 사용한다 해도 360개나 된다.

너무많아.


그래서 적당히 quantization 해주도록 하자. 40도 단위로 나누는 9개의 bin 이나 24도 단위로 나누는 15개 bin 을 사용해도 좋고

사용자 맘대로 나눠도 된다.


성능은 논문에서 말하는게 제일 좋다고 하겠지! 


자 이러면 이제 영상으로부터 orientation map 을 만들어 낸거다.


얘를 histogram으로 만들고 적당히 이어붙이면 HOG feature 가 되는거지.



이제 여기서 앞에서 봤던 cell 과 block 의 개념이 들어온다.

 histogram은 cell 단위로 생성하고 얘를 이어붙이는 방식이 block의 움직임에 의해 결정된다.


각 셀별로 histogram 을 만드는데 위에서 orientation 을 몇개의 bin으로 나눴는지가 histogram 의 index가 된다.

해당 index에 속하는 pixel의 개수가 histogram의 높이가 되는거고.


이런식으로 모든 cell에 대하여 histogram을 생성.





이제 이런 histogram을 이어붙이는 방법에 대한 문제다 


block 을 움직일떄 overlap 하냐 마냐의 경우도 사용자의 선택에 따라 달라질수 있다.


일반적으로 overlap 하는 경우에 는 아래의 그림과 같이 적당히 overlap 하면서 shift 한다.


paper 에서는 하나의 block 이 16x16 pixel 로 이루어 져 있고 8 pixel 씩 overlap 하면서 shift 한다.







앞서 메모해뒀던 글[Function] HoG Destriptor in OpenCV ] 에서도 언급했지만


아래의 사이트에서는 이미지를 업로드 하면 해당하는 HOG Feature의 시각화 된 모습을 볼 수 있다.


http://web.mit.edu/vondrick/ihog/


학교 simbol 을 이용하여 테스트 해 본 결과.

정리할라고 시작했지만 하다보니 귀찮아져서 급마무리..