AI/Machine Learning

[ML] Tensorflow 모델을 TFLite 로 변환하는 방법

운호(Noah) 2022. 1. 25. 13:21

들어가기 앞서,

  • 양자화(quantization)는 float32 로 학습된 weight 값들을 float16, int8 등의 형태로 변환하는 작업을 의미합니다.
  • 이 작업을 하게되면, .tflite 의 파일크기가 대략 4분의 1정도로 줄어들게 되지만,
  • 세밀한 데이터값을 버리는 작업이므로, model 의 정확도를 잃을 수 있는 작업이 됩니다.
  • 결과적으로 양자화는, model 의 사이즈를 줄임으로써, 정확도는 떨어지지만 빠른 추론 시간을 얻게 되는 작업이라고 볼 수 있습니다.

TFLite 변환 시, FP16 양자화 적용 예제

  • 파일로 저장되어 있는 모델을 load 한 뒤, TFLite 모델로 변환

      import tensorflow as tf
    
      # 파일로 저장되어 있는 모델을 load 한 뒤, TFLite 모델로 변환
      converter = tf.lite.TFLiteConverter.from_saved_model('모델파일위치')
    
      # FP16 양자화 설정
      converter.target_spec.supported_types = [tf.float16]
      converter.optimizations = [tf.lite.Optimize.DEFAULT]
    
      # 모델 양자화
      tflite_model = converter.convert()
    
      # 변환된 모델을 .tflite 파일에 저장
      open("변환모델저장명.tflite", "wb").write(tflite_model)
  • 변수로 저장되어 있는 모델을, TFLite 모델로 변환

      import tensorflow as tf
    
      # 변수로 저장되어 있는 모델을, TFLite 모델로 변환
      converter = tf.lite.TFLiteConverter.from_keras_model(모델변수)
    
      # FP16 양자화 설정
      converter.target_spec.supported_types = [tf.float16]
      converter.optimizations = [tf.lite.Optimize.DEFAULT]
    
      # 모델 양자화
      tflite_model = converter.convert()
    
      # 변환된 모델을 .tflite 파일에 저장
      open("변환모델저장명.tflite", "wb").write(tflite_model)

참고