PART 06에서 DeepFace의 가장 큰 부담이 TensorFlow였습니다. InsightFace는 그 부담을 덜어 줍니다. 무거운 딥러닝 프레임워크 대신 onnxruntime이라는 가벼운 실행기로 모델을 돌리기 때문입니다. 이 장에서는 PART 00에서 예고한 "ONNX 계열 vs TensorFlow 계열"의 갈림길을, 이제 실제로 체감합니다.
ONNX란 무엇인가
ONNX(Open Neural Network Exchange)는 딥러닝 모델을 담는 공통 파일 형식입니다. 어떤 프레임워크로 학습했든 ONNX로 바꾸면, onnxruntime이라는 가벼운 실행기 하나로 돌릴 수 있습니다. 비유하자면 다양한 문서 프로그램에서 만든 파일을 PDF로 통일해, PDF 뷰어 하나로 보는 것과 같습니다.
InsightFace의 buffalo_l 모델들은 모두 ONNX 형식이고, onnxruntime이 이를 실행합니다. 그래서 TensorFlow를 통째로 설치할 필요가 없습니다.
TensorFlow 계열과 비교
PART 00의 지형도에서 라이브러리를 "설치 마찰"로 나눈 것을 기억할 것입니다. 그 갈림길이 여기서 분명해집니다.
| 항목 | DeepFace(TF 계열) | InsightFace(ONNX 계열) |
|---|---|---|
| 실행기 | TensorFlow | onnxruntime |
| 설치 무게 | 무거움(수백 MB+) | 가벼움 |
| tf-keras 같은 함정 | 있음 | 없음 |
| 첫 실행 속도 | 느림(로딩 큼) | 상대적으로 빠름 |
| 추론 속도 | 보통 | 빠름 |
PART 06에서 겪은 tf-keras 오류 같은 TensorFlow 특유의 함정이 InsightFace에는 없습니다. 설치도 가볍고, 같은 ArcFace 모델이라도 onnxruntime으로 더 빠르게 추론합니다. "ArcFace의 정확도는 원하지만 TensorFlow의 무게는 피하고 싶다"면 InsightFace가 답입니다.
실행 장치 고르기 — providers
onnxruntime은 어떤 하드웨어로 계산할지를 provider로 고릅니다. 설치된 환경에서 쓸 수 있는 provider가 무엇인지 확인할 수 있습니다.
# 파일: providers.pyimport onnxruntime as ortprint(ort.get_available_providers())# 예: ['CoreMLExecutionProvider', 'CPUExecutionProvider'] (Apple Silicon 맥)# ['CUDAExecutionProvider', 'CPUExecutionProvider'] (NVIDIA GPU)
InsightFace에 provider를 지정하면 그 장치로 추론합니다.
# 파일: pick_provider.pyfrom insightface.app import FaceAnalysis# CPU만 명시 (가장 호환성 높음)app = FaceAnalysis(name="buffalo_l", providers=["CPUExecutionProvider"])app.prepare(ctx_id=-1, det_size=(640, 640))
| Provider | 장치 | 비고 |
|---|---|---|
CPUExecutionProvider |
CPU | 어디서나 동작, 기본 |
CUDAExecutionProvider |
NVIDIA GPU | 대량·실시간에 유리 |
CoreMLExecutionProvider |
Apple Silicon | 맥에서 가속 |
PART 06에서 Apple Silicon 맥의 TensorFlow 가속이 까다로웠던 것과 대조적으로, InsightFace는 onnxruntime의 CoreML provider로 맥에서도 비교적 수월하게 가속할 수 있습니다. providers를 생략하면 onnxruntime이 가용한 것 중 적절한 것을 자동으로 고릅니다.
실무 팁. provider를 지정했는데 그 장치가 없으면 onnxruntime은 조용히 CPU로 떨어집니다(에러가 아니라 경고). "GPU를 켰는데 왜 안 빨라지지?" 싶으면, 실제로 어떤 provider가 활성화됐는지 확인하세요. CUDA provider를 쓰려면 그에 맞는 onnxruntime-gpu와 CUDA 라이브러리가 따로 필요합니다. 기본
onnxruntime(CPU판)만 깔려 있으면 GPU는 쓰이지 않습니다.
이 장에서 기억할 것
InsightFace는 ONNX 형식 모델을 가벼운 onnxruntime으로 실행해, TensorFlow의 무게와 tf-keras 같은 함정을 피합니다. 같은 ArcFace라도 더 가볍고 빠릅니다. 실행 장치는 provider(CPU·CUDA·CoreML)로 고르며, Apple Silicon에서는 CoreML로 수월하게 가속됩니다. provider가 없으면 조용히 CPU로 내려가니 실제 활성 provider를 확인하세요. 다음 장에서는 이 빠른 임베딩을 대규모 검색으로 확장하는 faiss를 다룹니다.