InterpreterApi

パブリックインターフェイスInterpreterApi
既知の間接サブクラス

実験的な方法を除く、TensorFlowLiteモデルインタープリターへのインターフェイス。

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

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

try (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

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

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

警告: InterpreterApiインスタンスはスレッドセーフではありません

警告: InterpreterApiインスタンスは、 close()を呼び出すことによって明示的に解放する必要があるリソースを所有しています。

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

ネストされたクラス

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

パブリックメソッド

抽象ボイド
locateTensors ()
必要に応じて、すべてのテンサーの割り当てを明示的に更新します。
抽象ボイド
閉じる()
InterpreterApiインスタンスに関連付けられているリソースを解放します。
静的InterpreterApi
createFile modelFile、 InterpreterApi.Optionsオプション)
指定されたモデルとオプションを使用して、 InterpreterApiインスタンスを構築します。
静的InterpreterApi
createByteBuffer byteBuffer、 InterpreterApi.Optionsオプション)
指定されたモデルとオプションを使用して、 InterpreterApiインスタンスを構築します。
抽象int
getInputIndexString opName)
入力のop名を指定して入力のインデックスを取得します。
抽象テンソル
getInputTensor (int inputIndex)
指定された入力インデックスに関連付けられたテンソルを取得します。
抽象int
getInputTensorCount ()
入力テンサーの数を取得します。
抽象ロング
getLastNativeInferenceDurationNanoseconds ()
ネイティブの推論タイミングを返します。
抽象int
getOutputIndexString opName)
出力のop名を指定して出力のインデックスを取得します。
抽象テンソル
getOutputTensor (int outputIndex)
指定された出力インデックスに関連付けられたテンソルを取得します。
抽象int
getOutputTensorCount ()
出力テンソルの数を取得します。
抽象ボイド
resizeInput (int idx、int [] dims、boolean strict)
ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。
抽象ボイド
resizeInput (int idx、int [] dims)
ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。
抽象ボイド
runオブジェクト入力、オブジェクト出力)
モデルが1つの入力のみを受け取り、1つの出力のみを提供する場合、モデル推論を実行します。
抽象ボイド
runForMultipleInputsOutputsObject []入力、 Map <整数Object >出力)
モデルが複数の入力を受け取るか、複​​数の出力を返す場合、モデル推論を実行します。

継承されたメソッド

パブリックメソッド

public abstract 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...
 
)。

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

スロー
IllegalStateExceptionグラフのテンサーを正常に割り当てることができなかった場合。

public abstract void close ()

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

public static InterpreterApi create ファイルmodelFile、 InterpreterApi.Optionsオプション)

指定されたモデルとオプションを使用して、 InterpreterApiインスタンスを構築します。モデルはファイルからロードされます。

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

public static InterpreterApi create ByteBuffer byteBuffer、 InterpreterApi.Optionsオプション)

指定されたモデルとオプションを使用して、 InterpreterApiインスタンスを構築します。モデルはByteBufferから読み取られます。

パラメーター
byteBufferバイナリシリアル化された形式の、事前にトレーニングされたTFLiteモデル。 InterpreterApiインスタンスの構築後に、ByteBufferを変更しないでください。 ByteBufferは、モデルファイルをメモリマップするMappedByteBuffer 、またはモデルのバイトコンテンツを含むnativeOrder()の直接ByteBufferのいずれかです。
オプションインタプリタの動作をカスタマイズするための一連のオプション。
スロー
IllegalArgumentException byteBufferMappedByteBufferでも、nativeOrderの直接ByteBufferでもない場合。

public abstract int getInputIndex String opName)

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

パラメーター
opName
スロー
IllegalArgumentException opNameが、インタープリターの初期化に使用されるモデルのどの入力とも一致しない場合。

public abstract Tensor getInputTensor (int inputIndex)

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

パラメーター
inputIndex
スロー
IllegalArgumentException inputIndexが負の場合、またはモデル入力の数より小さくない場合。

public abstract int getInputTensorCount ()

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

public abstract Long getLastNativeInferenceDurationNanoseconds ()

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

スロー
IllegalArgumentExceptionモデルがインタプリタによって初期化されていない場合。

public abstract int getOutputIndex String opName)

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

パラメーター
opName
スロー
IllegalArgumentException opNameが、インタープリターの初期化に使用されるモデルのどの出力とも一致しない場合。

public abstract Tensor getOutputTensor (int outputIndex)

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

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

パラメーター
outputIndex
スロー
IllegalArgumentException outputIndexが負の場合、またはモデル出力の数より小さくない場合。

public abstract int getOutputTensorCount ()

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

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

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

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

パラメーター
idx
薄暗い
厳しい
スロー
IllegalArgumentException idxが負の場合、またはモデル入力の数より小さくない場合。または、idx番目の入力のサイズ変更時にエラーが発生した場合。さらに、 `strict`がTrueの場合、固定寸法のテンソルのサイズを変更しようとするとエラーが発生します。

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

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

パラメーター
idx
薄暗い
スロー
IllegalArgumentException idxが負の場合、またはモデル入力の数より小さくない場合。または、idx番目の入力のサイズ変更時にエラーが発生した場合。

public abstract 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()を介して)。
スロー
IllegalArgumentException inputがnullまたは空の場合、または推論の実行中にエラーが発生した場合。
IllegalArgumentException (実験的、変更される可能性がありsetCancelled(true)によって推論が中断された場合。

public abstract 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()経由)。
スロー
IllegalArgumentException inputsがnullまたは空の場合、 outputsがnullの場合、または推論の実行中にエラーが発生した場合。