Multi-task learning face recognition model robust to genetic characteristics
서강대학교 석사 학위논문(2023) 연구 코드입니다. 동일인의 연령 변화와 가족 구성원 간 유전적 유사성으로 인해 얼굴 검증 정확도가 떨어지는 문제를 다루며, AIHub 가족 관계 얼굴 이미지로 다중 과제 학습(MTL) 모델을 구현·평가했습니다.
| 기간 | 2023.02 ~ 2023.05 (약 5개월) |
| 유형 | 개인 프로젝트 · 학위논문 |
| 발표자료 | OneDrive |
| 논문 | RISS |
동일인의 연령 변화와 가족 구성원 간 유전적 유사성 때문에 얼굴 검증 정확도가 떨어지는 문제를 다루었습니다. AIHub 가족 관계가 알려진 얼굴 이미지로 학습·평가 데이터셋과 페어 검증 체계를 구축하고, 다중 과제 학습으로 얼굴 분류·연령 그룹 분류·가족 분류를 공유 백본에서 동시에 학습하는 모델을 개발했습니다. 다중 과제 구성별로 가족·연령 시나리오 검증 정확도를 분석하여 임베딩 품질을 유지하는 방향을 검증했습니다.
- W&B 기반 하이퍼파라미터 최적화 136회, 이중 학습 모델 테스트 정확도 89.9%
- Family 시나리오 검증 정확도 단일 학습 모델 대비 +14%p
- Personal(동일인 연령) 시나리오 단일 학습 모델 대비 +5%p
PyTorch · OpenCV · Weights & Biases · Git · AIHub · GCP (Compute Engine)
ResNet-50 공유 백본(arcface_torch)에서 512차원 임베딩을 추출하고, 태스크별 헤드를 선택적으로 결합합니다.
| 구성 | 활성 태스크 | 설명 |
|---|---|---|
| 단일(Single) | FR | 얼굴 인식(ArcFace margin loss + PartialFC) |
| 이중(Dual) | FR + AE | 얼굴 + 연령(연령 CE, 연령 그룹 CE, MeanVarianceLoss) |
| 삼중(Triple) | FR + AE + KR | 얼굴 + 연령 + 가족 분류(700클래스 CE) |
- 학습:
MultiLossLayer로 태스크별 손실을 학습 가능 가중치로 결합 - 추론: 분류 헤드를 제거하고 임베딩 L2 거리로 1:1 얼굴 검증 수행
태스크 플래그는 fpt/config.py의 is_fr, is_ae, is_kr로 제어합니다.
face/
├── fpt/ # 학습·평가 파이프라인
│ ├── config.py # 하이퍼파라미터 및 MTL 태스크 설정
│ ├── model.py # 공유 백본 + Age/Kinship 모듈
│ ├── loss.py # ArcFace, MeanVariance, MultiLossLayer
│ ├── train.py # 학습 루프
│ ├── evaluate.py # 페어 검증 평가
│ ├── dataloader.py # AIHub 데이터 로더
│ └── sweep.py # W&B Sweep 설정
├── utils/
│ ├── dataset/ # 페어 생성·시각화 노트북
│ └── model/ # FaceNet/ArcFace 베이스라인 노트북
├── work_dirs/ # 체크포인트 메타데이터(best.json)
├── main.py # 학습 진입점
└── main.ipynb # 실험·프로토타입 노트북
AIHub 가족 관계가 알려진 얼굴 이미지를 Family / Individuals / Age 카테고리로 정리하고, 700 / 100 / 100 가구 단위 train·valid·test 분할을 적용했습니다.
검증용 페어는 BASIC(일반), FAMILY(가족 맥락), PERSONAL(동일인 연령) 시나리오로 설계했습니다. 접미 C 는 대조(Contrast) 실험을 의미합니다.
| 예시 | 의미 |
|---|---|
FAMILY-G |
같은 가족, 같은 성별 |
FAMILY-CG |
다른 가족, 같은 성별 (대조) |
FAMILY-CAG |
다른 가족, 같은 성별·연령 그룹 (대조) |
페어 생성 코드: utils/dataset/get_pairs_txt.ipynb
참고: 코드는 연구 환경(GCP CE) 기준으로 작성되었으며, 데이터·가중치 경로가 절대 경로로 설정되어 있습니다. 실행 전
fpt/path.py,fpt/config.py,fpt/model.py의 경로를 환경에 맞게 수정해야 합니다.
레포지토리에 requirements.txt는 포함되어 있지 않습니다. 다음 패키지가 필요합니다.
- PyTorch, torchvision, OpenCV
- InsightFace arcface_torch
nia_age(연령 추정 보조 모듈)facenet-pytorch(FaceNet 베이스라인 평가)- Weights & Biases, EasyDict, pandas, scikit-learn
# fpt/config.py에서 is_fr, is_ae, is_kr 및 project_name 설정 후
python main.pycfg.is_debug = True: 단일 실행cfg.is_debug = False: W&B Sweep 에이전트 실행
python fpt/evaluate.pyevaluate.py에서 체크포인트 ID와 평가 태스크 목록(BASIC-, FAMILY-, PERSONAL-*)을 지정합니다.
초기 실험에서는 FaceNet(InceptionResnetV1, VGGFace2 사전학습) 으로 LFW·AIHub 페어 검증 베이스라인을 측정했습니다(utils/model/facenet/). 이후 ArcFace ResNet-50 백본으로 전환하여 AIHub 데이터에 미세조정했습니다.
학위논문 연구 목적의 코드 공개입니다. AIHub 데이터셋 이용 시 AIHub 이용약관을 준수해야 합니다.
김종현 — 서강대학교 대학원 컴퓨터공학과 (2023)