본문 바로가기

Computer Vision/패턴인식

Adaboost 와 Harr-like

4

 

정확히 밝혀진바가 없지만 몇몇 개발자의 말에 의하면

'푸딩 카메라'라는 널리 알려진 앱이 Adaboost 와 Harr-like 를 사용한다고 한다.

OpenCV 에서도 제공하고 있는 이 알고리즘은 상대적으로 빠르고 강인하여 많이 쓰이는듯 하다.

'푸딩 카메라' 경우 harr-like 를 통해 Feature 를 뽑아내고 서버로 보내면

서버에서 Adaboost 로 인식하는듯 하다;

Feature뽑는 연산이 이미지 전송보다 느리다면 이미지 통채로 보내서 서버에서 처리하려나? ㅎ;;

맞겠지?


Adaboost : Classifier 구성하는 기법

harr-like : Feature 구성하는 기법(?)

1. Harr-like Feature는 Harr-like Filer에 의해 계산되며, 0 또는 1의 값을 갖는다.

2. Harr-like Filter의 형태는 무수히 많이 존재할 수 있으며, 각각은 물체 분류를 위한

Classifier로서 사용될 수 있다.

3. 하지만 일반적으로 하나의 Harr-like Filter만으로 강건하게 물체 분류를 하는 것은 불가능 하다.

4. 3의 문제를 해결하기 위한 알고리즘이 바로 Ada-boost이다.

Ada-boost 방법의 역할 및 수행 과정은 다음과 같다.

1) 무수히 많은 Harr-like Filter들 중 가장 효과적인 것들만을 선택.

2) 선택된 필터들을 선형 조합하여 최종 Classifier를 구성

--> 여기서 선택된 Harr필터들을 약 분류기, 조합된 최종 Classifier를 강 분류기 라고 한다.

 

Viola-Jones

Viola-Jones 분류기 이론은 낮은 거절 비율로 높은 검출률을 얻기 위항 캐스케이드의 각 노드에서 AdaBoost 를 수행한다.

- Viola-Jones 분류기는 유사-하르 입력 특징들을 사용한다. 

- Viola-Jones 분류기는  적분영상을 사용하므로서 합계 연산을 빠르게 수행한다.

등등....의 특징이 있다...

 

Adaboost에 쓰이는 XML 파일을 만드는 방법은 http://hlena33.blog.me/30025530042 참고

5000개 정도의 샘플로 훈련을 시켜야... OpenCV 에서 제공하는정도가 나올듯  

 T는 학습 iteration을 나타내는 첨자이고 T회때 선택된 약한분류기의 신뢰도를 a_t로 나타냅니다.
신뢰도라고 한 이유는 선택된 약한분류기의 에러가 작을수록 이 a_t값이 높아지기 때문입니다.
약한분류기 ht는 얼굴일때 1, 비얼굴일때 0이니 어떤 입력 영상에 대하여 a_t값의 sum이 1/2 보다크면 최종 얼굴이라고 판단합니다.
단, 여기서는 cascade는 적용되지 않은 단일 스테이지에서의 내용입니다.

 


Adaboost 는 약한 뷴류기들을 이용해서 강한 분류기를 만든다.

퍼셉트론 분류기나 간단한 분류기들을 이용하여 특징값을 비교한다.

약한 분류기를 반복하면서 얻어낸 가중치를 분류기의 최종결과(참:1 거짓:0) 와 

곱한게 강한 분류기의 결과이다. 

가중치 a = 1/2*ln((1-e)/e) 를 해서 구하며 이는 exponential error loss 함수를 미분해서 나온 공식이라고 한다.

최초 에러율은 잘못분류한개수/전체개수 이며, 어떤곳에서는 1.0/특징값전체수 라고도 한다....

그 다음 에러율은 앞의 분류기의 결과(1 or 0) 을 이용한다. 


에러율은 그다음부터 좀 어려워진다고한다...

-_-;;아 어렵다......



Opencv 카페에서 ivyfore님이 올려준 내용이다. 출처는 아래표기.

 Step1) 디텍션 윈도우의 사이즈 및 약 분류기 생성에 사용할 wavelet template를 결정합니다.

아래의 그림을 봅시다.



위의 경우는 오직 하나의 wavelet에 대한 예제를 나타낸 것인데, 이를 통해 특정

wavelet template에 의해 생성될 수 있는 약분류기의 형태는 매우 많다는 것을 알 수 있습니다.

실제로 24 x 24(pixel)크기의 윈도우에 대해 5개의 source wavelet template를 적용하면,

대략 180,000개 이상의 약 분류기가 생성될 수 있습니다.

그렇다면, 이렇듯 수많은 약 분류기들 중 어떠한 것이 효과적인 물체 detection을 가능하게 해 줄까요?

그에 대한 해답을 제시하는 것이 바로 adaboost 학습 방법입니다.

(위예에서 보인 wavelet템플릿이 바로 하르 필터입니다.)

Step2) 생성할 수 있는 모든 약 분류기들을 생성합니다.

Step3) Adaboost학습 기법을 통해 Strong Classifier를 학습한다.

Adaboost학습 과정에 대한 설명은 아래를 참고하세요.

[Adaboost process]

i=1;

강분류기 = empty;

While( 강분류기의 성능 < threshold){

과정1) 모든 약 분류기에 대해, 모든 학습 샘플들을 테스트한다.

과정2) 최소 에러를 보였던 약 분류기 h_i 를 선택한다.

과정3) 과정 1), 2)에 근거하여 약 분류기의 가중치 w_i를 계산한다.

과정4) 강 분류기를 다음과 같이 업그레이드 한다.

새 강분류기 = 이전 단계의 강분류기 + w_i * h_i

과정5) 모든 학습 샘플에 대해 강분류기의 정확도 테스트.

과정6) i++

}

즉, Adaboost학습의 역할은, 수없이 많은 약 분류기들 중 가장 효율적인 것들만을 선택하고,

그것들을 선형적으로 조합합으로서 최상의 강 분류기를 만드는 것입니다.

[출처] 하르 특징을 이용한 얼굴 검출 과정에 대해 제가 생각하고 있는 것이 맞는지 질문드립니다. (OpenCV KOREA 대한민국 최고의 컴퓨터비젼 커뮤니티) |작성자 ivyfore



'Computer Vision > 패턴인식' 카테고리의 다른 글

HMM(Hidden markov Model) 정리된 블로그 링크  (0) 2013.01.24
Fisher 판별 알고리즘  (0) 2011.06.16