ArcFace를 활용한 한국인 안면 인식
K-Face 데이터로 미세조정한 ArcFace 기반 임베딩 모델과 이를 활용한 비대면 본인인증 시스템
기간: 2021.03 - 2021.12 · 비고: 학부 졸업 프로젝트 · 2021년 비대면시대의 인공지능 챌린지 대상
개요
COVID-19 확산과 무인화 경향에 힘입어, 딥러닝 기반 얼굴인식을 활용한 본인인증 시스템을 학부 졸업 프로젝트 주제로 개발했습니다.
1. ArcFace를 활용한 안면인식 모델 개발
ArcFace(Deng et al., 2019)는 Metric Learning의 한 종류로, 일반적인 분류 문제와는 활용 방식이 다릅니다. 매우 많은 클래스(사람)를 분류하는 문제를 학습시키면서, 그 과정에서 입력 이미지에 대한 임베딩을 부가적으로 학습합니다. 동일 인물의 이미지는 임베딩 공간에서 서로 가깝게, 다른 인물의 이미지는 멀리 위치하도록 학습되기 때문에, 학습이 끝난 뒤 분류 레이어(Classification layer)를 떼어내고 임베딩 네트워크만 활용하면 두 얼굴 이미지의 임베딩 거리로 동일인 여부를 판별할 수 있습니다.
K-Face 데이터
한국인 얼굴 사진(K-Face) 데이터베이스는 한국정보화진흥원의 “영상분야 지식베이스 구축” 및 “인공지능 학습용 AI데이터 구축” 사업의 일환으로 구축된 데이터로, AI Hub를 통해 제공받았습니다. 데이터는 해상도 3종, 액세서리 6종, 조명 30종, 표정 3종, 촬영 각도 20종의 조합으로 구성되어 있습니다.
전처리
- 하드웨어 한계와 학습 효율을 고려해 고/중/저화질 중 중화질 이미지를 사용했습니다.
- 얼굴인식에 적합하도록 조명 4종·표정 3종·액세서리 1종에 대한 이미지만 사용했습니다.
- 피사체가 확실히 식별되는 조명(L1, L3) 2종만 학습에 사용하고, 매우 어두운 L6·L7은 제외했습니다.
- 얼굴 정면이 확실히 식별되는 촬영 각도 4종(C6~C9)을 선별했습니다.
- 최종적으로 400명 × 조명 2종 × 각도 4종 × 표정 3종 = 9,600장을 구성하고, 이 중 390명(9,360장)은 학습, 10명(240장)은 검증 데이터로 분리했습니다.
모델 개발
ArcFace 모델의 소스코드는 peteryuX의 GitHub 구현을 참고했습니다. 이 저장소가 제공하는, 대규모 얼굴인식 데이터셋 MS-Celeb-1M으로 학습된 사전학습 모델을 K-Face 이미지에 맞게 미세조정(Fine-Tuning)하는 방향으로 개발했습니다.
모델 검증
검증 데이터셋 10명, 240장을 대상으로 동일인물 구별 실험을 설계했습니다. 240장 중 랜덤한 두 장을 뽑아 사진쌍을 생성하되, 동일인물 200쌍과 동일인물이 아닌 200쌍, 총 400쌍을 구성했습니다. 모델이 각 사진쌍에서 512차원 임베딩 벡터를 추출하도록 하고, 두 임베딩의 거리가 임계값보다 작으면 동일인물로, 크면 동일인물이 아닌 것으로 분류했습니다. 이 임계값을 일정 범위에서 조금씩 늘려가며 반복 실험했습니다.
검증 결과: 미세조정 이전(MS-Celeb-1M 학습 모델)에도 ROC AUC 0.9891로 충분히 높은 성능을 보였고, K-Face로 미세조정한 후에는 AUC 0.9992로 약 0.1 향상되었습니다.
2. 본인인증 시스템 구축
학습한 ArcFace 모델을 기반으로 기본적인 형태의 본인인증 시스템을 만들었습니다. 입력값은 사용자의 신분증과 실시간으로 촬영한 얼굴 사진입니다.
- 사용자가 신분증 이미지를 입력합니다.
- 신분증에서 Tesseract 기반 OCR로 생년월일을 추출해 성인 여부를 판별합니다.
- 사용자의 실시간 얼굴 사진을 촬영합니다. 이때 사진 도용을 방지하기 위해 특정 모션을 요구하고, 모션을 올바르게 수행했을 때만 다음 단계로 넘어갈 수 있도록 했습니다.
- 신분증 이미지와 실시간 얼굴 이미지 각각에서 dlib 오픈소스 라이브러리로 얼굴 영역을 추출합니다.
- 추출한 얼굴 영역을 ArcFace 모델에 입력해 두 이미지의 임베딩을 추출합니다.
- 두 임베딩의 거리를 계산해 일정 값보다 가까우면 동일인물로, 그렇지 않으면 동일인물이 아닌 것으로 판별합니다.
이 프로젝트는 2021년 비대면시대의 인공지능 챌린지에서 대상을 수상했습니다.