Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

Importar modelos baseados no TensorFlow GraphDef para o TensorFlow.js

Modelos baseados no TensorFlow GraphDef (normalmente criados por meio da API Python) podem ser salvos em um dos seguintes formatos:

  1. TensorFlow SavedModel
  2. Modelo Congelado
  3. Módulo Tensorflow Hub

Todos os formatos acima pode ser convertido pelo conversor TensorFlow.js para um formato que pode ser carregado directamente em TensorFlow.js para inferência.

(Observação: TensorFlow suspendeu o formato do pacote de sessão, migre seus modelos para o formato SavedModel.)

Requisitos

O procedimento de conversão requer um ambiente Python; você pode querer manter um isolado um usando pipenv ou virtualenv . Para instalar o conversor, execute o seguinte comando:

 pip install tensorflowjs

Importar um modelo do TensorFlow para o TensorFlow.js é um processo de duas etapas. Primeiro, converta um modelo existente para o formato da web TensorFlow.js e, em seguida, carregue-o no TensorFlow.js.

Etapa 1. Converter um modelo TensorFlow existente para o formato da web TensorFlow.js.

Execute o script conversor fornecido pelo pacote pip:

Uso: Exemplo de SavedModel:

tensorflowjs_converter \
    --input_format=tf_saved_model \
    --output_node_names='MobilenetV1/Predictions/Reshape_1' \
    --saved_model_tags=serve \
    /mobilenet/saved_model \
    /mobilenet/web_model

Exemplo de modelo congelado:

tensorflowjs_converter \
    --input_format=tf_frozen_model \
    --output_node_names='MobilenetV1/Predictions/Reshape_1' \
    /mobilenet/frozen_model.pb \
    /mobilenet/web_model

Exemplo de módulo do Tensorflow Hub:

tensorflowjs_converter \
    --input_format=tf_hub \
    'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1' \
    /mobilenet/web_model
Argumentos Posicionais Descrição
input_path Caminho completo do diretório de modelo salvo, diretório de pacote de sessão, arquivo de modelo congelado ou identificador ou caminho do módulo TensorFlow Hub.
output_path Caminho para todos os artefatos de saída.
Opções Descrição
--input_format O formato do modelo de entrada, use tf_saved_model para SavedModel, tf_frozen_model para modelo congelado, tf_session_bundle para pacote de sessão, tf_hub para módulo TensorFlow Hub e keras para Keras HDF5.
--output_node_names Os nomes dos nós de saída, separados por vírgulas.
--saved_model_tags Aplicável somente para conversão de SavedModel, Tags do MetaGraphDef para carregar, em formato separado por vírgula. Padrões para serve .
--signature_name Aplicável apenas à conversão do módulo TensorFlow Hub, assinatura para carregar. O padrão é default . veja https://www.tensorflow.org/hub/common_signatures/

Use o seguinte comando para obter uma mensagem de ajuda detalhada:

tensorflowjs_converter --help

Arquivos gerados pelo conversor

O script de conversão acima produz dois tipos de arquivos:

  • model.json (o gráfico de fluxo de dados e manifesto peso)
  • group1-shard\*of\* (coleção de arquivos peso binários)

Por exemplo, aqui está o resultado da conversão do MobileNet v2:

  output_directory/model.json
  output_directory/group1-shard1of5
  ...
  output_directory/group1-shard5of5

Etapa 2: Carregando e executando no navegador

  1. Instale o pacote npm tfjs-converter

yarn add @tensorflow/tfjs ou npm install @tensorflow/tfjs

  1. Instanciar a classe FrozenModel e inferência executado.
import * as tf from '@tensorflow/tfjs';
import {loadGraphModel} from '@tensorflow/tfjs-converter';

const MODEL_URL = 'model_directory/model.json';

const model = await loadGraphModel(MODEL_URL);
const cat = document.getElementById('cat');
model.execute(tf.browser.fromPixels(cat));

Confira nossa MobileNet demonstração .

O loadGraphModel API aceita um adicional LoadOptions parâmetro, que pode ser usado para enviar credenciais ou cabeçalhos personalizados, juntamente com o pedido. Consulte a documentação loadGraphModel () para mais detalhes.

Operações com suporte

Atualmente, o TensorFlow.js é compatível com um conjunto limitado de operações do TensorFlow. Se o seu modelo usa um op sem suporte, o tensorflowjs_converter script falhará e imprimir uma lista dos ops não suportados no seu modelo. Por favor, apresentar um problema para cada op para nos informar que ops você precisar de suporte para.

Carregando os pesos apenas

Se você preferir carregar apenas os pesos, pode usar o seguinte trecho de código.

import * as tf from '@tensorflow/tfjs';

const weightManifestUrl = "https://example.org/model/weights_manifest.json";

const manifest = await fetch(weightManifestUrl);
this.weightManifest = await manifest.json();
const weightMap = await tf.io.loadWeights(
        this.weightManifest, "https://example.org/model");