Compatibilidade do operador TensorFlow Lite e TensorFlow

Os operadores de aprendizado de máquina (ML) que você usa em seu modelo podem afetar o processo de conversão de um modelo 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 todos os modelos podem ser convertidos diretamente. A ferramenta conversora permite incluir operadores adicionais, mas a conversão de 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 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 suportados diretamente. Por exemplo, dependendo dos operadores de ML em seu modelo, o conversor pode omitir 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 construir 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 dessa gama de operadores de modelos 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. Modele com os operadores integrados e selecione os principais operadores do TensorFlow.
  3. Modelos com operadores integrados, operadores principais do TensorFlow e/ou operadores personalizados.

Se o seu modelo contém apenas operações com suporte nativo do TensorFlow Lite, você não precisa de nenhum sinalizador adicional 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 na 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 as 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 pela combinação de vários operadores principais primitivos do TensorFlow ou pela definição de 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 integrada 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 pior desempenho quando implantadas em dispositivos com recursos limitados em comparação com um ambiente de servidor. Por fim, assim como a inclusão de operadores principais selecionados do TensorFlow, os operadores personalizados exigem que você modifique o ambiente de tempo de execução do modelo , o que o impede de aproveitar os 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 quantizado é a forma como eles são convertidos. A conversão quantizada requer informações de intervalo dinâmico 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, dobramento e fusão constantes

Várias operações do TensorFlow podem ser processadas pelo TensorFlow Lite, mesmo que não tenham um 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 com suporte 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