Compatibilidade do TensorFlow Lite e do operador TensorFlow

Os operadores de machine learning (ML) que você usa no seu modelo podem impactar o processo de conversão de um modelo do TensorFlow para o formato TensorFlow Lite. O conversor TensorFlow Lite oferece suporte a um número limitado de operações do TensorFlow usadas em modelos de inferência comuns, o que significa que nem todo modelo é diretamente conversível. A ferramenta de conversão permite incluir operadores adicionais, mas converter um modelo dessa forma também exige que você modifique o ambiente de tempo de execução do TensorFlow Lite usado para executar seu modelo, o que pode limitar sua capacidade de usar opções de implantação de tempo de execução padrão, como o Google Play Services .

O TensorFlow Lite Converter foi projetado para analisar a estrutura do modelo e aplicar otimizações para torná-lo compatível com os operadores diretamente suportados. Por exemplo, dependendo dos operadores de ML no seu modelo, o conversor pode eliminar ou fundir esses operadores para mapeá-los aos seus equivalentes do TensorFlow Lite.

Mesmo para operações suportadas, às vezes são esperados padrões de uso específicos, por motivos de desempenho. A melhor maneira de entender como construir um modelo do TensorFlow que possa ser usado com o TensorFlow Lite é considerar cuidadosamente como as operações são convertidas e otimizadas, juntamente com as limitações impostas por esse processo.

Operadores suportados

Os operadores integrados do TensorFlow Lite são um subconjunto dos operadores que fazem parte da biblioteca principal do TensorFlow. Seu modelo do TensorFlow também pode incluir operadores personalizados na forma de operadores compostos ou novos operadores definidos por você. O diagrama abaixo mostra as relações entre esses operadores.

Operadores TensorFlow

Desta gama de operadores de modelo de ML, existem 3 tipos de modelos suportados pelo processo de conversão:

  1. Modelos com apenas o operador integrado do TensorFlow Lite. ( Recomendado )
  2. Modelos com os operadores integrados e operadores principais selecionados do TensorFlow.
  3. Modelos com operadores integrados, operadores principais do TensorFlow e/ou operadores personalizados.

Se o seu modelo contiver apenas operações com suporte nativo do TensorFlow Lite, você não precisará de sinalizadores adicionais para convertê-lo. Este é o caminho recomendado porque esse tipo de modelo será convertido sem problemas e é mais simples de otimizar e executar usando o tempo de execução padrão do TensorFlow Lite. Você também tem mais opções de implantação para o seu modelo, como Google Play Services . Você pode começar com o guia do conversor TensorFlow Lite . Consulte a página TensorFlow Lite Ops para obter uma lista de operadores integrados.

Se precisar incluir operações selecionadas do TensorFlow da biblioteca principal, você deverá especificar isso na conversão e garantir que seu tempo de execução inclua essas operações. Consulte o tópico Selecionar operadores do TensorFlow para obter etapas detalhadas.

Sempre que possível, evite a última opção de incluir operadores personalizados no seu modelo convertido. Operadores personalizados são operadores criados pela combinação de vários operadores principais primitivos do TensorFlow ou pela definição de um operador completamente novo. Quando os operadores personalizados são convertidos, eles podem aumentar o tamanho do modelo geral incorrendo em dependências fora da biblioteca integrada do TensorFlow Lite. As operações personalizadas, se não forem criadas especificamente para implantação móvel ou de dispositivos, podem resultar em pior desempenho quando implantadas em dispositivos com recursos limitados em comparação com um ambiente de servidor. Por fim, assim como incluir operadores principais selecionados do TensorFlow, os operadores personalizados exigem que você modifique o ambiente de tempo de execução do modelo , o que limita o aproveitamento de serviços de tempo de execução padrão, como os serviços do Google Play .

Tipos suportados

A maioria das operações do TensorFlow Lite tem como alvo a inferência de ponto flutuante ( float32 ) e quantizada ( uint8 , int8 ), mas muitas operações ainda não o fazem para outros tipos, como tf.float16 e strings.

Além de usar versões diferentes das operações, a outra diferença entre os modelos de ponto flutuante e os modelos quantizados é a forma como são convertidos. A conversão quantizada requer informações de faixa dinâmica para tensores. Isso requer "quantização falsa" durante o treinamento do modelo, obtendo informações de alcance por meio de um conjunto de dados de calibração ou fazendo uma estimativa de alcance "on-the-fly". Veja quantização para mais detalhes.

Conversões simples, dobramento e fusão constantes

Várias operações do TensorFlow podem ser processadas pelo TensorFlow Lite, mesmo que não tenham equivalente direto. Este é o caso de operações que podem ser simplesmente removidas do gráfico ( tf.identity ), substituídas por tensores ( tf.placeholder ) ou fundidas em operações mais complexas ( tf.nn.bias_add ). Mesmo algumas operações suportadas podem, por vezes, ser removidas através de um destes processos.

Aqui está uma lista não exaustiva de operações do TensorFlow que geralmente são removidas do gráfico:

Operações Experimentais

As seguintes operações do TensorFlow Lite estão presentes, mas não estão prontas para modelos personalizados:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF