Interpreter

공개 최종 클래스 인터프리터

TensorFlow Lite로 모델 추론을 구동하는 드라이버 클래스입니다.

참고: 아래의 '실험용' API 기능에 액세스할 필요가 없는 경우 인터프리터를 직접 사용하는 대신 TranslateerApi 및 AnalyzeerFactory를 사용하는 것이 좋습니다.

Interpreter는 모델 추론을 위해 작업이 실행되는 선행 학습된 TensorFlow Lite 모델을 캡슐화합니다.

예를 들어 모델이 하나의 입력만 취하고 하나의 출력만 반환하는 경우 다음과 같습니다.

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);
 }
 

도형 [] 과 모양[1]은 다릅니다. 스칼라 문자열 텐서 출력:

String[] input = {"foo"};  // Input tensor shape is [1].
 ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE);  // Output tensor shape is [].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, outputBuffer);
 }
 byte[] outputBytes = new byte[outputBuffer.remaining()];
 outputBuffer.get(outputBytes);
 // Below, the `charset` can be StandardCharsets.UTF_8.
 String output = new String(outputBytes, charset);
 

입력 및 출력 순서는 입력의 기본 형태와 마찬가지로 Toco를 사용하여 TensorFlow 모델을 TensorFlowLite 모델로 변환할 때 결정됩니다.

입력이 다차원 배열로 제공되면 해당 배열의 형태에 따라 해당 입력 텐서의 크기가 암시적으로 조정됩니다. 입력이 Buffer 유형으로 제공되는 경우 암시적인 크기 조절은 수행되지 않습니다. 호출자는 Buffer 바이트 크기가 해당 텐서의 크기와 일치하거나 먼저 resizeInput(int, int[])를 통해 텐서의 크기를 조절해야 합니다. 텐서 형태 및 유형 정보는 getInputTensor(int)getOutputTensor(int)를 통해 사용할 수 있는 Tensor 클래스를 통해 가져올 수 있습니다.

경고:Interpreter 인스턴스는 스레드로부터 안전하지 않습니다. Interpreterclose()를 호출하여 명시적으로 해제해야 하는 리소스를 소유합니다.

TFLite 라이브러리는 NDK API 19를 기반으로 빌드됩니다. Android API 수준 19 미만에서 작동할 수도 있지만 보장되지는 않습니다.

중첩된 클래스

클래스 Interpreter.Options 런타임 인터프리터 동작을 제어하기 위한 옵션 클래스

공개 생성자

인터프리터(File modelFile)
Interpreter를 초기화합니다.
인터프리터(파일 modelFile, Interpreter.Options 옵션)
Interpreter를 초기화하고 인터프리터 동작을 맞춤설정하기 위한 옵션을 지정합니다.
인터프리터(ByteBuffer byteBuffer)
모델 파일의 ByteBufferInterpreter를 초기화합니다.
Translateer(ByteBuffer byteBuffer, Interpreter.Options 옵션)
모델 파일의 ByteBuffer 및 맞춤 Interpreter.Options 집합을 사용하여 Interpreter를 초기화합니다.

공개 메서드

void
allocateTensors()
필요한 경우 모든 텐서의 할당을 명시적으로 업데이트합니다.
void
close()
InterpreterApi 인스턴스와 연결된 리소스를 해제합니다.
int
getInputIndex(String opName)
입력의 작업 이름에 따라 입력의 색인을 가져옵니다.
Tensor
getInputTensor(int inputIndex)
제공된 입력 색인과 연결된 텐서를 가져옵니다.
int
getInputTensorCount()
입력 텐서 수를 가져옵니다.
Tensor
getInputTensorFromSignature(String inputName, String signatureKey)
제공된 입력 이름 및 서명 메서드 이름과 연결된 텐서를 가져옵니다.
긴 버전
getLastNativeInferenceDurationNanoseconds()
네이티브 추론 타이밍을 반환합니다.
int
getOutputIndex(String opName)
출력의 작업 이름을 고려하여 출력의 색인을 가져옵니다.
Tensor
getOutputTensor(int outputIndex)
제공된 출력 색인과 연결된 텐서를 가져옵니다.
int
getOutputTensorCount()
출력 텐서의 수를 가져옵니다.
Tensor
getOutputTensorFromSignature(String outputName, String signatureKey)
특정 서명 메서드에 제공된 출력 이름과 연결된 텐서를 가져옵니다.
문자열[]
getSignatureInputs(String signatureKey)
signatureKey 메서드의 SignatureDefs 입력 목록을 가져옵니다.
문자열[]
getSignatureKeys()
모델에서 사용할 수 있는 SignatureDef로 내보낸 메서드 이름의 목록을 가져옵니다.
문자열[]
getSignatureOutputs(String signatureKey)
signatureKey 메서드의 SignatureDefs 출력 목록을 가져옵니다.
void
resetVariableTensors()
고급: 모든 변수 텐서를 기본값으로 재설정합니다.
void
resizeInput(int idx, int[] dims, boolean strict)
네이티브 모델의 idx번째 입력의 크기를 지정된 희미값으로 조절합니다.
void
resizeInput(int idx, int[] dims)
네이티브 모델의 idx번째 입력의 크기를 지정된 희미값으로 조절합니다.
void
run(객체 입력, 객체 출력)
모델에서 하나의 입력만 사용하고 하나의 출력만 제공하는 경우 모델 추론을 실행합니다.
void
runForMultipleInputsOutputs(Object[] 입력, Map<IntegerObject> 출력)
모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다.
void
runSignature(Map<StringObject> 입력, Map<StringObject> 출력)
runSignature(Map, Map, String)와 동일하지만 모델에 SignatureDef가 하나 있다고 가정하고 signatureKey를 전달할 필요가 없습니다.
void
runSignature(Map<StringObject> input, Map<StringObject> output, String signatureKey)
signatureKey를 통해 제공되는 SignatureDef를 기반으로 모델 추론을 실행합니다.
void
setCancelled(불리언 취소됨)
고급: run(Object, Object) 호출 중에 추론을 중단합니다.

