Skip to content
jongphagoPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

116 Commits

Folders and files

Repository files navigation

유전적 특성에 강인한 다중 과제 학습 얼굴 인식 모델

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.py
  • cfg.is_debug = True: 단일 실행
  • cfg.is_debug = False: W&B Sweep 에이전트 실행

평가

python fpt/evaluate.py

evaluate.py에서 체크포인트 ID와 평가 태스크 목록(BASIC-, FAMILY-, PERSONAL-*)을 지정합니다.


베이스라인

초기 실험에서는 FaceNet(InceptionResnetV1, VGGFace2 사전학습) 으로 LFW·AIHub 페어 검증 베이스라인을 측정했습니다(utils/model/facenet/). 이후 ArcFace ResNet-50 백본으로 전환하여 AIHub 데이터에 미세조정했습니다.


라이선스

학위논문 연구 목적의 코드 공개입니다. AIHub 데이터셋 이용 시 AIHub 이용약관을 준수해야 합니다.

저자

김종현 — 서강대학교 대학원 컴퓨터공학과 (2023)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages