기술 회고

[기술 회고] 딥페이크 탐지 Late Fusion 설계와 점수 안정화

sybear02 2026. 7. 27. 13:53

딥페이크 탐지 Late Fusion 설계와 점수 안정화

이 글은 부트캠프 최종 프로젝트 ForenShield에서, 여러 딥페이크·위변조 탐지 모델의 점수를 late fusion으로 합치고 안정화한 과정을 정리한 기술 회고다.

프로젝트와 동작 원리

ForenShield는 영상·이미지 위변조 분석과 증거 관리를 위한 딥페이크·디지털 포렌식 플랫폼이다. 나는 AI 딥페이크 탐지와 백엔드 연동을 중심으로 담당했고, 분석 결과가 서비스에 남도록 연결하는 쪽까지 작업했다.

단일 모델만 쓰면 특정 변조 유형에는 강하고 다른 유형에는 약해질 수 있다. 그래서 역할을 나눈 모델들을 쓰고, 각 모델의 점수를 나중에 합치는 late fusion 구조를 택했다. 얼굴 단위 CNN 탐지에는 Xception을, 시간축 정보는 TimeSformer를, 광학흐름 기반 정보는 GMFlow를 실험·평가에 포함했다. forgery 쪽은 TruFor 등을 함께 보는 흐름으로 이어졌다.

late fusion의 기본 원리는 단순하다. 각 모델이 독립적으로 추론한 뒤, 최종 판정 직전에 점수를 규칙에 따라 합친다. 문제는 “어떻게 합치면 현장 오탐을 줄이면서도 fake 재현을 무너뜨리지 않는가”였다.

무엇이 문제였나

모델마다 잘 잡는 구간이 달랐다. 하나를 올리면 다른 쪽에서 흔들리기도 했다. 벤치마크에서만 맞추면 실제 입력 분포에서 FP가 늘거나, soft-gate 상황(얼굴이 없거나 너무 작음)에서 점수 해석이 애매해지기도 했다.

점수를 그냥 평균내거나 최대값만 가져가면 단순해 보이지만, 모듈이 스킵되거나 실패한 경우까지 포함하면 최종 riskScore의 의미가 흔들렸다. 합치는 규칙 자체가 제품의 판정 정책이 됐다.

실제로 어떻게 개선했나

모델별 역할 정리

Xception 기반 CNN으로 얼굴 단위 탐지를 구성하고, 벤치마크와 임계값 분석으로 성능을 다듬었다. TimeSformer와 GMFlow는 실험·평가를 거쳐 점수를 안정화한 뒤 fusion에 넣을 수 있는 상태로 맞췄다. 각 모델을 “다 쓰는 것”이 목표가 아니라, 최종 판정에 쓸 수 있을 만큼 점수를 믿을 수 있게 만드는 게 목표였다.

Late fusion과 통합 riskScore

세 모델 결과를 late fusion으로 합쳐 최종 판정에 쓰이도록 파이프라인을 만들었다. deepfake 점수와 forgery 쪽을 함께 보는 통합 riskScore 규칙도 다듬었다. 이후에는 late fusion·모듈 상태에 따라 가중을 동적으로 두는 쪽으로 발전시켰다. 단순 합이 아니라, 어떤 레인이 실제로 돌았는지까지 Reflex션에 반영해야 점수가 과하게 튀지 않았다.

현장 FP를 줄이려는 방향으로 fusion 규칙을 튜닝하기도 했다. GMF 쪽 veto 강도, 중간 구간에서의 cap, TimeSformer soft discount처럼, 재현율을 한번에 포기하지 않으면서 오탐을 누르는 쪽의 조정이었다.

soft-gate와의 연결

얼굴이 없거나 너무 작은 경우를 무조건 실패로 두면, 분석 파이프와 점수 해석이 거칠어진다. soft-gate를 두어 일부 상황은 COMPLETED 형태의 advisory로 남기고, fusion· forgery 경로와의 관계를 정리했다. 점수 합치기만의 문제가 아니라, “이 점수를 언제 믿을 수 있는가”를 같이 정의하는 일이었다.

정리

late fusion에서 한 일은 모델을 늘어놓는 것이 아니었다. 모델별 점수를 쓸 수 있는 상태까지 맞추고, 합산 규칙을 판정 정책으로 명시하며, 모듈 스킵·soft-gate·forgery 레인까지 포함한 riskScore로 안정화했다. 단일 모델 성능보다, 여러 신호가 모여도 흔들리지 않는 최종 판정 쪽이 더 중요했다.

다음에 다시 한다면 fusion 규칙 변경 전후의 평가 세트를 더 고정해 두고, 모듈별 기여도를 설명 가능한 형태로 남기고 싶다.

관련 코드: https://github.com/owhat02/ai-forensic