RetinaFace, SCRFD, ncnn, TFLite 기본 개념 정리

이 글은 얼굴 검출 모델인 RetinaFace와 SCRFD, 그리고 이를 구동하는 런타임 포맷인 ncnn과 TFLite에 대해 기본 개념을 기록하기 위함임!
각 모델과 포맷이 어떤 특성을 가지고 있고, 어떤 상황에서 활용되는지 정리한다.


1. RetinaFace란 무엇인가

RetinaFace는 InsightFace 팀에서 공개한 얼굴 검출 모델이다.
anchor 기반의 구조를 사용하며, 입력 이미지에서 얼굴의 위치(bounding box)와 랜드마크(일반적으로 5점)를 동시에 예측한다.
대규모 데이터셋(WIDER FACE 등)으로 사전 학습된 모델이므로 바로 추론 단계에서 사용할 수 있다는 특징이 있다.

RetinaFace는 얼굴 검출 정확도가 높고 안정적인 결과를 제공하는 모델이지만, 구조적으로 연산량이 다소 많아 모바일 환경에서의 추론 속도가 느린 편이다.
초창기 얼굴 검출 연구에서 많이 사용되었고, 이후 다양한 프로젝트의 기준 모델로 활용되었다.


2. SCRFD란 무엇인가

SCRFD는 RetinaFace의 후속 세대처럼 활용되는 최신 얼굴 검출 모델이다.
anchor-free 방식을 사용하며, 가벼운 구조와 높은 정확도를 동시에 갖춘 것이 특징이다.
InsightFace 팀에서 공개한 모델이며, 500M, 2.5G, 10G 등 GFLOPs 기준으로 다양한 경량화 옵션을 제공한다.

SCRFD는 모바일과 엣지 디바이스에서 빠르게 추론되도록 설계된 모델이며, ncnn과 ONNX 기반 환경에서 특히 높은 성능을 보여준다.
실시간 얼굴 검출이 필요한 Android 환경에서 많이 선택되는 모델이다.


3. ncnn이란 무엇인가

ncnn은 Tencent가 개발한 고성능 추론 엔진이다.
C++ 기반으로 동작하며, 모바일 및 엣지 디바이스에서 경량 모델을 빠르게 실행하기 위해 만들어진 프레임워크이다.

ncnn은 모델을 두 개의 파일로 분리한다.

  • .param : 네트워크 구조 정의
  • .bin : 모델 가중치 데이터

이 두 파일을 로딩하여 추론을 수행한다.
모바일 환경에서 매우 빠르게 동작하며, JNI+C++ 기반 Android 개발에서 널리 사용된다.
RetinaFace와 SCRFD 모두 ONNX에서 변환하여 ncnn 포맷으로 사용할 수 있다.

ncnn의 장점은 다음과 같다.

  • 안드로이드에서 매우 빠른 처리 속도를 제공함
  • GPU 없이도 속도 효율이 좋음
  • 메모리 사용량이 낮음
  • 모델 최적화(옵션 레이어 fusion 등)가 안정적으로 적용됨
  • C++ 기반 제어가 가능해 실시간 영상 처리와 잘 맞음

4. TFLite란 무엇인가

TFLite는 Google이 제공하는 TensorFlow Lite 추론 엔진이다.
TensorFlow 모델을 모바일에서 구동하기 위해 경량화한 버전이며, Android 환경에서 가장 널리 사용되는 ML 런타임 중 하나이다.

TFLite는 단일 .tflite 파일로 모델이 구성되어 있다.
가중치와 네트워크 구조가 하나의 파일에 포함되는 형태이다.

TFLite의 장점은 다음과 같다.

  • Android(Java/Kotlin)에서 쉽게 사용 가능함
  • 양자화(int8, float16 등) 기능이 잘 정리되어 있어 경량 모델 만들기 용이함
  • ML Kit 스타일처럼 자바 레벨에서 추론하기 편리함
  • GPU Delegate, NNAPI Delegate 등 하드웨어 가속 기능이 지원됨

하지만 C++ 기반 실시간 영상 처리에서는 ncnn보다 속도나 메모리 효율이 떨어지는 경우가 있다.
특히 얼굴 검출처럼 매 프레임 수행되는 작업에서는 ncnn이 더 적합한 경우가 많다.


5. RetinaFace와 SCRFD의 성능 및 활용 비교

아래는 두 모델의 일반적인 특징을 정리한 것이다.

항목RetinaFaceSCRFD
구조anchor-basedanchor-free
속도상대적으로 느림매우 빠름
모바일 최적화낮음높음
정확도준수함더 안정적임
ncnn 호환성보통매우 높음
랜드마크지원함kps 버전에서 지원함

실시간 추론 환경(Android, JNI+C++)에서는 SCRFD가 더 많이 사용된다.
RetinaFace는 이전 세대의 모델로서 현재는 특정 프로젝트나 연구 목적에서만 활용되는 경우가 많다.


6. 파일 구조 정리

1) ncnn 모델 파일

ncnn은 두 개의 파일로 구성된다.

  • .param : 네트워크 구조
  • .bin : 가중치 파일

이 두 파일을 net.load_param()net.load_model()으로 로드하면 추론이 가능하다.

2) TFLite 모델 파일

  • .tflite : 구조 + 가중치가 하나로 합쳐진 단일 파일

Android 환경에서는 Interpreter를 생성하고 .tflite 파일을 메모리에 로드하여 추론을 수행한다.


7. 정리

RetinaFace와 SCRFD는 모두 사전 학습된 얼굴 검출 모델이다.
RetinaFace는 구세대의 안정적인 기준 모델이며, SCRFD는 모바일에 최적화된 최신 얼굴 검출 모델이다.

ncnn은 C++ 기반 고속 추론에 적합한 엔진이며, SCRFD와의 조합에서 특히 높은 효율을 보인다.
TFLite는 단일 파일 기반 구조를 가지고 있으며 Android 환경에서 쉽게 사용할 수 있으나, 실시간 고성능 처리가 필요할 때는 ncnn이 더 적합하다.

이 글은 업무 중 얼굴 검출기와 추론 엔진을 다루면서, 관련 개념을 공부하고 찾아본 내용을 정리해두기 위함이다. 실제 프로젝트에서 모델 선택이나 포맷 변환 작업을 할 때 참고하기 위한 개인 기록용임!!!

Leave a Comment