Interpreter

パブリックファイナルクラス通訳

TensorFlowLiteでモデル推論を駆動するためのドライバークラス。

注:以下の「実験的な」API機能にアクセスする必要がない場合は、Interpreterを直接使用するのではなく、InterpreterApiとInterpreterFactoryを使用することをお勧めします。

Interpreterは、事前にトレーニングされたTensorFlow Liteモデルをカプセル化します。このモデルでは、モデルの推論のために操作が実行されます。

たとえば、モデルが1つの入力のみを受け取り、1つの出力のみを返す場合:

try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 }
 

モデルが複数の入力または出力を受け取る場合:

Object[] inputs = {input0, input1, ...};
 Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
 FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4);  // Float tensor, shape 3x2x4.
 ith_output.order(ByteOrder.nativeOrder());
 map_of_indices_to_outputs.put(i, ith_output);
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

モデルがストリングテンサーを取得または生成する場合:

String[] input = {"foo", "bar"};  // Input tensor shape is [2].
 String[] output = new String[3][2];  // Output tensor shape is [3, 2].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

入力と出力の順序は、入力のデフォルトの形状と同様に、TensorFlowモデルをTocoを使用してTensorFlowLiteモデルに変換するときに決定されます。

入力が(多次元)配列として提供される場合、対応する入力テンソルは、その配列の形状に従って暗黙的にサイズ変更されます。入力がBufferタイプとして提供されている場合、暗黙的なサイズ変更は行われません。呼び出し元は、 Bufferのバイトサイズが対応するテンソルのバイトサイズと一致するか、最初にresizeInput(int, int[])を使用してテンソルのサイズを変更する必要があります。テンソルの形状とタイプの情報は、 getInputTensor(int)およびgetOutputTensor(int) )を介して利用可能なTensorクラスを介して取得できます。

警告: InterpreterインスタンスはスレッドセーフではありませんInterpreterは、 close()を呼び出すことによって明示的に解放する必要があるリソースを所有しています

TFLiteライブラリはNDKAPI19に対して構築されています。19未満のAndroidAPIレベルで動作する可能性がありますが、保証されていません。

ネストされたクラス

クラスInterpreter.Optionsランタイムインタープリターの動作を制御するためのオプションクラス。

パブリックコンストラクター

インタープリターファイルmodelFile)
Interpreterを初期化します。
インタープリターファイルmodelFile、 Interpreter.Optionsオプション)
Interpreterを初期化し、インタープリターの動作をカスタマイズするためのオプションを指定します。
インタプリタByteBuffer byteBuffer)
モデルファイルのByteBufferを使用してInterpreterを初期化します。
インタープリターByteBuffer byteBuffer、 Interpreter.Optionsオプション)
モデルファイルのByteBufferとカスタムInterpreter.Optionsのセットを使用してInterpreterを初期化します。

パブリックメソッド

空所
locateTensors ()
必要に応じて、すべてのテンサーの割り当てを明示的に更新します。
空所
閉じる()
InterpreterApiインスタンスに関連付けられているリソースを解放します。
int
getInputIndexString opName)
入力のop名を指定して入力のインデックスを取得します。
テンソル
getInputTensor (int inputIndex)
指定された入力インデックスに関連付けられたテンソルを取得します。
int
getInputTensorCount ()
入力テンサーの数を取得します。
テンソル
getInputTensorFromSignature文字列inputName、文字列signatureKey)
指定された入力名と署名メソッド名に関連付けられたテンソルを取得します。
長さ
getLastNativeInferenceDurationNanoseconds ()
ネイティブの推論タイミングを返します。
int
getOutputIndexString opName)
出力のop名を指定して出力のインデックスを取得します。
テンソル
getOutputTensor (int outputIndex)
指定された出力インデックスに関連付けられたテンソルを取得します。
int
getOutputTensorCount ()
出力テンソルの数を取得します。
テンソル
getOutputTensorFromSignature文字列outputName、文字列signatureKey)
特定の署名メソッドで提供された出力名に関連付けられたテンソルを取得します。
弦[]
getSignatureInputs文字列signatureKey)
メソッドsignatureKeyのSignatureDefs入力のリストを取得します。
弦[]
getSignatureKeys ()
モデルで使用可能なSignatureDefエクスポートされたメソッド名のリストを取得します。
弦[]
getSignatureOutputs文字列signatureKey)
メソッドsignatureKeyのSignatureDefs出力のリストを取得します。
空所
resetVariableTensors ()
詳細:すべての可変テンサーをデフォルト値にリセットします。
空所
resizeInput (int idx、int [] dims、boolean strict)
ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。
空所
resizeInput (int idx、int [] dims)
ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。
空所
runオブジェクト入力、オブジェクト出力)
モデルが1つの入力のみを受け取り、1つの出力のみを提供する場合、モデル推論を実行します。
空所
runForMultipleInputsOutputsObject []入力、 Map <整数Object >出力)
モデルが複数の入力を受け取るか、複​​数の出力を返す場合、モデル推論を実行します。
空所
runSignatureMap < StringObject >入力、 Map < StringObject >出力)
runSignature(Map, Map, String)同じですが、モデルに1つのSignatureDefがあると仮定すると、signatureKeyを渡す必要はありません。
空所
runSignatureマップ<文字列オブジェクト>入力、マップ<文字列オブジェクト>出力、文字列signatureKey)
signatureKeyを介して提供されるSignatureDefに基づいてモデル推論を実行します。
空所
setCancelled (ブールキャンセル)
詳細: run(Object, Object)の呼び出しの途中で推論を中断します。

