본문 바로가기

Python

OpenVINO 사용 방법 정리

320x100
320x100

 

 모델 학습에는 GPU가 필수적이지만 학습이 완료된 모델을 납품할 때는 GPU가 달린 워크스테이션 형태로 납품하는 건 꺼려지게 된다. 비용이 많이 들기 때문이다. 소비자 입장에서도 워크스테이션 비용을 감당해야해서 거부감을 많이 느낀다. 그래서 여러 회사에서는 GPU 없는 MiniPC 환경에서도 충분히 모델을 돌릴 수 있게 경량화 작업을 거친다. Knowledge Distillation 기법을 쓰거나 애초에 사이즈가 작은 network를 사용한다거나 하는데... 이런거 저런거 신경 쓸 거 없이 한 번에 해결해주는 툴이 있다. 바로 인텔의 OpenVINO ToolKit이다. 학습이 완료된 모델을 OpenVINO로 변환해서 사용해보면 inference time이 기대 이상으로 빠르다는 걸 느낄 수 있다.

 

 문제는 OpenVINO가 사용성이 좀 떨어진다는 점이다. conda나 pip을 사용해서 설치할 수 없고 수동으로 설치해야한다. 설치하고 나서도 추가로 다운받아야하는 게 또 있어서 환경설정 하다보면 '아.. 그냥 하지 말까?'하는 생각을 하게 된다. 이 글을 나와 같은 생각을 하는 분들을 위해 쓰는 글인만큼 많이 유명해지길 기대해본다ㅋ

 

 

1. OpenVINO 설치

 먼저 링크에서 설치 파일 다운 받은 후 설치를 진행하자. 이때 설치경로로 이동해서 추가로 다운로드해야하는 게 있으니까 설치경로도 확인해두도록 하자.

 

2. 환경변수 설정

 환경변수라 해서 시스템 변수 들어가서 PATH에 경로 추가하는 걸 생각했을텐데 그건 아니다. CMD창을 통해 위에서 확인한 설치경로 밑에 bin폴더로 들어가서 setupvars.bat을 실행하도록 하자.

 

 

3. 모델 옵티마이저 설치

 정확히 무슨 역할을 하는 건지는 모르지만 설치해줘야 한다. (예를 들어, Keras 모델을 OpenVINO 모델로 변환할 때 중요한 역할을 하는 것으로 예상된다). CMD창으로 설치경로/deployment_tools/model_optimizer/install_prerequisties로 들어가서 install_prerequisites.bat을 실행시켜주자.

 

 

 

4. 모델 변환

 OpenVINO 사용에 필요한 설정은 끝냈고 이제 직접 모델을 변환한 다음에 사용해보도록 하자.  Keras 기준으로 설명해보자.

 

(1) 아래 코드 사용해서 h5 파일 → pb 파일로 변환

import tensorflow as tf
from tensorflow.keras.models import load_model
from tensorflow.python.framework import graph_io

def freezing_model_tf1(path):
    tf.keras.backend.set_learning_phase(0)
    model   = load_model(path, compile=False)
    outputs = [t.op.name for t in model.outputs]
    
    session = tf.keras.backend.get_session()
    with session.graph.as_default():
        def_inf    = tf.graph_util.remove_training_nodes(session.graph.as_graph_def())
        def_frozen = tf.graph_util.convert_variables_to_constants(session, def_inf, outputs)

    return def_frozen

if __name__ == '__main__':
    path = './keras/model.h5'
    save_root = './frozen'
    save_name = 'model.pb'
    
    frozen_model = freezing_model_tf1(path)
    graph_io.write_graph(frozen_model, save_root, save_name, as_text=False)

 

(2) pb 파일 → xml, bin 파일로 변환
  ① OpenVINO 모델은 xml, bin 파일로 구성됨

  ② C:/Program Files (x86)/IntelSWTools/openvino_2020.3.194/deployment_tools/model_optimizer 이동

  ③ python mo.py --input_model ./model.pb --input_shape [1,64,64,3] --output_dir ./ --data_type FP32 --framework tf

 

 

5. Inference OpenVINO Model

 변환된 모델을 inference하기 위해선 OpenVINO 문법에 맞춰서 짜여진 코드가 필요하고, 그 다음으로 .py 파일을 CMD창에서 실행해주면 된다. 다만 이때 알아둬야할 점은 '2. 환경변수 설정' 과정을 무조건 한 번 더 거친 다음에 .py 파일을 실행해줘야한다는 점이다. 다시 한 번 강조! setupvars.bat을 실행한 다음에 .py 실행해야 한다!

 

 

 

 

 

< 참고 사이트 >

https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html

https://reallyedutech.com/windows10openvinointel/

https://ai0.kr/16