Path: blob/master/site/pt-br/lite/inference_with_metadata/codegen.md
25118 views
Gere interfaces de modelos usando metadados
Utilizando os metadados do TensorFlow Lite, os desenvolvedores podem gerar código encapsulador para permitir a integração com o Android. Para a maioria dos desenvolvedores, a interface gráfica do Android Studio ML Model Binding (vinculação de modelos de ML do Android Studio) é a mais fácil de usar. Se você deseja mais personalização ou estiver usando uma ferramenta de linha de comando, o TensorFlow Lite Codegen também está disponível.
Use o Android Studio ML Model Binding {:#mlbinding}
Para modelos do TensorFlow Lite aprimorados com metadados, os desenvolvedores podem usar o Android Studio ML Model Binding para definir automaticamente as configurações do projeto e gerar classes encapsuladoras com base nos metadados do modelo. O código encapsulador remove a necessidade de interagir diretamente com o ByteBuffer
. Em vez disso, os desenvolvedores podem interagir com objetos tipados, como Bitmap
e Rect
.
Observação: é necessário ter o Android Studio 4.1 ou superiores.
Importe um modelo do TensorFlow Lite no Android Studio
Clique com o botão direito no módulo onde você quer usar o modelo do TF Lite ou clique em
File
>New
>Other
>TensorFlow Lite Model
(Arquivo > Novo > Outro > Modelo do TensorFlow Lite).Selecione o local do seu arquivo do TF Lite. Observe que a ferramenta configura a dependência do modelo com o ML Model Binding, e todas as dependências são incluídas automaticamente no arquivo
build.gradle
do seu módulo para Android.Opcional: marque a segunda caixa de seleção para importar a GPU do TensorFlow se você quiser usar a aceleração de GPU.
Clique em
Finish
(Finalizar).A tela abaixo será exibida após a importação ser concluída com êxito. Para começar a usar o modelo, selecione Kotlin ou Java, e copie e cole o código abaixo da seção
Sample Code
(Código de exemplo). Para voltar a essa tela, basta clicar duas vezes no modelo do TF Lite sob o diretórioml
no Android Studio.
Como acelerar a inferência do modelo {:#acceleration}
O ML Model Binding conta com uma maneira de os desenvolvedores acelerarem o código por meio do uso de delegados e do número de threads.
Observação: o interpretador do TensorFlow Lite precisa ser criado no mesmo thread em que é executado. Caso contrário, pode ocorrer o seguinte erro: TfLiteGpuDelegate Invoke: GpuDelegate must run on the same thread where it was initialized (GpuDelegate precisa ser executado no mesmo thread em que foi inicializado).
Etapa 1 – Verifique se o arquivo build.gradle
do modelo contém a seguinte dependência:
Etapa 2 – Detecte se a GPU sendo executada no dispositivo é compatível com o delegado GPU do TensorFlow. Caso não seja, execute o modelo usando diversos threads de CPU:
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate
import org.tensorflow.lite.support.model.Model import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Model.Options options; CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate options = Model.Options.Builder().setDevice(Model.Device.GPU).build(); } else { // if the GPU is not supported, run on 4 threads options = Model.Options.Builder().setNumThreads(4).build(); } MyModel myModel = new MyModel.newInstance(context, options); // Run inference per sample code
Gere interfaces de modelos com o gerador de código do TensorFlow Lite {:#codegen}
Observação: o gerador de código do encapsulador para o TensorFlow Lite só tem suporte ao Android no momento.
Para o modelo do TensorFlow Lite aprimorado com metadados, os desenvolvedores podem usar o gerador de código do encapsulador Android para o TensorFlow Lite para criar o código do encapsulador específico para a plataforma. O código do encapsulador remove a necessidade de interagir diretamente com o ByteBuffer
. Em vez disso, os desenvolvedores podem interagir com o modelo do TensorFlow Lite usando objetos tipados, como Bitmap
e Rect
.
O nível de utilidade do gerador de código depende do nível de completude da entrada de metadados do modelo do TensorFlow Lite. Confira a seção <Codegen usage>
abaixo dos campos relevantes em metadata_schema.fbs para ver como a ferramenta codegen processa cada campo.
Gere código encapsulador
Você precisará instalar a seguinte ferramenta em seu terminal:
Após a conclusão, o gerador de código poderá ser utilizado por meio da seguinte sintaxe:
O código resultante ficará localizado no diretório de destino. Se você estiver usando o Google Colab ou outro ambiente remoto, pode ser mais fácil colocar o resultado em um arquivo ZIP e baixá-lo para seu projeto do Android Studio:
Uso do código gerado
Etapa 1 – Importe o código gerado
Se necessário, descompacte o código gerado em uma estrutura de diretórios. Pressupõe-se que a raiz do código gerado seja SRC_ROOT
.
Abra o projeto do Android Studio no qual deseja usar o modelo do TensorFlow Lite e importe o módulo gerado em: File -> New -> Import Module (Arquivo -> Novo -> Importar módulo) e selecione SRC_ROOT
Usando o exemplo acima, o diretório e o módulo importado seriam chamados de classify_wrapper
.
Etapa 2 – Atualize o arquivo build.gradle
do aplicativo
No módulo do aplicativo que consumirá o módulo da biblioteca gerado:
Abaixo da seção "android", adicione o seguinte:
Observação: a partir da versão 4.1 do plug-in do Gradle para Android, o arquivo .tflite será adicionado à lista noCompress (não compacte) por padrão, e a opção aaptOptions acima não é mais necessária.
Abaixo da seção "dependencies" (dependências), adicione o seguinte:
Etapa 3 – Use o modelo
Como acelerar a inferência do modelo
O código gerado proporciona ao desenvolvedores uma forma de acelerar o código por meio do uso de delegados e do número de threads, que podem ser definidos ao inicializar o objeto do modelo, que aceita três parâmetros:
Context
: contexto de Atividade ou Serviço do Android.(Opcional)
Device
: delegado de aceleração do TF Lite, como GPUDelegate ou NNAPIDelegate, por exemplo.(Opcional)
numThreads
: número de threads usados para executar o modelo. O padrão é 1.
Por exemplo: para usar um delegado NNAPI e até três threads, você pode inicializar o modelo da seguinte forma:
Solução de problemas
Se for exibido o erro "java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed" (Este arquivo não pode ser aberto como descritor de arquivo; provavelmente está compactado), insira as linhas abaixo sob a seção "android" do módulo do aplicativo que usará o módulo da biblioteca:
Observação: a partir da versão 4.1 do plug-in do Gradle para Android, o arquivo .tflite será adicionado à lista noCompress (não compacte) por padrão, e a opção aaptOptions acima não é mais necessária.