OpenVINO int8 모델 변환 2024.5 버전
2024. 12. 14. 13:12ㆍ프로그래밍
OpenVINO 2022 버전의 경우는 아래 블로그에 int8 모델 변환이 잘 설명되어 있습니다만,
https://da2so.tistory.com/65
2024.5 버전으로 오면서 INT8 모델 변환하는 것이 NNCF (Neural Network Compression Framework) 사용으로 변경되었습니다.
NNCF는 비단 OpenVINO뿐 아니라, ONNX, PyTorch, TensorFlow 등도 지원합니다.
pip install openvino==2024.5.0
pip install openvino-dev==2024.5.0
pip install nncf==2.14.0
from openvino.runtime import Core
from openvino.runtime import serialize
from nncf import quantize
from nncf import Dataset
import os
import numpy as np
import cv2
import glob
core = Core()
model = core.read_model("openvino_model/personFace.xml")
# Path to COCO 2017 validation images
coco_val_dir = "datasets/coco/coco_2017/val2017"
# Define the calibration dataset generator
class CalibrationDataset:
def __init__(self, dataset_path, input_shape=(640, 640)):
self.dataset_path = dataset_path
self.input_shape = input_shape
self.image_paths = glob.glob(f"{dataset_path}/*.jpg") # Adjust to your dataset format
def __len__(self):
return len(self.image_paths)
def __getitem__(self, idx):
# Load and preprocess the image
image = cv2.imread(self.image_paths[idx])
image = cv2.resize(image, self.input_shape)
image = image.transpose(2, 0, 1) # HWC to CHW
#image = image.astype(np.float32) / 255.0 # Normalize to [0, 1]
image = image.astype(np.float32)
image = np.expand_dims(image, axis=0)
return image
data_source = Dataset(CalibrationDataset(coco_val_dir))
quantized_model = quantize(model, data_source)
# change subset_size to 1000
# quantized_model = quantize(model, data_source, subset_size=1000)
serialize(quantized_model, "personFace_int8.xml","personFace_int8.bin")
print("Quantization completed. Model saved !")
Quantization에 사용할 이미지들을 공급하는 CalibrationDataSet을 정의하고, nncf모듈의 Dataset class를 생성한 후, 로딩된 float16내지 float32 openvino model과 함께 파라미터로 해서 nncf모듈 quantize 함수로 quantization을 수행합니다. quanized_model을 openvino serialize 함수로 저장하면 됩니다.
nncf.quantize 함수의 paramter들에 대해서 아래 링크에서 상세히 알 수 있습니다.
'프로그래밍' 카테고리의 다른 글
C++ wchar unicode utf-8 utf-32 (0) | 2024.09.06 |
---|---|
C 혹은 C++ 에서 실행중인 파일 경로 구하기 (0) | 2024.08.27 |
Python과 C 혹은 C++ 연동 사용하기 (0) | 2024.08.27 |
ChatGPT의 sample code 오류 (0) | 2023.03.08 |