1. OpenVINO란?
OpenVINO는 intel에서 주도적으로 진행 중인 프로젝트입니다. OpenVINO는 다양한 Deep Learning(DL) framework(e.g. PyTorch, TF)의 모델들을 OPenVINO 모델로 변환하여 intel device에 최적화된 inference를 할 수 있도록 해줍니다. 그래서 intel cpu나 gpu에서 DL 모델을 inference할 경우가 생기신다면 OpenVINO를 사용하셔야 latency성능이 좋아집니다!
추가적으로 OpenVINO는 다음과 같은 특성은 제공합니다.
- Pruning, Quantization을 통한 model size 및 inference 최적화
- Model의 preprocessing, postprocessing 기능 제공
- intel cpu뿐만이 아닌 arm cpu, mac m1 chip에 대한 연산 지원
위의 특성에 대해서는 이후 글에서 차차 알아보고 오늘은 (1) OpenVINO변환을 어떻게 하는 지 (2) 변환된 OpenVINO 모델이 어떤 특성을 갖는지 설명드리겠습니다.
2. OpenVINO 모델 변환
2.1 환경 설정
저는 ONNX모델을 input 모델로 사용하여 OpenVINO형태의 모델로 변환할 것이고 제가 사용한 intel cpu정보와 OpenVINO toolkit의 버전은 아래와 같습니다.
- openvino-dev: 2022.1.0 (from PypI)
- CPU: Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz (가상 core수: 56)
- Model: yolov7 ONNX model (for detection task)
- ONNX 정보: 1.9.0 version, 12 opset
2.2 OpenVINO Model Converting
ONNX모델을 OpenVINo로 변경하는 방법은 엄청 간단합니다. CLI하나면 끝납니다.
mo --input_model ${onnx_path} --output_dir ${output_dir}
# Ex) mo --input_model yolov7.onxx --output_dir yolov7_openvino
openvino-dev PyPI를 설치하셨다면 mo
명령어를 사용 가능합니다. 그래서 --input_model
에는 onnx model의 path를 --output_dir
에는 OpenVINO 모델이 저장될 directory를 의미합니다.
명령어가 정상적으로 실행되었다면 아래와 같은 결과를 볼 수 있습니다.
위의 출력을 통해 다양한 정보를 알 수 있습니다.
- OpenVINO모델 변환 시 weight type은 따로 지정하지 않았으므로 default인 FP32로 변환됨
- OpenVINO모델은 Intermediate Representation(IR)이므로 여러 DL framework들을 하나의 OpenVINO모델로 변환 가능하게 하는 이유기도 함
- version은 11
- OpenVINO의 IR은 yolov7_openvino 폴더에 yolov7.xml, yolov7.bin파일로 생성
- yolov7.xml: model의 topology를 표현
- Topology란 model내의 layer 순서, layer의 특성 등을 포함함
- yolov7.bin: model의 weight와 bias값을 binary형태로 가짐
- yolov7.xml: model의 topology를 표현
아래는 yolov7.xml의 내용을 부분적으로 보여드립니다.
마지막으로 ONNX모델과 OpenVINO model size차이를 비교해봅니다. 모델은 여기서 다운 가능하십니다.
Model Type | Model size (MB) |
ONNX | 147.7 |
OpenVINO | bin:147.6 xml:0.4 |
다음 글에서는 OpenVINO모델을 inference 하는 글을 작성하겠습니다. 수고하셨습니다~
'AI Engineering > OpenVINO' 카테고리의 다른 글
OpenVINO 뽀개기 (3) OpenVINO Quantization (0) | 2022.08.22 |
---|---|
OpenVINO 뽀개기 (2) OpenVINO Inference (0) | 2022.08.16 |