TensorFlow GraphDef 기반 모델(일반적으로 Python API를 통해 생성됨)은 다음 형식 중 하나로 저장할 수 있습니다.
- TensorFlow 저장된 모델
- 냉동 모델
- 텐서플로우 허브 모듈
위의 모든 형식은 TensorFlow.js 변환기 에서 추론을 위해 TensorFlow.js에 직접 로드할 수 있는 형식으로 변환할 수 있습니다.
(참고: TensorFlow는 세션 번들 형식을 더 이상 사용하지 않습니다. 모델을 저장된 모델 형식으로 마이그레이션하십시오.)
요구 사항
변환 절차에는 Python 환경이 필요합니다. pipenv 또는 virtualenv 를 사용하여 격리된 것을 유지하고 싶을 수 있습니다. 변환기를 설치하려면 다음 명령을 실행하십시오.
pip install tensorflowjs
TensorFlow 모델을 TensorFlow.js로 가져오는 것은 2단계 프로세스입니다. 먼저 기존 모델을 TensorFlow.js 웹 형식으로 변환한 다음 TensorFlow.js에 로드합니다.
1단계. 기존 TensorFlow 모델을 TensorFlow.js 웹 형식으로 변환
pip 패키지에서 제공하는 변환기 스크립트를 실행합니다.
사용법: 저장된 모델 예:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_node_names='MobilenetV1/Predictions/Reshape_1' \
--saved_model_tags=serve \
/mobilenet/saved_model \
/mobilenet/web_model
냉동 모델 예:
tensorflowjs_converter \
--input_format=tf_frozen_model \
--output_node_names='MobilenetV1/Predictions/Reshape_1' \
/mobilenet/frozen_model.pb \
/mobilenet/web_model
Tensorflow Hub 모듈 예시:
tensorflowjs_converter \
--input_format=tf_hub \
'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1' \
/mobilenet/web_model
위치 인수 | 설명 |
---|---|
input_path | 저장된 모델 디렉토리, 세션 번들 디렉토리, 고정 모델 파일 또는 TensorFlow Hub 모듈 핸들 또는 경로의 전체 경로입니다. |
output_path | 모든 출력 아티팩트의 경로입니다. |
옵션 | 설명 |
---|---|
--input_format | 입력 모델의 형식은 SavedModel에 tf_saved_model, 고정 모델에 tf_frozen_model, 세션 번들에 tf_session_bundle, TensorFlow Hub 모듈에 tf_hub, Keras HDF5에 keras를 사용합니다. |
--output_node_names | 쉼표로 구분된 출력 노드의 이름입니다. |
--saved_model_tags | 쉼표로 구분된 형식으로 로드할 MetaGraphDef의 태그인 SavedModel 변환에만 적용됩니다. 기본적으로 serve 됩니다. |
--signature_name | TensorFlow Hub 모듈 변환, 로드할 서명에만 적용됩니다. 기본값은 default 입니다. https://www.tensorflow.org/hub/common_signatures/ 참조 |
자세한 도움말 메시지를 보려면 다음 명령을 사용하십시오.
tensorflowjs_converter --help
변환기 생성 파일
위의 변환 스크립트는 두 가지 유형의 파일을 생성합니다.
-
model.json
(데이터 흐름 그래프 및 가중치 매니페스트) -
group1-shard\*of\*
(바이너리 가중치 파일 모음)
예를 들어 다음은 MobileNet v2를 변환한 결과입니다.
output_directory/model.json
output_directory/group1-shard1of5
...
output_directory/group1-shard5of5
2단계: 브라우저에서 로드 및 실행
- tfjs-converter npm 패키지 설치
yarn add @tensorflow/tfjs
또는 npm install @tensorflow/tfjs
- FrozenModel 클래스 를 인스턴스화하고 추론을 실행합니다.
import * as tf from '@tensorflow/tfjs';
import {loadGraphModel} from '@tensorflow/tfjs-converter';
const MODEL_URL = 'model_directory/model.json';
const model = await loadGraphModel(MODEL_URL);
const cat = document.getElementById('cat');
model.execute(tf.browser.fromPixels(cat));
MobileNet 데모 를 확인하십시오.
loadGraphModel
API는 요청과 함께 자격 증명 또는 사용자 지정 헤더를 보내는 데 사용할 수 있는 추가 LoadOptions
매개 변수를 허용합니다. 자세한 내용은 loadGraphModel() 문서 를 참조하십시오.
지원되는 작업
현재 TensorFlow.js는 제한된 TensorFlow 작업 세트를 지원합니다. 모델이 지원되지 않는 작업을 사용하는 경우 tensorflowjs_converter
스크립트가 실패하고 모델에서 지원되지 않는 작업 목록을 출력합니다. 각 작업에 대한 문제 를 제출하여 지원이 필요한 작업을 알려주십시오.
가중치만 로드
가중치만 로드하려는 경우 다음 코드 스니펫을 사용할 수 있습니다.
import * as tf from '@tensorflow/tfjs';
const weightManifestUrl = "https://example.org/model/weights_manifest.json";
const manifest = await fetch(weightManifestUrl);
this.weightManifest = await manifest.json();
const weightMap = await tf.io.loadWeights(
this.weightManifest, "https://example.org/model");