앞 장의 anti_spoofing=True 한 줄 뒤에서 실제로 일하는 모델이 Silent-Face입니다. MiniFASNet이라는 경량 신경망을 쓰는 이 모델은 "조용한(silent)"이라는 이름처럼 사용자에게 아무 동작도 요구하지 않는 패시브 라이브니스의 대표 주자입니다. 이 장에서는 이 모델이 어떻게 동작하는지를 이해하고, 직접 다루는 방법을 살펴봅니다.
DeepFace가 감싸고 있던 모델
PART 09에서 쓴 DeepFace의 라이브니스는 사실 Silent-Face의 MiniFASNet 모델을 내부에서 호출한 것입니다. 그래서 대부분의 경우 DeepFace 한 줄이면 충분합니다. 그럼에도 이 모델을 따로 보는 이유는, 동작 원리를 알아야 점수를 제대로 해석하고 직접 세밀하게 제어할 수 있기 때문입니다.
Silent-Face는 minivision의 오픈소스 프로젝트로, pip 패키지가 아니라 깃허브 저장소 형태로 배포됩니다. 그래서 직접 쓰려면 저장소를 받아 모델 파일과 코드를 가져와야 합니다.
입력의 핵심 — 80×80과 잘라내기 비율
MiniFASNet의 특징은 입력이 작다는 점입니다. 80×80 픽셀의 작은 얼굴 패치를 받습니다. 그런데 중요한 디테일이 있습니다. 단순히 얼굴 박스만 자르는 게 아니라, 박스 주변을 일정 비율로 넓게 포함해 자릅니다.
이유는 1장에서 본 단서들 때문입니다. 인쇄물의 종이 테두리, 화면의 베젤, 손가락 같은 "사진 바깥 맥락"이 가짜를 판별하는 강력한 힌트입니다. 얼굴만 빡빡하게 자르면 이 단서가 사라지므로, Silent-Face는 의도적으로 주변을 포함합니다. 그래서 모델이 두 종류로 제공됩니다.
| 모델 | 잘라내기 비율(scale) | 특징 |
|---|---|---|
| MiniFASNetV2 (2.7_80x80) | 넓게(주변 많이) | 맥락 단서 활용 |
| MiniFASNetV1SE (4.0_80x80) | 더 넓게 | 보완적 시야 |
두 모델의 점수를 합친다
Silent-Face의 판정은 두 모델의 결과를 합쳐서 냅니다. 각 모델이 입력에 대해 세 가지(가짜 2D, 진짜, 가짜 3D 등) 확률을 내놓으면, 두 모델의 확률을 더해 가장 높은 쪽을 최종 판정으로 삼습니다.
# 파일: silentface_concept.py (개념 — 저장소 코드 기반)# 두 모델의 softmax 예측을 더한다prediction = model_v2(crop_wide) + model_v1se(crop_wider)label = prediction.argmax() # 가장 높은 클래스score = prediction[label] / 2 # 평균 확률is_real = (label == 1) # 보통 1이 '진짜' 클래스print("진짜?" , is_real, "점수", float(score))
두 모델을 합치는 이유는 앙상블입니다. 시야가 다른 두 모델이 서로의 약점을 보완해, 단일 모델보다 견고한 판정을 냅니다. 이것이 DeepFace의 antispoof_score 뒤에서 일어나는 계산입니다.
직접 쓸까, DeepFace로 쓸까
| 상황 | 권장 |
|---|---|
| 일반적인 라이브니스 | DeepFace anti_spoofing(2장) |
| 점수·임계값 세밀 제어, 모델 교체 | Silent-Face 직접 |
| 오프라인·임베디드 최적화 | Silent-Face 모델만 떼어 ONNX 변환 |
대부분은 DeepFace로 충분합니다. Silent-Face를 직접 쓰는 경우는, 라이브니스 점수를 다른 보안 로직과 정밀하게 엮거나, 모델을 경량화해 임베디드 기기에 올리는 등 세밀한 제어가 필요할 때입니다. 그럴 때도 "DeepFace가 이 모델을 이렇게 쓰고 있다"는 이해가 출발점이 됩니다.
실무 팁. Silent-Face 저장소를 직접 쓸 때 가장 흔한 실수가 잘라내기 비율을 빼먹는 것입니다. 얼굴만 80×80으로 자르면 모델이 의도한 "주변 맥락"이 사라져 정확도가 뚝 떨어집니다. 저장소의 전처리 코드(crop 비율)를 반드시 그대로 따라야 합니다. 이 디테일을 직접 챙기기 번거롭다면 DeepFace를 쓰는 편이 안전합니다.
이 장에서 기억할 것
Silent-Face(MiniFASNet)는 DeepFace의 anti_spoofing 뒤에서 일하는 패시브 라이브니스 모델로, 80×80의 작은 패치를 받되 종이 테두리·화면 베젤 같은 주변 맥락을 포함하도록 넓게 자르는 것이 핵심입니다. 시야가 다른 두 모델의 점수를 합쳐(앙상블) 진짜/가짜를 판정합니다. 세밀한 제어가 필요할 때만 직접 쓰고, 그때도 잘라내기 비율을 정확히 따라야 합니다. 다음 장에서는 또 다른 접근인 통합 라이브러리 UniFace를 (선택적으로) 살펴봅니다.