Skip to content

Repository files navigation

Deepfake Detector

얼굴의 눈·코·입 영역을 각각 분석하는 멀티브랜치(Multi-branch) 딥페이크 탐지 모델입니다. 각 얼굴 부위에서 추출한 특징을 결합해 REAL/FAKE를 분류하며, 얼굴 랜드마크 검출이 실패하면 입력 이미지 전체를 대체 입력으로 사용합니다.

포트폴리오 정리 안내
이 저장소는 2024년 SSAFY TruthGuard 팀 프로젝트에서 담당한 딥페이크 탐지 모델 파트를 별도로 정리한 저장소입니다. 2026년 포트폴리오 정리 과정에서 README와 실행 환경을 보완했습니다. 모델의 핵심 설계와 학습 코드는 2024년 구현을 기반으로 하며, 이후 보완 사항은 과거 작업처럼 소급하여 표현하지 않습니다.

담당 역할

TruthGuard 팀 프로젝트에서 딥페이크 탐지 모델 파트를 주도적으로 담당했습니다.

  • dlib 68-point landmark 기반 얼굴 부위 추출 파이프라인 구현
  • 눈·코·입별 Inception-ResNet-v2 백본을 사용하는 멀티브랜치 구조 설계
  • PyTorch 학습·검증 파이프라인 및 데이터 로더 구현
  • AMP 학습, Early Stopping, Best Checkpoint 저장 구현
  • Weights & Biases를 이용한 학습 손실 및 검증 손실 추적
  • 팀 프로젝트의 모델 코드를 별도 저장소로 구조화 및 문서화

모델 구조

입력 이미지
   │
   ├─ dlib landmark → 눈 영역  → Inception-ResNet-v2 ─┐
   ├─ dlib landmark → 코 영역  → Inception-ResNet-v2 ─┼─ Feature Concatenation → Binary Logit
   └─ dlib landmark → 입 영역  → Inception-ResNet-v2 ─┘

얼굴 또는 부위 검출 실패 시 입력 이미지 전체를 세 브랜치의 대체 입력으로 사용

각 백본의 분류 헤드를 128차원 특징 출력으로 변경하고, 세 특징을 결합한 384차원 벡터를 최종 선형 계층에 전달합니다. 학습 시 BCEWithLogitsLoss와 Adam Optimizer를 사용합니다.

timm 모델과 자체 구현 모델의 관계

이 저장소에는 두 종류의 Inception-ResNet-v2 코드가 존재합니다.

실제 학습 경로

train_multimodal.pytimm.create_model("inception_resnet_v2", pretrained=True)로 생성한 사전학습 모델 세 개를 사용합니다. 현재 README에서 설명하는 학습·검증·체크포인트 흐름은 이 timm 기반 구현을 기준으로 합니다.

자체 구현 경로

models/inception_resnet_v2.pymodels/layer/는 2024년 프로젝트 과정에서 네트워크 블록을 직접 구성하며 구조를 학습하기 위해 작성한 실험적 구현입니다. 해당 코드는 현재 train_multimodal.py에서 import되지 않으며, 실제 학습 결과를 산출한 실행 경로로 간주하지 않습니다. 별도의 검증 없이 포트폴리오 성과로 주장하지 않습니다.

파일명과 일부 함수명에 남아 있는 multimodal은 2024년 당시의 명칭을 호환성 차원에서 유지한 것입니다. 서로 다른 데이터 양식을 결합하는 일반적인 멀티모달 학습이 아니라, 동일 이미지에서 추출한 여러 얼굴 영역을 결합하는 얼굴 부위별 멀티브랜치 학습이 정확한 표현입니다.

프로젝트 구조

deepfake-detector/
├── data/
│   ├── REAL/                         # 실제 이미지
│   └── FAKE/                         # 딥페이크 이미지
├── models/
│   ├── inception_resnet_v2.py        # 실험적 자체 구현
│   ├── checkpoints/                  # 모델 가중치 저장 위치
│   └── layer/                        # 실험적 자체 구현 레이어
├── utils/
│   └── face_utils.py                 # 얼굴 랜드마크 및 부위 추출
├── train_multimodal.py               # timm 기반 멀티브랜치 학습 스크립트
├── requirements.txt                  # 고정된 Python 패키지 버전
├── Dockerfile                        # CUDA 기반 재현 환경
└── README.md

