Face recognition
face recognition (안면인식)에 대한 글이 있어서 정리를 좀 해본다. 대부분의 내용은 번역이 될 듯 하고, 개인적으로 이해한 대로 좀 각색하게 될 듯 하다.
동작
컴퓨터가 얼굴을 인식할 때 아래 4가지 과정을 거치게 된다.
- 먼저, 사진을 보고, 그곳에 있는 모든 얼굴을 찾는다.
- 2번째로 각각의 얼굴에 집중하고, 얼굴이 이상한 방향으로 되어 있고, 조명이 좋지 않아도 그것은 여전히 같은 사람이라는 것을 이해할 수 있어야 한다.
- 3번째로 다른 사람과 다른 고유한 특징(unique features)들을 뽑아낼 수 있어야 한다. 예를 들면 눈이 얼마나 큰지, 얼굴이 얼마나 긴지 등의 요소들
- 마지막으로 이 고유한 특징을 당신이 이름을 알고 있는 모든 사람들과 비교한다.
Step 1. 얼굴 찾기
얼굴찾기 알고리즘
Paul Viola 와 Michael Jones 가 값싼 카메라에서도 충분히 빠르게 얼굴을 찾는 방법을 발명했다. 그 덕분에 2000년대초에 얼굴인식 이 주류가 될 수 있었다.요새는 좀 더 신뢰성있는 알고리즘을 사용한다. 그 알고리즘이 Histogram of Oriented Gradients(HOG) 이다. 2005년 만들어졌다.
HOG
HOG 에서는 SIFT 방법을 사용해서 이미지의 윤곽을 인식한다.SIFT
정확한 SIFT 방법은 여기 를 참고하자. 여기서는 대략적으로 어떤 식으로 동작하는지 알아보는 정도 수준이라는 것만 명심하자.color 정보가 필요없으니, 이미지를 흑백으로 만든다.
이 이미지를 한 픽셀(pixel) 씩 보기 시작한다. 그러면서 이 pixel 의 위아래옆에 있는 8개의 pixel 도 같이 본다.
목표는 현재 보는 pixel 이 주위 8개의 pixel 보다 얼마나 어두운지를 알아내는 것이다.
그래서 어두워지는 방향으로 화살표를 그리는 것이다. 예를 들면, 현재 pixel 보다 위가 더 어두우면 up-arrow 를 사용하고, 위와 오른쪽이 더 어둡다면 up-right arrow 를 사용하는 것이다. 이렇게 되면 모든 pixel 은 화살표로 채워진다.
그리고 여기에 더해서 그 정도의 차이를 구한다. 그러니까 현재 pixel 에 비해 얼마나 진한가등의 정보를 구한다. 그래서 이 "방향 + 진한정도(magnitude)" 가 한개의 vector 가 되는 것이다. 이 화살표 vector 를 gradient 라고 부른다.
(실제로 구현은, 각 방향에 대한 gradient 값(histogram) 을 저장하는 형식으로 구현되는 듯 하다.)
이렇게 하면 어떤 방향으로 갈수록 더 어두워지는지를 알 수 있게 된다. 이 방법의 장점은 빛의 방향(?)을 알 수 있게 돼서 너무 밝은 사진에서도, 너무 어둡게 찍힌 사진에서도 사람의 형체를 알아보기가 수월해진다. 다시 말하면, 윤곽을 어두운 정도로 찾아내기 때문에 명확한 구분이 되는 선이 보이지 않아도 가능하다.
그런데 이 gradient 는 너무 세세한 level (그러니까 pixel level) 로 되어 있다. 그래서 오히려 형체를 알아보기가 어렵다. 장님이 코끼리 만지는 느낌이랄까. 그래서 좀 더 higher level 로 이 gradient 를 만들어야 한다. 그래서 이것을 16x16 pixcel 단위로 나눈다. 이 16x16 단위를 cell 이라고 부르자.( Histogram of Oriented Gradients(HOG) 에서는 16x16, 8x8 로 쪼개는 것이 효율적이라고 이야기한다. 자세한 내용은 원문을 참고하자.)
그래서 그 안에서 각 direction 에 해당하는 magnitude 의 합을 구하면, 어느 방향이 가장 큰 magnitude 를 가지는지 알 수 있다. 그 방향이 그 단위의 major direction (dominant direction)이 되는 것이다.
각 방향별로 vector 가 있다. 긴 화살표가 더 큰 magitude 를 나타낸다. |
그 cell 을 major direction 을 표현하는 image 로 바꿔 놓는다. 그러면 이제 우리는 대략적인 윤곽을 보여주는 image 를 갖게 된다. 이것을 HOG image 라고 하자.
컴퓨터에게 A에 대한 여러 사진을 주면, 컴퓨터가 HOG image 들을 생성하고, 이 image 를 이용해서 A 에 대한 HOG pattern 을 만든다.
이것을 새롭게 올라온 사진의 HOG image 가 어떤 HOG image 와 비슷한지를 봐서 누구인지를 판단하는 것이다.(machine learning)
python 과 dlib 를 이용해서 구현할 수 있다.
작성중....
References
- Machine Learning is Fun! Part 4: Modern Face Recognition with Deep Learning — Medium
- http://www.scholarpedia.org/article/Scale_Invariant_Feature_Transform
- http://www.inf.fu-berlin.de/lehre/SS09/CV/uebungen/uebung09/SIFT.pdf
댓글 없음:
댓글 쓰기