Deep face는 어떤 논문인가?
What?
·주어진 이미지로부터 사람을 식별할 수 있는 CNN 구조를 묘사하는 논문이다.
How?
인풋은 사람의 얼굴이다.(이미지에서 얼굴을 추출하는것이 아니다. 이미 다른 방법에 의해 얼굴은 추출되어 있는것 )
우선 CNN 구조에 사진을 넣기 전에 2D alignment 와 3D alignment를 거쳐서 사진이 정면을 바라 보도록 해주고 (h)와 같이 새로운 측면에서의 데이터를 얻게 해준다.
Face alignment / Frontalization (정렬과 정면화)
얼굴 이미지 내에서 변화를 제거하여 모든 얼굴이 카메라를 똑바로 쳐다보는 것처럼 보이도록 해준다.("frontalized")
2D alignment
- 얼굴에서 landmark(fiducial points. 기준점)을 찾는다. 그 이후 SVR (features: LBPs)를 적용한다.
- (SVR은 회귀계수 크기를 작게하여 회귀식을 평평하게 만들되, 실제값과 추정값의 차이를 작도록 고려하는 선을 찾자는 개념이다 자세한 내용은 (https://leejiyoon52.github.io/Support-Vecter-Regression/ 을 참고할것)
- 적용된 landmark는 얼굴을 tranform/normalize를 시키기 위해 사용한다.
- 그 후에 SVR을 적용시키고 landmark의 위치들은 점점 개선되어진다.
- 감지된 landmark를 얼굴 이미지를 normalize 하는데 사용된다. (scaling, rotation and translation)
3D alignment
2D 정렬은 이차원에서 변화를 정규화 시켜줄 수 있게 해주지만 평면 이외의 편차는 정규화 할 수 없으므로
(ex.얼굴의 왼쪽 면이나 오른쪽 면) 3D 변환이 필요하다.
- SVR를 다시 이용하여 추가적으로 67개의 랜드마크를 찾는다.
- 데이터셋으로부터 face mesh를 만든다. (USF Human-ID)
- 67개의 랜드마크를 mesh에 맵핑한다.
- 정면화(frintalized)된 얼굴 이미지에 좀 더 복잡한 과정을 밟는다.
CNN architecture
- CNN은 frontalized face image를 받는다. (152x152, RGB)
- Convolution, 32 filters, 11x11, ReLU (-> 32x142x142, CxHxW)
- Max pooling over 3x3, stride 2 (-> 32x71x71)
- Convolution, 16 filters, 9x9, ReLU (-> 16x63x63)
- Local Convolution, 16 filters, 9x9, ReLU (-> 16x55x55)
- Local Convolution, 16 filters, 7x7, ReLU (-> 16x25x25)
- Local Convolution, 16 filters, 5x5, ReLU (-> 16x21x21)
- Fully Connected, 4096, ReLU
- Fully Connected, 4030, Softmax
Local Convolution은 모든 '픽셀'에 각각 다르게 학습된 가중치를 사용한다.
<-->normal convolution은 모든 location에서 같은 가중치를 사용함.
frontalization 되어 있기 때문에 local convolution을 사용할 수 있다.
local convolution은 특정 랜드마크가 특정 위치에 위치시킬 수 있게 해준다.
fully connected layer 층 이후에 한번만 dropout을 사용한다.
'feature'를 정규화 시킨다.( 대략 4096개의 완전 연결층) 각가의 요소는 훈련세트 전체에서
maximum value로 나누어 진다. 추가적으로 전체 벡터는 L2-nomalized 된다.
이러한 과정의 목표는 네트워크의 조명의 민감도를 적게 하는 것이다.
전체 네트워크에는 1억 2천만개의 parameter가 존재한다.
Training
네트워크는 사진을 받고 각각을 보여준후 얼굴의 신원 확인을 할 수 있도록 트레인한다.
cross-entropy 함수를 손실 함수로 사용한다.
학습은 페이스북의 얼굴 사진 데이터셋인 SFC (Social Face Classification)로 학습하였다. 딥러닝에 의해서 학습된 표상을 LFW (Labeled Faces in the Wild database)와 YTF (YouTube Faces)에 적용하여 성능을 평가하였다.
Face verification
샴 네트워크를 사용하여 동일 인물인지 아닌지 판별한다.
Results
LFW와 YFN에 적용해봤을 때 좋은 성능을 냈다. (인간의 인지 능력과 비슷함)
They train their network on the Social Face Classification (SFC) dataset. That seems to be a Facebook-internal dataset (i.e. not public) with 4.4 million faces of 4k people.
When applied to the LFW dataset:
Face recognition ("which person is shown in the image") (apparently they retrained the whole model on LFW for this task?):
Simple SVM with LBP (i.e. not their network): 91.4% mean accuracy.
Their model, with frontalization, with 2d alignment: ??? no value.
Their model, no frontalization (only 2d alignment): 94.3% mean accuracy.
Their model, no frontalization, no 2d alignment: 87.9% mean accuracy.
Face verification (two images -> same/not same person) (apparently also trained on LFW? unclear):
Method 1 (inner product + threshold): 95.92% mean accuracy.
Method 2 (X^2 vector + SVM): 97.00% mean accurracy.
Method 3 (siamese): Apparently 96.17% accuracy alone, and 97.25% when used in an ensemble with other methods (under special training schedule using SFC dataset).
When applied to the YTF dataset (YouTube video frames):
92.5% accuracy via X^2-method.
논문 사이트
https://www.cs.toronto.edu/~ranzato/publications/taigman_cvpr14.pdf
'ML > 머신러닝' 카테고리의 다른 글
[클라우드 컴퓨팅]구글 클라우드 컴퓨팅을 이용한 웹 서버 구축하기-워드프레스 (word press) 설치/도메인 연결하기 (0) | 2020.03.28 |
---|---|
[openCV]얼굴인식 기술을 이용한 화면 잠금해제 (0) | 2020.03.17 |
face_recognition을 이용한 real time 얼굴 인식 (0) | 2020.03.08 |
유용한 라이브러리에 대해 정리해보자 (0) | 2020.03.07 |
코랩을 이용한 샴 네트워크 구현 (0) | 2020.03.06 |