Search

TensorFlow 모델의 TensorFlow.js 이식

작성일
2021/02/02
태그
TensorFlow
tensorflow.js
GPU
Environment
작성자
Empty
1 more property

Python으로 개발한 TensorFlow 모델의 변환

해당 변환 과정은 TensorFlow 2.x를 기준으로 한다.
TensorFlow를 통해 학습한 모델을 Keras SavedModel의 형식으로 export 한다.
Keras Model 하위 클래스에서 model.save method를 호출하는 식으로 저장하면 된다.
혼동이 올 수 있지만, TensorFlow SavedModel 형식과 Keras SavedModel 형식은 다른 형식이다.
TensorFlow SavedModel 형식의 경우, GraphModel API를 통해 불러와야 한다.
const model = await tf.loadGraphModel(‘path/to/model.json’);
JavaScript
Keras SaedModel 형식의 경우, LayersModel API를 통해 불러와야 한다.
const model = await tf.loadLayersModel(‘path/to/model.json’);
JavaScript
TensorFlow 2.x 이상의 코드는 최대한 Keras API를 통해 작성하는 것이 커뮤니티 지원 및 사후지원에 유리하기 때문에, Keras SavedModel을 이용하는 것이 좋다.

tensorflowjs_converter로 js 모델 변환

Keras SavedModel 형식의 모델은 쉽게 js 모델로 변환될 수 있다.
tensorflowjs_converter는 pip install tensorflowjs를 통해 설치할 수 있다.
tensorflowjs_converter와, tensorflow.js의 버젼을 동일하게 맞추는 것이 호환성에 좋다.
tensorflowjs_converter --input_format keras_saved_model /model/path

성능 디버깅

tensorflowjs로 변환된 모델은 대부분의 경우 별 탈 없이 웹에서 실행할 수 있다.
하지만, 일부 operation, control flow 등은 구현체에 따라 성능이 천차만별이기에, Python + CUDA + TensorFlow의 속도에 WebGL + tensorflow.js의 속도가 한참 못미치는 경우도 존재한다.
for-loop, if문, 일부 사용자가 많지 않은 operation들이 사용되고 있는 경우 해당 구문을 제거하거나 대체하는 것이 성능 향상에 도움이 될 수 있다.
특정 operation의 경우, tensorflow의 graph 내에서가 아닌 pure JavaScript array 혹은 Canvas, ImageElement 등을 활용한 처리가 더 빠를 수 있다.