HOG Feature / Descriptor
일반적으로 보행자 검출이나 사람의 형태에 대한 검출에 많이 사용되는 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 을 이용하여 테스트 해 본 결과.
정리할라고 시작했지만 하다보니 귀찮아져서 급마무리..