얼굴 검출은 대부분의 컴퓨터 비전 파이프라인의 관문 역할을 합니다. 모든 화상 통화, 사진 갤러리, 보안 피드는 다른 작업이 수행되기 전에 사람의 얼굴을 찾아내는 것에 의존합니다. 하지만 모델을 선택할 때는 대개 불만족스러운 트레이드오프를 감수해야 합니다. 무거운 네트워크는 정확도를 제공하지만 값비싼 GPU와 랙 마운트형 냉각 장치를 요구합니다. 반면 작은 모델은 저사양 하드웨어에서도 돌아가지만, 작은 얼굴이나 고해상도 피드에서는 성능이 급격히 떨어지곤 합니다. OpenCV Zoo의 YuNet 모델은 이러한 패턴을 깨뜨립니다. 저는 이 모델이 실제 프로젝트에서 제 역할을 할 수 있는지, 아니면 단순히 이론상으로만 좋아 보이는 것인지 확인하기 위해 다양한 스케일에서 벤치마킹을 진행했습니다.
YuNet을 자세히 살펴봐야 하는 이유
YuNet은 단순한 연구용 호기심의 대상이 아닙니다. 이 모델은 OpenCV DNN 모듈에 최적화된 사전 학습 모델 모음인 OpenCV Zoo에 포함되어 있습니다. 제가 테스트한 특정 버전은 INT8 양자화를 사용하는데, 이는 가중치와 활성화 값이 일반적인 32비트 부동 소수점 대신 8비트 정수로 압축됨을 의미합니다. 이는 단순한 기술적 주석 정도의 차이가 아닙니다. INT8은 메모리 대역폭을 대폭 줄이고, 캐시 압박을 완화하며, 최신 CPU가 큰 부담 없이 추론을 처리할 수 있게 해줍니다. 노트북, 엣지 디바이스, 또는 전용 그래픽 카드가 없는 서버에서 작업하는 사람에게 이러한 효율성은 매끄러운 파이프라인과 끊기는 슬라이드쇼 사이의 결정적인 차이를 만듭니다.
아키텍처 자체도 설계 단계부터 경량화되어 있습니다. 거대한 백본(backbone)의 짐을 덜어내고 얼굴 위치를 찾는 단일 작업에 집중합니다. 이러한 절제된 설계는 CPU와 배터리 자원을 트래킹, 인식 또는 비디오 인코딩과 공유해야 하는 대규모 애플리케이션에 검출 기능을 통합해야 할 때 빛을 발합니다.
테스트 환경
모든 테스트는 Apple M4 Max 칩이 탑재된 Mac Studio에서 진행되었습니다. 모델 파일은 OpenCV Zoo 저장소에서 가져온 YuNet INT8 양자화 ONNX 빌드였습니다. 먼저 1280x720 이미지에서 추론 속도를 측정하였고, 그 다음 스케일이 결과에 어떤 영향을 미치는지 이해하기 위해 네 가지 다른 입력 해상도에서 검출 개수를 비교했습니다.
자신의 기기에서 이 수치를 직접 확인하고 싶다면, 과정은 완전히 재현 가능합니다. 다음 명령어를 실행하여 스파스(sparse) 저장소를 가져오고 벤치마크를 실행하십시오.
git clone --depth 1 --filter=blob:none --sparse https://github.com/kiarina/labs.git
cd labs
git sparse-checkout set .gitignore .mise/tasks Makefile mise.toml 2026/07/08/yunet-face-detection
mise -C 2026/07/08/yunet-face-detection run
스파스 체크아웃을 통해 다운로드 용량을 작게 유지하며, mise 태스크 러너가 백그라운드에서 의존성을 처리합니다. Python 환경이나 수동 패키지 설치와 씨름할 필요가 없습니다.
일관된 속도
1280x720 이미지에서 INT8 YuNet 모델의 평균 추론 시간은 9.21밀리초였습니다. 가장 빠른 패스는 8.03ms를 기록했고, 가장 느린 패스는 10.47ms였습니다. 이는 놀라울 정도로 좁은 편차입니다. 최상과 최악의 시간 차이가 2.5밀리초도 채 나지 않습니다.
실제 환경에서는 이러한 일관성이 단순한 성능 자랑보다 훨씬 중요합니다. 실시간 애플리케이션에는 낮은 평균 지연 시간뿐만 아니라 예측 가능한 지연 시간이 필요합니다. 가끔 50ms가 걸리는 모델은 웹캠 피드에서 눈에 보이는 끊김을 유발합니다. YuNet은 일정하게 유지됩니다. 다음 프레임이 도착하기 전에 프레임 처리를 마칠 것이라고 신뢰할 수 있으며, 이는 나머지 파이프라인의 스케줄링을 훨씬 단순하게 만듭니다.
스케일 변화가 보여주는 진실
모델이 장면의 얼굴 절반을 놓친다면 단순한 속도는 큰 의미가 없습니다. 이를 테스트하기 위해 동일한 소스 이미지를 네 가지 다른 해상도로 YuNet에 입력했습니다. 검출 결과는 명확한 이야기를 들려줍니다.
- 320 x 180: 6개 얼굴 검출
- 640 x 360: 26개 얼굴 검출
- 1280 x 720: 38개 얼굴 검출
- 2560 x 1440: 52개 얼굴 검출
그 차이는 극적입니다. 320 x 180 해상도에서는 가장 크고 가까운 얼굴만 인식됩니다. 640 x 360으로 높이면 검출 개수가 4배로 뜁니다. 전체 1440p 해상도에서는 YuNet이 최저 해상도에서보다 8배 이상의 얼굴을 찾아냅니다.
이는 다운샘플링이 직관보다 훨씬 빠르게 디테일을 파괴하기 때문에 발생합니다. 1440p 프레임에서 적당한 면적을 차지하던 얼굴이 360p에서는 5x5 픽셀의 얼룩으로 줄어들 수 있습니다. 얼굴 특징이 모델의 수용 영역(receptive field) 아래로 무너지면, 그것은 보이지 않는 노이즈가 됩니다. 눈은 눈썹과 합쳐지고, 코는 사라집니다. YuNet이 붙잡을 수 있는 정보가 없어지는 것입니다.
여기서 얻을 수 있는 실질적인 교훈은 기억할 가치가 있습니다. 카메라가 교실, 회의실 또는 길모퉁이의 광각 뷰를 촬영한다면, 모델에 충분한 픽셀을 제공하지 않는 한 멀리 있는 얼굴은 나타나지 않을 것입니다. 여기서 해상도는 단순히 이미지 품질의 문제가 아닙니다. 재현율(recall)을 직접적으로 조절하는 레버와 같습니다.
실제로 필요한 리사이즈 전략
YuNet은 매우 빨라서 습관적으로 입력 해상도를 320 x 240으로 낮출 필요가 없습니다. M4 Max에서는 전용 GPU 없이도 2560 x 1440 해상도가 구동됩니다. 이는 파이프라인을 설계하는 방식을 완전히 바꿔 놓습니다.
모든 프레임을 아주 작은 고정 크기로 강제하는 대신, 찾고자 하는 대상에 따라 입력 해상도를 선택하십시오. 카메라 바로 앞에 있는 사람에게만 관심이 있다면 720p나 640p로도 충분합니다. 넓은 홀에 있는 모든 참석자를 기록해야 한다면, 모델에 고해상도 크롭 이미지나 전체 네이티브 프레임을 입력하십시오. YuNet은 가볍기 때문에 이러한 선택을 할 수 있는 여유가 있습니다. 200ms의 지연을 피하기 위해 단일 프리셋에 얽매일 필요가 없습니다.
한 가지 주의할 점은 있습니다. 모델은 여전히 입력 텐서 대비 얼굴 크기에 의존합니다. 여기에는 마법 같은 스케일 불변성(scale invariance)이 존재하지 않습니다. 작은 얼굴은 충분한 픽셀을 차지하지 않으면 보이지 않는 상태로 남습니다. 해결 방법은 기계적입니다. 멀리 있는 대상을 찾을 때는 추론 전에 소스 이미지를 상향 리사이징한 다음, 결과로 나온 바운딩 박스를 원래 좌표로 다시 매핑하십시오. YuNet은 이러한 단계를 수행할 수 있는 속도적 여유를 제공합니다.
스택에서의 활용 위치
YuNet이 상상 가능한 모든 얼굴 관련 작업을 해결해 주는 솔루션은 아닙니다. 심한 가려짐(occlusion), 극단적인 측면 각도, 또는 3D 메쉬 추출 등은 범위를 벗어납니다. 하지만 사진과 비디오 스트림에서 얼굴을 찾는 가장 기본적이고 핵심적인 작업에 있어서는 최적의 지점을 차지합니다. 실시간 웹캠 앱, 자동 사진 선별 도구, 그리고 소규모 임베디드 시스템 모두 표준 CPU에서 빠르게 작동하는 이 탐지기의 혜택을 누릴 수 있습니다.
INT8 ONNX 형식 덕분에 배포도 간편합니다. 대상 장치에 PyTorch나 TensorFlow를 설치할 필요가 없습니다. OpenCV의 DNN 모듈이 모델을 직접 로드하므로, 바이너리 크기를 작게 유지하고 의존성 트리(dependency tree)를 단순하게 가져갈 수 있습니다.
결론
YuNet은 얼굴 탐지에 산업용 하드웨어나 무거운 프레임워크가 필요하지 않다는 것을 증명합니다. 수치가 이를 명확히 보여줍니다. 720p 프레임에서 10밀리초 미만이 소요되며, 해상도가 높아짐에 따라 탐지 횟수가 직접적이고 예측 가능하게 증가합니다. 중간 해상도에서 최대 속도를 낼 것인지, 아니면 더 높은 스케일에서 더 넓은 범위를 커버할 것인지를 직접 선택할 수 있으며, 그 선택으로 인해 성능 손해를 보지 않습니다.
실제 이미지를 다루는 무언가를 구축하고 있다면, 위의 재현 단계를 사용자의 하드웨어에서 직접 실행해 보십시오. 실제 영상으로 테스트해 보십시오. 그런 다음 실제로 찾아야 하는 얼굴에 맞춰 리사이즈 로직을 조정하십시오. 속도는 그것을 원하는 방향으로 활용할 수 있을 때만 유용합니다. YuNet은 속도와 제어력을 모두 제공합니다.