상속된 메서드

공개 생성자

public 인터프리터 (파일 modelFile)

Interpreter를 초기화합니다.

매개변수
modelFile 선행 학습된 TF Lite 모델의 파일입니다.
생성 값
IllegalArgumentException modelFile가 유효한 TensorFlow Lite 모델을 인코딩하지 않는 경우

public 인터프리터 (File modelFile, Interpreter.Options 옵션)

Interpreter를 초기화하고 인터프리터 동작을 맞춤설정하기 위한 옵션을 지정합니다.

매개변수
modelFile 선행 학습된 TF Lite 모델의 파일
옵션 통역 동작을 맞춤설정하기 위한 옵션 모음
생성 값
IllegalArgumentException modelFile가 유효한 TensorFlow Lite 모델을 인코딩하지 않는 경우

public 인터프리터 (ByteBuffer byteBuffer)

모델 파일의 ByteBufferInterpreter를 초기화합니다.

Interpreter를 생성한 후에는 ByteBuffer를 수정하면 안 됩니다. ByteBuffer는 모델 파일을 메모리 매핑하는 MappedByteBuffer 또는 모델의 바이트 콘텐츠를 포함하는 nativeOrder()의 직접적인 ByteBuffer일 수 있습니다.

매개변수
byteBuffer
생성 값
IllegalArgumentException byteBufferMappedByteBuffer이 아니거나 nativeOrder의 직접 ByteBuffer가 아닌 경우입니다.

공개 인터프리터 (ByteBuffer byteBuffer, Interpreter.Options 옵션)

모델 파일의 ByteBuffer 및 맞춤 Interpreter.Options 집합을 사용하여 Interpreter를 초기화합니다.

Interpreter를 생성한 후에는 ByteBuffer를 수정해서는 안 됩니다. ByteBuffer는 모델 파일을 메모리 매핑하는 MappedByteBuffer이거나 모델의 바이트 콘텐츠를 포함하는 nativeOrder()의 직접적인 ByteBuffer일 수 있습니다.

매개변수
byteBuffer
옵션
생성 값
IllegalArgumentException byteBufferMappedByteBuffer이 아니거나 nativeOrder의 직접 ByteBuffer가 아닌 경우입니다.

공개 메서드

public void allocateTensors ()

필요한 경우 모든 텐서의 할당을 명시적으로 업데이트합니다.

지정된 입력 텐서 형태를 사용하여 종속 텐서의 형태 및 메모리 할당을 전파합니다.

참고: 이 호출은 *전적으로 선택사항*입니다. 입력 텐서의 크기가 조절된 경우 실행 중에 텐서 할당이 자동으로 발생합니다. 이 호출은 그래프를 실행하기 전에 모든 출력 텐서의 형태를 결정하는 데 가장 유용합니다(예:

 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)

입력의 작업 이름에 따라 입력의 색인을 가져옵니다.

매개변수
opName

public Tensor getInputTensor (int inputIndex)

제공된 입력 색인과 연결된 텐서를 가져옵니다.

매개변수
inputIndex

public int getInputTensorCount ()

입력 텐서 수를 가져옵니다.

public Tensor getInputTensorFromSignature (String inputName, String signatureKey)

제공된 입력 이름 및 서명 메서드 이름과 연결된 텐서를 가져옵니다.

경고: 실험용 API이며 변경될 수 있습니다.

