edge-sign / src /quantize_int8.py
gyann's picture
Deploy Edge-Sign (Direction A redesign) β€” detection+tracking+recognition+Q&A
76ec265 verified
Raw
History Blame Contribute Delete
1.33 kB
import os
from onnxruntime.quantization import QuantType, quantize_dynamic
# 경둜 μ„ΈνŒ… (export_onnx.py μ‹€ν–‰ ν›„ μƒμ„±λœ FP32 파일 κ²½λ‘œμ™€ λ§žμΆ°μ„œ μ‚¬μš©)
FP32_ONNX_PATH = "./model_space/convnextv2_fp32.onnx"
INT8_ONNX_PATH = "./model_space/convnextv2_int8.onnx"
if __name__ == "__main__":
print("Real INT8 Quantization ν”„λ‘œμ„ΈμŠ€")
if not os.path.exists(FP32_ONNX_PATH):
raise FileNotFoundError("FP32 ONNX 파일이 μ—†μŠ΅λ‹ˆλ‹€. Step 1을 λ¨Όμ € μ‹€ν–‰ν•΄ μ£Όμ„Έμš”.")
# 동적 μ–‘μžν™”(Dynamic Quantization) μˆ˜ν–‰
# - κ°€μ€‘μΉ˜(Weight)λŠ” INT8둜 물리적 λ³€ν™˜λ˜μ–΄ μ €μž₯됨
# - ν™œμ„±ν™” ν•¨μˆ˜(Activation)λŠ” μΆ”λ‘  μ‹œμ μ— λ™μ μœΌλ‘œ INT8 λ³€ν™˜λ˜μ–΄ μ—°μ‚° 가속
quantize_dynamic(
model_input=FP32_ONNX_PATH,
model_output=INT8_ONNX_PATH,
weight_type=QuantType.QUInt8, # μ–‘μžν™” νƒ€μž… μ§€μ • (Unsigned / Signed INT8)
)
fp32_size = os.path.getsize(FP32_ONNX_PATH) / (1024 * 1024)
int8_size = os.path.getsize(INT8_ONNX_PATH) / (1024 * 1024)
print("\nμ–‘μžν™” μ••μΆ• κ²°κ³Ό 리포트")
print(f" - 원본 FP32 λͺ¨λΈ μš©λŸ‰: {fp32_size:.2f} MB")
print(f" - μ••μΆ• INT8 λͺ¨λΈ μš©λŸ‰: {int8_size:.2f} MB")
print(f" - μ••μΆ•λ₯ : μ•½ {fp32_size / int8_size:.1f}λ°°")