継承されたメソッド

パブリックコンストラクター

public Interpreter ファイルmodelFile)

Interpreterを初期化します。

パラメーター
modelFile事前にトレーニングされたTFLiteモデルのファイル。
スロー
IllegalArgumentException modelFileが有効なTensorFlowLiteモデルをエンコードしていない場合。

public Interpreter ファイルmodelFile、 Interpreter.Optionsオプション)

Interpreterを初期化し、インタープリターの動作をカスタマイズするためのオプションを指定します。

パラメーター
modelFile事前にトレーニングされたTFLiteモデルのファイル
オプションインタプリタの動作をカスタマイズするための一連のオプション
スロー
IllegalArgumentException modelFileが有効なTensorFlowLiteモデルをエンコードしていない場合。

public Interpreter ByteBuffer byteBuffer)

モデルファイルのByteBufferを使用してInterpreterを初期化します。

Interpreterの作成後にByteBufferを変更しないでください。 ByteBufferは、モデルファイルをメモリマップするMappedByteBuffer 、またはモデルのバイトコンテンツを含むnativeOrder()の直接ByteBufferのいずれかです。

パラメーター
byteBuffer
スロー
IllegalArgumentException byteBufferMappedByteBufferでも、nativeOrderの直接ByteBufferでもない場合。

public Interpreter ByteBuffer byteBuffer、 Interpreter.Optionsオプション)

モデルファイルのByteBufferとカスタムInterpreter.Optionsのセットを使用してInterpreterを初期化します。

Interpreterの作成後にByteBufferを変更しないでください。 ByteBufferは、モデルファイルをメモリマップするMappedByteBuffer 、またはモデルのバイトコンテンツを含むnativeOrder()の直接ByteBufferのいずれかです。

パラメーター
byteBuffer
オプション
スロー
IllegalArgumentException byteBufferMappedByteBufferでも、nativeOrderの直接ByteBufferでもない場合。

パブリックメソッド

public voidlocateTensors

必要に応じて、すべてのテンサーの割り当てを明示的に更新します。

これにより、指定された入力テンソル形状を使用して、依存テンサーの形状とメモリ割り当てが伝播されます。

注:この呼び出しは*純粋にオプション*です。入力テンサーのサイズが変更されている場合、テンソルの割り当ては実行中に自動的に行われます。この呼び出しは、グラフを実行する前に出力テンサーの形状を決定するのに最も役立ちます(例:

interpreter.resizeInput(0, new int[]{1, 4, 4, 3}));
 interpreter.allocateTensors();
 FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0).numElements());
 // Populate inputs...
 FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
 interpreter.run(input, output)
 // Process outputs...
 
)。

注:一部のグラフには動的な形状の出力があります。その場合、推論が実行されるまで出力形状が完全に伝播しない場合があります。

public void close ()

InterpreterApiインスタンスに関連付けられているリソースを解放します。

public int getInputIndex String opName)

入力のop名を指定して入力のインデックスを取得します。

パラメーター
opName

public Tensor getInputTensor (int inputIndex)

指定された入力インデックスに関連付けられたテンソルを取得します。

パラメーター
inputIndex

public int getInputTensorCount ()

入力テンサーの数を取得します。

public Tensor getInputTensorFromSignature String inputName、 String SignatureKey)

指定された入力名と署名メソッド名に関連付けられたテンソルを取得します。

警告:これは実験的なAPIであり、変更される可能性があります。

パラメーター
inputName署名に名前を入力します。
署名キーSignatureDefを識別する署名キー。モデルに署名が1つある場合は、nullになる可能性があります。
スロー
IllegalArgumentException inputNameまたはsignatureKeyがnullまたは空の場合、または無効な名前が指定された場合。

public Long getLastNativeInferenceDurationNanoseconds ()

ネイティブの推論タイミングを返します。

public int getOutputIndex String opName)

出力のop名を指定して出力のインデックスを取得します。

