지금 우리가 쓰는 얼굴 인식 모델은 하루아침에 나온 것이 아닙니다. 고전 통계 기법에서 딥러닝으로, 다시 더 똑똑한 학습 방법으로 이어진 흐름이 있습니다. 이 장에서는 그 계보를 수식 없이 개념과 핵심 아이디어 중심으로 훑습니다. 각 단계가 무엇을 풀었는지 알면, 라이브러리를 고를 때 근거가 생깁니다.
큰 흐름 한 장으로
고전 통계] --> B[FaceNet
2015, 딥러닝 임베딩] B --> C[ArcFace
2019, 더 또렷한 경계]
핵심 전환점은 둘입니다. 첫째, 고전 기법에서 딥러닝(FaceNet)으로 넘어가며 정확도가 비약했습니다. 둘째, FaceNet에서 ArcFace로 가며 "같은 사람은 더 모으고 다른 사람은 더 떼어 놓는" 학습이 정교해졌습니다.
고전 — LBPH, Eigenfaces, Fisherfaces
딥러닝 이전에도 얼굴 인식은 있었습니다. OpenCV에 포함된 LBPH(Local Binary Patterns Histograms)는 얼굴의 밝기 패턴을 히스토그램으로 요약해 비교하고, Eigenfaces·Fisherfaces는 얼굴 이미지를 통계적으로 압축해 다룹니다. 이들은 가볍고 적은 데이터로도 동작하지만, 조명·각도·표정 변화에 약합니다.
지금도 LBPH는 "사용자 몇 명, 통제된 조명"처럼 조건이 좋은 소규모 환경에서 쓸 수 있습니다. 다만 실제 환경의 다양한 변화 앞에서는 한계가 뚜렷해, 본격적인 인식에는 딥러닝 모델을 씁니다.
전환점 — FaceNet (2015)
FaceNet은 얼굴 인식을 임베딩 문제로 재정의한 분수령입니다. 이 책 1장에서 말한 "얼굴을 벡터로, 같은 사람은 가깝게"라는 아이디어가 바로 FaceNet에서 자리 잡았습니다. 핵심 학습 방법은 triplet, 곧 세 장의 얼굴을 한 묶음으로 쓰는 것입니다.
- 기준이 되는 얼굴(앵커)
- 같은 사람의 다른 얼굴(긍정)
- 다른 사람의 얼굴(부정)
모델은 "앵커와 긍정은 가깝게, 앵커와 부정은 멀게"를 반복 학습합니다. 수식은 생략하지만, 이 단순한 직관만으로 임베딩 공간에서 같은 사람끼리 모이는 구조가 만들어집니다. 우리가 PART 04 실습에서 쓸 facenet-pytorch가 바로 이 FaceNet 계열입니다.
정교화 — ArcFace (2019)
FaceNet이 길을 열었다면, ArcFace는 그 길을 더 또렷하게 닦았습니다. ArcFace의 아이디어는 "같은 사람과 다른 사람 사이의 경계에 여유(margin)를 강제로 더 벌려 놓고 학습하라"는 것입니다. 경계가 빡빡하게 학습되면, 실제 사용 때 애매한 얼굴도 더 자신 있게 구분됩니다.
그 결과 ArcFace 계열은 현재 정확도 최상위권으로, 대규모 신원 인식의 사실상 표준입니다. PART 07에서 다룰 InsightFace가 이 ArcFace를 기반으로 합니다.
계보를 표로 정리
| 모델 | 시기 | 핵심 아이디어 | 이 책에서 |
|---|---|---|---|
| LBPH/Eigen/Fisher | ~2000년대 | 통계적 특징 비교 | 개념 소개 |
| FaceNet | 2015 | triplet으로 임베딩 학습 | PART 04(facenet-pytorch) |
| ArcFace | 2019 | 경계에 margin을 더해 또렷하게 | PART 07(InsightFace) |
이 표가 PART 05~07의 지도이기도 합니다. 가장 쉬운 입문(PART 05 face_recognition)은 FaceNet과 같은 시기의 dlib 기반 임베딩을 쓰고, 올인원(PART 06 DeepFace)은 여러 모델을 골라 쓰며, 프로덕션 최고 정확도(PART 07 InsightFace)는 ArcFace를 씁니다.
실무 팁. 모델 계보를 외울 필요는 없습니다. 다만 "최신·고정확도가 필요하면 ArcFace 계열(InsightFace), 가볍고 빠른 입문이면 dlib/FaceNet 계열"이라는 큰 갈래만 기억하면 라이브러리 선택이 쉬워집니다. 그리고 어떤 모델이든 앞 장들에서 익힌 임베딩·거리·임계값의 원리는 똑같이 적용됩니다.
이 장에서 기억할 것
얼굴 인식은 고전 통계(LBPH 등)에서 딥러닝 임베딩(FaceNet, 2015, triplet)으로, 다시 경계를 또렷하게 만든 ArcFace(2019)로 발전했습니다. FaceNet은 PART 04 실습의 facenet-pytorch로, ArcFace는 PART 07의 InsightFace로 만나게 됩니다. 계보가 달라도 임베딩·거리·임계값이라는 토대는 동일합니다. 다음 장에서는 드디어 facenet-pytorch로 직접 임베딩을 뽑아 두 얼굴을 비교합니다.