Compatibilidade do operador TensorFlow Lite e TensorFlow

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Os operadores de aprendizado de máquina (ML) que você usa em seu modelo podem afetar o processo de conversão de um modelo do TensorFlow para o formato do TensorFlow Lite. O conversor TensorFlow Lite oferece suporte a um número limitado de operações TensorFlow usadas em modelos de inferência comuns, o que significa que nem todos os modelos são diretamente conversíveis. A ferramenta de conversão permite incluir operadores adicionais, mas converter um modelo dessa maneira 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 em seu modelo, o conversor pode elidir ou fundir esses operadores para mapeá-los para suas contrapartes do TensorFlow Lite.

Mesmo para operações com suporte, às vezes são esperados padrões de uso específicos, por motivos de desempenho. A melhor maneira de entender como criar um modelo do TensorFlow que pode 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 do TensorFlow

A partir 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. Esse é 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 seu modelo, como serviços do Google Play . 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 você precisar incluir operações selecionadas do TensorFlow da biblioteca principal, 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 em seu modelo convertido. Os operadores personalizados são operadores criados combinando vários operadores principais primitivos do TensorFlow ou definindo um completamente novo. Quando os operadores personalizados são convertidos, eles podem aumentar o tamanho do modelo geral incorrendo em dependências fora da biblioteca interna do TensorFlow Lite. As operações personalizadas, se não forem criadas especificamente para implantação de dispositivos móveis ou dispositivos, podem resultar em um desempenho pior quando implantadas em dispositivos com recursos limitados em comparação com um ambiente de servidor. Por fim, assim como a inclusão de alguns operadores principais do TensorFlow, os operadores personalizados exigem que você modifique o ambiente de tempo de execução do modelo, o que limita você a aproveitar os serviços de tempo de execução padrão, como os serviços do Google Play .

Tipos compatíveis

A maioria das operações do TensorFlow Lite tem como alvo tanto a inferência de ponto flutuante ( float32 ) quanto a 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 quantizados é a forma como eles 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 diretas, dobra 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 às vezes ser removidas por meio de um desses 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