パラメーター
opName

public Tensor getOutputTensor (int outputIndex)

指定された出力インデックスに関連付けられたテンソルを取得します。

注:出力テンソルの詳細(形状など)は、推論が実行されるまで完全に入力されない場合があります。推論を実行する*前*に詳細を更新する必要がある場合(たとえば、入力テンソルのサイズを変更した後、出力テンソルの形状が無効になる可能性があります)、 allocateTensors()を使用して、割り当てと形状の伝播を明示的にトリガーします。入力*値*に依存する出力形状を持つグラフの場合、推論を実行するまで出力形状が完全に決定されない場合があることに注意してください。

パラメーター
outputIndex

public int getOutputTensorCount ()

出力テンソルの数を取得します。

public Tensor getOutputTensorFromSignature String outputName、 String SignatureKey)

特定の署名メソッドで提供された出力名に関連付けられたテンソルを取得します。

注:出力テンソルの詳細(形状など)は、推論が実行されるまで完全に入力されない場合があります。推論を実行する*前*に詳細を更新する必要がある場合(たとえば、入力テンソルのサイズを変更した後、出力テンソルの形状が無効になる可能性があります)、 allocateTensors()を使用して、割り当てと形状の伝播を明示的にトリガーします。入力*値*に依存する出力形状を持つグラフの場合、推論を実行するまで出力形状が完全に決定されない場合があることに注意してください。

警告:これは実験的なAPIであり、変更される可能性があります。

パラメーター
outputName署名に名前を出力します。
署名キーSignatureDefを識別する署名キー。モデルに署名が1つある場合は、nullになる可能性があります。
スロー
IllegalArgumentException outputNameまたはsignatureKeyがnullまたは空の場合、または無効な名前が指定された場合。

public String [] getSignatureInputs 文字列signatureKey)

メソッドsignatureKeyのSignatureDefs入力のリストを取得します。

警告:これは実験的なAPIであり、変更される可能性があります。

パラメーター
署名キー

public String [] getSignatureKeys ()

モデルで使用可能なSignatureDefエクスポートされたメソッド名のリストを取得します。

警告:これは実験的なAPIであり、変更される可能性があります。

public String [] getSignatureOutputs 文字列signatureKey)

メソッドsignatureKeyのSignatureDefs出力のリストを取得します。

警告:これは実験的なAPIであり、変更される可能性があります。

パラメーター
署名キー

public void resetVariableTensors ()

詳細:すべての可変テンサーをデフォルト値にリセットします。

可変テンソルに関連するバッファーがない場合は、ゼロにリセットされます。

警告:これは実験的なAPIであり、変更される可能性があります。

public void resizeInput (int idx、int [] dims、boolean strict)

ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。

`strict`がTrueの場合、サイズ変更できるのは不明なディメンションのみです。不明な寸法は、 `Tensor.shapeSignature()`によって返される配列で`-1`として示されます。

パラメーター
idx
薄暗い
厳しい

public void resizeInput (int idx、int [] dims)

ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。

パラメーター
idx
薄暗い

public void run オブジェクト入力、オブジェクト出力)

モデルが1つの入力のみを受け取り、1つの出力のみを提供する場合、モデル推論を実行します。

警告:入力/出力データタイプとしてBuffer (できれば直接ですが、必須ではありません)を使用すると、APIの効率が向上します。パフォーマンスを向上させるために、 Bufferを使用してプリミティブデータをフィードおよびフェッチすることを検討してください。次の具体的なBufferタイプがサポートされています。

  • ByteBuffer基になるプリミティブTensorタイプと互換性があります。
  • FloatBuffer -floatTensorsと互換性があります。
  • IntBuffer -int32テンソルと互換性があります。
  • LongBuffer -int64テンソルと互換性があります。
ブール型は、 Bufferではなく配列として、またはスカラー入力としてのみサポートされることに注意してください。

パラメーター
入力配列または多次元配列、またはint、float、long、byteなどのプリミティブ型のBufferBufferは、プリミティブタイプの大きな入力データを渡すための推奨される方法ですが、文字列タイプでは、(多次元の)配列入力パスを使用する必要があります。 Bufferを使用する場合、モデルの推論が行われるまでその内容は変更されないままである必要があり、呼び出し元はBufferが適切な読み取り位置にあることを確認する必要があります。 null値は、呼び出し元がバッファーハンドルの相互運用を許可するDelegateを使用していて、そのようなバッファーが入力Tensorにバインドされている場合にのみ許可されます。
出力出力データの多次元配列、またはint、float、long、byteなどのプリミティブタイプのBufferBufferを使用する場合、呼び出し元は、バッファが適切な書き込み位置に設定されていることを確認する必要があります。 null値が許可され、特定の場合に役立ちます。たとえば、呼び出し元がバッファハンドルの相互運用を許可するDelegateを使用していて、そのようなバッファが出力Tensorにバインドされている場合( Interpreter.Options#setAllowBufferHandleOutput(boolean)も参照)。 )、またはグラフに動的な形状の出力があり、推論が呼び出された後に呼び出し元が出力Tensorの形状を照会する必要がある場合は、出力テンソルから直接データをフェッチします( Tensor.asReadOnlyBuffer()を介して)。

public void runForMultipleInputsOutputs Object []入力、 Map <整数Object >出力)

モデルが複数の入力を受け取るか、複​​数の出力を返す場合、モデル推論を実行します。

警告:入力/出力データタイプとしてBuffer (できれば直接ですが、必須ではありません)を使用すると、APIの効率が向上します。パフォーマンスを向上させるために、 Bufferを使用してプリミティブデータをフィードおよびフェッチすることを検討してください。次の具体的なBufferタイプがサポートされています。

  • ByteBuffer基になるプリミティブTensorタイプと互換性があります。
  • FloatBuffer -floatTensorsと互換性があります。
  • IntBuffer -int32テンソルと互換性があります。
  • LongBuffer -int64テンソルと互換性があります。
ブール型は、 Bufferではなく配列として、またはスカラー入力としてのみサポートされることに注意してください。

注: inputsおよびoutputsの個々の要素のnull値は、呼び出し元がバッファーハンドルの相互運用を許可するDelegateを使用しており、そのようなバッファーが対応する入力または出力Tensorにバインドされている場合にのみ許可されます。

パラメーター
入力入力データの配列。入力は、モデルの入力と同じ順序である必要があります。各入力は、配列または多次元配列、あるいはint、float、long、byteなどのプリミティブタイプのBufferにすることができます。 Bufferは大きな入力データを渡すための推奨される方法ですが、文字列タイプでは(多次元の)配列入力パスを使用する必要があります。 Bufferを使用する場合、モデルの推論が行われるまでその内容は変更されないままである必要があり、呼び出し元はBufferが適切な読み取り位置にあることを確認する必要があります。
出力出力インデックスを出力データの多次元配列またはint、float、long、byteなどのプリミティブタイプのBufferにマッピングするマップ。使用する出力のエントリを保持するだけで済みます。 Bufferを使用する場合、呼び出し元は、バッファが適切な書き込み位置に設定されていることを確認する必要があります。いずれかのバッファハンドルが出力テンソルデータに使用される場合、または出力が動的に整形され、推論が呼び出された後に呼び出し元が出力テンソルから直接データをフェッチして出力Tensor形状をクエリする必要がある場合、マップは空になる可能性があります( Tensor.asReadOnlyBuffer()経由)。

public void runSignature Map < StringObject >入力、 Map < StringObject >出力)

runSignature(Map, Map, String)同じですが、モデルに1つのSignatureDefがあると仮定すると、signatureKeyを渡す必要はありません。モデルに複数のSignatureDefがある場合、例外がスローされます。

警告:これは実験的なAPIであり、変更される可能性があります。

パラメーター
入力
出力

public void runSignature マップ<文字列オブジェクト>入力、マップ<文字列オブジェクト>出力、文字列signatureKey)

signatureKeyを介して提供されるSignatureDefに基づいてモデル推論を実行します。

許可される入力および出力データタイプの詳細についてはrun(Object, Object)を参照してください。

警告:これは実験的なAPIであり、変更される可能性があります。

パラメーター
入力SignatureDefの入力名から入力オブジェクトへのマップ。
出力SignatureDefの出力名から出力データへのマップ。呼び出し元が推論の直後にTensorデータを照会する場合(たとえば、出力形状が動的である場合、または出力バッファーハンドルが使用されている場合)、これは空の場合があります。
署名キーSignatureDefを識別する署名キー。
スロー
IllegalArgumentException inputsがnullまたは空の場合、 outputsまたはsignatureKeyがnullの場合、または推論の実行中にエラーが発生した場合。

public void setCancelled (ブールキャンセル)

詳細: run(Object, Object)の呼び出しの途中で推論を中断します。

この関数が呼び出されると、キャンセルフラグがtrueに設定されます。インタープリターは、Op呼び出しの間にフラグをチェックし、それがtrueの場合、インタープリターは実行を停止します。インタプリタは、 setCancelled(false)によって明示的に「キャンセル」されるまで、キャンセルされた状態のままになります。

警告:これは実験的なAPIであり、変更される可能性があります。

パラメーター
キャンセル最善の方法で推論をキャンセルするのはtrueです。再開するにはfalse
スロー
IllegalStateExceptionインタープリターがキャンセル可能オプションで初期化されていない場合(デフォルトではオフ)。