iBetter Books
수정

앞 장이 일반적인 추론 최적화였다면, 이 장은 특정 환경, 특히 Intel 하드웨어와 엣지 기기에 초점을 둡니다. 서버 GPU가 없는 현장(키오스크, 산업용 PC, 소형 기기)에서 얼굴 시스템을 돌려야 할 때의 선택지입니다. 환경이 Intel 계열이 아니라면 개념만 가볍게 보고 넘어가도 됩니다.

OpenVINO란

OpenVINO는 Intel이 만든 추론 최적화 도구입니다. Intel CPU에 내장된 그래픽(iGPU)이나 전용 가속기를 활용해, 같은 모델을 더 빠르게 돌립니다. 비싼 외장 GPU가 없는 일반 PC·산업용 기기에서 특히 유용합니다.

핵심 아이디어는 PART 07의 ONNX와 비슷합니다. 학습된 모델을 OpenVINO 전용 형식(IR, Intermediate Representation)으로 변환한 뒤, OpenVINO 런타임으로 실행합니다. 우리가 쓰던 ONNX 모델도 OpenVINO로 변환해 쓸 수 있습니다.

flowchart LR A[ONNX 모델] --> B[OpenVINO 변환
IR 형식] B --> C[OpenVINO 런타임] C --> D[Intel CPU/iGPU/가속기]

설치는 별도입니다(이 책 기본 환경에는 없습니다).

pip install openvino

OpenVINO는 ONNX 모델을 직접 읽을 수도 있어, 간단히는 변환 없이 ONNX를 OpenVINO 런타임으로 실행해 Intel 가속을 받는 것부터 시작할 수 있습니다. 더 나아가 IR로 변환하면 추가 최적화를 얻습니다.

엣지 기기를 위한 고려

라즈베리파이, 키오스크, 산업용 소형 PC 같은 엣지 기기는 자원이 빠듯합니다. 여기서는 단순히 빠른 런타임만으로 부족하고, 모델 자체를 가볍게 만드는 고려가 필요합니다.

기법 내용 효과
경량 모델 선택 buffalo_s, YOLO-n 등 작은 등급(PART 02·07) 메모리·속도
양자화(quantization) 가중치를 8비트 등으로 줄임 크기·속도, 약간의 정확도 손실
입력 축소 det_size·해상도 낮추기 속도(작은 얼굴 놓칠 수 있음)
단계 생략 필요 없는 단계 빼기(PART 00) 전체 절약

양자화는 모델의 숫자 정밀도를 낮춰(예: 32비트 실수를 8비트 정수로) 크기와 연산을 줄이는 기법입니다. 약간의 정확도를 내주는 대신 엣지 기기에서 큰 속도·메모리 이득을 얻습니다. OpenVINO를 비롯한 여러 도구가 이 양자화를 지원합니다.

엣지 설계의 원칙

엣지에서는 "무엇을 기기에서, 무엇을 서버에서 할까"의 분담이 중요합니다.

  • 엣지에서: 가벼운 검출과 빠른 일차 판단(예: 얼굴 유무, 라이브니스)
  • 서버에서: 무거운 대규모 인식·검색(PART 07)

예컨대 출입 기기에서 라이브니스와 검출만 하고, 임베딩 비교는 서버에 맡기는 식입니다. 모든 것을 엣지에서 하려다 느려지는 것보다, 역할을 나누는 편이 현실적입니다. PART 10의 FastAPI 구조가 바로 이 분담을 가능하게 합니다.

실무 팁. 엣지 최적화는 "정확도를 얼마나 내줄 수 있는가"를 먼저 정하고 시작하세요. 양자화·경량 모델·입력 축소는 모두 속도를 위해 정확도를 조금씩 희생합니다. 1장에서 만든 평가 절차(FAR/FRR)로 경량화 전후의 정확도를 측정해, 허용 범위 안에서만 가볍게 하는 것이 안전합니다. 측정 없는 경량화는 "빠르지만 못 쓰는" 시스템을 만들 위험이 있습니다.

이 장에서 기억할 것

OpenVINO는 Intel CPU·iGPU·가속기를 활용하는 추론 최적화 도구로, ONNX 모델을 IR로 변환하거나 직접 실행해 외장 GPU 없는 환경에서 속도를 얻습니다. 엣지 기기에서는 런타임뿐 아니라 경량 모델·양자화·입력 축소로 모델 자체를 가볍게 하고, 엣지(가벼운 검출·라이브니스)와 서버(무거운 인식)로 역할을 나눕니다. 경량화는 1장의 평가로 정확도 손실을 측정하며 진행합니다. 다음 장에서는 이렇게 만든 시스템을 어디서나 똑같이 돌리는 재현 가능한 배포를 다룹니다.