실행 환경

2024년 당시의 모든 패키지 버전과 장비 정보는 저장소에 보존되어 있지 않습니다. 따라서 아래 환경은 과거 실행 환경을 소급해 주장하는 값이 아니라, 2026년 포트폴리오 정리 시점에 정의한 재현용 기준 환경입니다.

  • Ubuntu 22.04
  • Python 3.10
  • NVIDIA CUDA 12.1 / cuDNN 8 Runtime
  • PyTorch 2.2.2
  • torchvision 0.17.2
  • timm 0.9.16
  • dlib 19.24.2
  • Weights & Biases 0.16.6

세부 패키지 버전은 requirements.txt를 확인해 주세요.

설치 방법

Docker 사용

git clone https://github.com/Deep-Guardians/deepfake-detector.git
cd deepfake-detector

docker build -t deepfake-detector .
docker run --gpus all --rm -it \
  -v "$PWD:/workspace" \
  deepfake-detector bash

로컬 Python 환경 사용

Python 3.10 환경을 권장합니다.

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt

얼굴 랜드마크 모델 준비

wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bunzip2 shape_predictor_68_face_landmarks.dat.bz2
mv shape_predictor_68_face_landmarks.dat models/

데이터 준비

data/
├── REAL/
│   ├── real_001.jpg
│   └── ...
└── FAKE/
    ├── fake_001.jpg
    └── ...

저작권과 개인정보 문제로 학습 데이터는 저장소에 포함하지 않습니다.

학습 실행

python train_multimodal.py \
  --epochs 20 \
  --batch_size 8 \
  --learning_rate 0.001 \
  --real_dir ./data/REAL \
  --fake_dir ./data/FAKE \
  --gpu 0

학습 과정은 W&B 프로젝트 deepfake_detection_multimodal에 기록되도록 구성되어 있으며, 모델은 기본적으로 checkpoints/에 저장됩니다.

성능 결과 및 기록 범위

2024년 학습 당시 W&B로 train_lossval_loss를 추적했지만, 공개 저장소에는 당시 Run URL, 데이터셋 버전, 최종 평가 리포트가 보존되어 있지 않습니다. 따라서 검증할 수 없는 Accuracy·Precision·Recall·F1·ROC-AUC 수치를 임의로 기재하지 않습니다.

항목 공개 저장소에서 확인 가능한 상태
학습 손실 코드상 W&B 기록 로직 확인 가능
검증 손실 코드상 W&B 기록 로직 확인 가능
Best checkpoint 검증 손실 기준 저장 로직 확인 가능
Accuracy / F1 / ROC-AUC 당시 검증 수치 미보존
데이터셋 버전 및 표본 수 공개 저장소에 미포함

정량 성능을 다시 제시하려면 동일한 데이터셋 분할 기준을 복원한 후 재학습·재평가해야 합니다. 새로 측정한 결과는 2024년 원본 결과와 구분하여 기록할 예정입니다.

구현상 주요 기능

  • 얼굴이 검출되지 않거나 특정 부위 crop이 비어 있을 때 fallback 처리
  • ImageNet 사전학습 Inception-ResNet-v2 사용
  • 세 얼굴 부위 특징 결합
  • Automatic Mixed Precision 학습
  • Early Stopping
  • 최근 체크포인트 개수 제한 및 Best Model 저장
  • W&B 기반 학습·검증 손실 추적

한계 및 개선 방향

  • 동일 영상에서 추출한 프레임이 학습·검증 세트에 동시에 포함되지 않도록 영상 단위 분할 필요
  • Accuracy, Precision, Recall, F1, ROC-AUC 및 Confusion Matrix 추가 필요
  • 얼굴 전체 입력 모델과 부위별 멀티브랜치 모델의 Ablation Study 필요
  • 데이터셋 및 모델 체크포인트 버전 관리 필요
  • 추론 API와 컨테이너 기반 배포 파이프라인 확장 필요

라이선스

MIT License를 따릅니다. 자세한 내용은 LICENSE를 확인해 주세요.

참고

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages