본문 바로가기

논문

[정리]Rapid object detection using a boosted cascade of simple features(Viola-Jones algorithm) -1

Rapid object detection using a boosted cascade of simple features

[안면 감지(검출)을 위한 알고리즘]

-Paul Viola and Michael Jones 

 

얼굴 인식을 위해 이미지나 영상에서 얼굴이 감지되는 작업이 선행되어야 한다.

그래서 이번 논문을 통해 빠르고 정확한 얼굴을 감지(검출)방법을 알아보았다.


Abstract

본 논문은 이미지를 매우 빠르게 처리할 수 있고 높은 detection rate에 도달할 수 있는 visual object detection을 위한 머신러닝 접근법을 서술한다.

논문은 크게 세 가지를 중점적으로 이야기한다.

 

1. Integral Image

  ->빠르게 연산되는 detector에 의해 이용되는 feature

2. AdaBoost

  ->큰 set으로부터 적지만 중요한 visual feature를 선택해 더욱 효과적인 classifier를 만드는 학습 알고리즘

3. cascade 방식의 classifier 결합

  ->classifier cascade로 결합하여 이미지의 배경 영역을 빠르게 제외하고, object일 확률이 높은 유사한 영역에서 더욱 많이 연산 수행 가능

 

cascade제외된 영역에 관심있는 객체가 없을 것이라는 확률적 통계를 제시하는 object specific focus-of-attention mechanism이다.

얼굴 감지 시스템 부분은 이전에 나온 얼굴 감지 시스템과 비교한 감지 비율을 제공한다.

실시간 애플리케이션에서 사용된 detector는 이미지 차이나 피부색에 의존하지 않고 초당 15프레임으로 작동한다.


Features

1.Harr feature

[그림 1]feature 종류

(발그림이라... 죄송합니다...)

 

그림 1은 얼굴의 특징을 잡아내는 harr feature의 종류를 나타낸 것이다.

하얀색 직사각형에 있는 픽셀의 합은 검은색 직사각형에서의 픽셀의 합을 뺀 것이다.

즉, detection window를 움직이며 인접한 두 직사각형의 픽셀 값의 차이를 통해 harr feature를 구하게 된다.

 

A와 B는 two-rectangular feature라고 부르며

두 직사각형 영역 안에 있는 픽셀의 합 사이의 차이를 값으로 한다.

 

C는 three-rectangular feature라고 부르며

가운데 직사각형의 합에서 뺀 두 개의 바깥 직사각형 내의 합을 계산한다.

 

D는 four-rectangular feature라고 부르며

직사각형의 대각선 쌍 간의 차이를 계산한다.

 

그런데 harr feature 방식은 검출하고자 하는 객체의 특성에 맞춰 feature를 만들어내야 하는데 

논문에 따르면 24*24 이미지만해도 180,000개가 넘는 feature가 만들어져야 한다.

시간도 오래걸리고 크기도 매우 커진다는 뜻이다.

 

그래서 나온 방식이 Integral Image이다.

 

2. Integral Image

Integral Image는 원래 있는 "summed area tables"와 유사한 개념이다.

즉, 값을 누적해 픽셀 합을 구한다 생각하면 될 것 같다.

 

[그림 2] Intergral Image 수식

 

수식을 설명하자면, 그림 2에서 s(x,y)는 누적된 행의 값, i(x,y)는 원본, ii(x,y)는 integral image이다.

x,y의 integral image는 위와 왼쪽 픽셀의 합을 포함한다고 한다.

수식만 봐서는 무슨 말인지 이해하기 어려우니 직접 계산하면서 따라가보자.(는 내가 유튜브 강의보고 이해한 풀이)

 

[그림 3] 원본 (input된 것)

 

여기 3*3에 각 cell의 값이 1인(셀 맞겠지..?) 입력값이 있다. 

이제부터 이 입력값을 그림 2에 나온 수식을 이용해 integral image를 구할 것이다.

 

[그림 4]빨간 동그라미 값을 구해보자

 

빨간 동그라미 값은 어떻게 구할 수 있을까?

->자기 자신까지의 왼쪽, 위쪽의 cell 값을 모두 더한다

즉, 2가 된다.

 

[그림 5] 빨간 동그라미 값=2

 

이와 마찬가지로, 첫번째 열의 두번째 행도 2가 될 것이다.

이렇게 모든 cell에 계산을 적용해보면 다음과 같이 나온다.

 

[그림 6] integral image

+그림 3 원본 기준으로 연산을 해야한다.

 

 

자, 그렇다면 이렇게 계산하는 integral image를 어떻게 응용할 수 있을까?

 

[그림 7] D영역의 값을 구해보자

 

여기서 우리는 지금까지 integral image 계산법을 이용한 것을 응용해본다면

2지점=A+B, 3지점=A+C, 4지점=A+B+C+D라는 것을 알 수 있다.

 

그래서 영역 D(지점 4가 아니다!!)만 값을 구하고 싶다면

4지점에서 2지점과 3지점을 뺀 뒤 1지점을 더한다.(1지점이 두 번 빠지게 되니까)

즉, 4-2-3+1이 된다.

 

위 계산처럼 지점마다 값을 미리 계산한 상태에서 영역의 크기를 구하는 방식을 이용해

단순히 harr feature만으로 특징을 찾는 것 보다 빠르게 연산할 수 있다.

 


이어지는 정리는 Adaboost와 cascade classifier를 다룰 예정인데..!

과연... Adaboost만 하고 끝날지... casdcade classifier까지 가능할지....?~?~?~?

 

 

참고

https://m.blog.naver.com/PostView.nhn?blogId=windowsub0406&logNo=220539823903&proxyReferer=https:%2F%2Fwww.google.com%2F

https://kugistory.net/4

https://www.youtube.com/watch?v=YJS-fTaI9vo
https://webnautes.tistory.com/1352
https://wiserloner.tistory.com/873?category=825446