매개변수
inputName 서명에 이름을 입력합니다.
signatureKey SignatureDef를 식별하는 서명 키로, 모델에 서명이 1개 있는 경우 null일 수 있습니다.
생성 값
IllegalArgumentException inputName 또는 signatureKey가 null이거나 비어 있거나 제공된 이름이 잘못된 경우입니다.

public 긴 버전 getLastNativeInferenceDurationNanoseconds ()

네이티브 추론 타이밍을 반환합니다.

public int getOutputIndex (String opName)

출력의 작업 이름을 고려하여 출력의 색인을 가져옵니다.

매개변수
opName

public Tensor getOutputTensor (int outputIndex)

제공된 출력 색인과 연결된 텐서를 가져옵니다.

참고: 출력 텐서 세부정보 (예: 셰이프)는 추론이 실행될 때까지 완전히 채워지지 않을 수도 있습니다. 추론을 실행하기 *전에* 세부정보를 업데이트해야 하는 경우 (예: 입력 텐서 크기를 조절하여 출력 텐서 형태가 무효화될 수 있음) allocateTensors()를 사용하여 할당 및 형태 전파를 명시적으로 트리거합니다. 입력 *값*에 종속되는 출력 모양이 있는 그래프의 경우 추론을 실행할 때까지 출력 모양이 완전히 결정되지 않을 수 있습니다.

매개변수
outputIndex

public int getOutputTensorCount ()

출력 텐서의 수를 가져옵니다.

public Tensor getOutputTensorFromSignature (String outputName, String signatureKey)

특정 서명 메서드에 제공된 출력 이름과 연결된 텐서를 가져옵니다.

참고: 출력 텐서 세부정보 (예: 셰이프)는 추론이 실행될 때까지 완전히 채워지지 않을 수도 있습니다. 추론을 실행하기 *전에* 세부정보를 업데이트해야 하는 경우 (예: 입력 텐서 크기를 조절하여 출력 텐서 형태가 무효화될 수 있음) allocateTensors()를 사용하여 할당 및 형태 전파를 명시적으로 트리거합니다. 입력 *값*에 종속되는 출력 모양이 있는 그래프의 경우 추론을 실행할 때까지 출력 모양이 완전히 결정되지 않을 수 있습니다.

경고: 실험용 API이며 변경될 수 있습니다.

매개변수
outputName 서명의 출력 이름입니다.
signatureKey SignatureDef를 식별하는 서명 키로, 모델에 서명이 1개 있는 경우 null일 수 있습니다.
생성 값
IllegalArgumentException outputName 또는 signatureKey가 null이거나 비어 있거나 제공된 이름이 잘못된 경우입니다.

public String[] getSignatureInputs (String signatureKey)

signatureKey 메서드의 SignatureDefs 입력 목록을 가져옵니다.

경고: 실험용 API이며 변경될 수 있습니다.

매개변수
signatureKey

공개 String[] getSignatureKeys ()

모델에서 사용할 수 있는 SignatureDef로 내보낸 메서드 이름의 목록을 가져옵니다.

경고: 실험용 API이며 변경될 수 있습니다.

public String[] getSignatureOutputs (String signatureKey)

signatureKey 메서드의 SignatureDefs 출력 목록을 가져옵니다.

경고: 실험용 API이며 변경될 수 있습니다.

매개변수
signatureKey

public void resetVariableTensors ()

고급: 모든 변수 텐서를 기본값으로 재설정합니다.

변수 텐서에 연결된 버퍼가 없는 경우 0으로 재설정됩니다.

경고: 실험용 API이며 변경될 수 있습니다.

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

네이티브 모델의 idx번째 입력의 크기를 지정된 희미값으로 조절합니다.

`strict` 가 True인 경우 알 수 없는 측정기준만 크기를 조절할 수 있습니다. 알 수 없는 차원은 `Tensor.shapeSignature()`에서 반환된 배열에 `-1`로 표시됩니다.

매개변수
idx
dims
strict

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

네이티브 모델의 idx번째 입력의 크기를 지정된 희미값으로 조절합니다.

매개변수
idx
dims

public void run (객체 입력, 객체 출력)

모델에서 하나의 입력만 사용하고 하나의 출력만 제공하는 경우 모델 추론을 실행합니다.

경고: Buffer (권장적이지만 필수는 아님)를 입력/출력 데이터 유형으로 사용하는 경우 API가 더 효율적입니다. 성능 향상을 위해 Buffer을(를) 사용하여 원시 데이터를 제공하고 가져오는 것을 고려해 보세요. 다음과 같은 구체적인 Buffer 유형이 지원됩니다.

  • ByteBuffer - 모든 기본 원시 텐서 유형과 호환됩니다.
  • FloatBuffer - float 텐서와 호환됩니다.
  • IntBuffer - int32 텐서와 호환됩니다.
  • LongBuffer - int64 텐서와 호환됩니다.
불리언 유형은 배열로만 지원되고 Buffer 또는 스칼라 입력으로는 지원되지 않습니다.

매개변수
입력 배열 또는 다차원 배열 또는 기본형(int, float, long, byte)의 Buffer입니다. 원시 유형의 경우 대규모 입력 데이터를 전달하는 데 선호되는 방법은 Buffer이고, 문자열 유형에는 다차원 배열 입력 경로를 사용해야 합니다. Buffer가 사용되는 경우 모델 추론이 완료될 때까지 콘텐츠가 변경되지 않아야 하며 호출자는 Buffer가 적절한 읽기 위치에 있는지 확인해야 합니다. null 값은 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate를 사용하고 이러한 버퍼가 입력 Tensor에 바인딩된 경우에만 허용됩니다.
출력 출력 데이터의 다차원 배열 또는 기본형(int, float, long, byte)의 Buffer입니다. Buffer가 사용된 경우 호출자는 적절한 쓰기 위치로 설정되어 있는지 확인해야 합니다. null 값이 허용되며, 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate를 사용 중이고 이러한 버퍼가 출력 Tensor에 바인딩된 경우(Interpreter.Options#setAllowBufferHandleOutput(boolean) 참고) 또는 그래프에 동적으로 형태가 지정된 경우 호출자가 추론을 호출한 후 Tensor.asReadOnlyBuffer()에서 직접 데이터를 가져와 출력 Tensor 형태를 쿼리해야 하는 경우 유용합니다.

public void runForMultipleInputsOutputs (Object[] input, Map<IntegerObject> 출력)

모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다.

경고: Buffer (권장적이지만 필수는 아님)를 입력/출력 데이터 유형으로 사용하는 경우 API가 더 효율적입니다. 성능 향상을 위해 Buffer을(를) 사용하여 원시 데이터를 제공하고 가져오는 것을 고려해 보세요. 다음과 같은 구체적인 Buffer 유형이 지원됩니다.

  • ByteBuffer - 모든 기본 원시 텐서 유형과 호환됩니다.
  • FloatBuffer - float 텐서와 호환됩니다.
  • IntBuffer - int32 텐서와 호환됩니다.
  • LongBuffer - int64 텐서와 호환됩니다.
불리언 유형은 배열로만 지원되고 Buffer 또는 스칼라 입력으로는 지원되지 않습니다.

참고: inputsoutputs의 개별 요소에 대한 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)와 동일하지만 모델에 SignatureDef가 하나 있다고 가정하고 signatureKey를 전달할 필요가 없습니다. 모델에 SignatureDef가 2개 이상 있으면 예외가 발생합니다.

경고: 실험용 API이며 변경될 수 있습니다.

매개변수
입력
출력

public void runSignature (Map<StringObject> 입력, Map<StringObject> output, String signatureKey)

signatureKey를 통해 제공되는 SignatureDef를 기반으로 모델 추론을 실행합니다.

허용되는 입력 및 출력 데이터 유형에 관한 자세한 내용은 run(Object, Object)를 참조하세요.

경고: 실험용 API이며 변경될 수 있습니다.

매개변수
입력 SignatureDef의 입력 이름에서 입력 객체로의 매핑입니다.
출력 SignatureDef의 출력 이름에서 출력 데이터로의 매핑입니다. 호출자가 추론 직후 Tensor 데이터를 쿼리하려는 경우 (예: 출력 모양이 동적이거나 출력 버퍼 핸들이 사용되는 경우) 비어 있을 수 있습니다.
signatureKey SignatureDef를 식별하는 서명 키입니다.
생성 값
IllegalArgumentException inputs이 null이거나 비어 있는 경우 또는 outputs 또는 signatureKey가 null인 경우 또는 추론을 실행할 때 오류가 발생하는 경우입니다.

public void setCancelled (boolean cancelled)

고급: run(Object, Object) 호출 중에 추론을 중단합니다.

이 함수가 호출되면 취소 플래그가 true로 설정됩니다. 인터프리터는 작업 호출 사이의 플래그를 확인하고 true인 경우 인터프리터가 실행을 중지합니다. 인터프리터는 setCancelled(false)에 의해 명시적으로 '취소 취소'될 때까지 취소된 상태로 유지됩니다.

경고: 실험용 API이며 변경될 수 있습니다.

매개변수
취소 최선의 방식으로 추론을 취소하려면 true, 재개하려면 false.
생성 값
IllegalStateException 인터프리터가 취소 가능한 옵션으로 초기화되지 않은 경우(기본적으로 꺼져 있음)