ONNX.js: modelos universais de aprendizagem profunda no navegador

Uma Introdução ao Formato de Aprendizagem Detalhada Universal Open Standard e Usando-o no Navegador (ONNX / ONNX.js)

Will badr Blocked Unblock Seguir Seguindo 8 de janeiro Foto de Franck V. no Unsplash

A redefinição de modelos de aprendizagem profunda no navegador do cliente não é algo novo. No início de 2018, o Google lançou o TensorFlow.js. É uma biblioteca de código aberto que é usada para definir, treinar e executar modelos de aprendizado de máquina (ML) e Deep Learning (DL) totalmente no navegador, usando Javascript e uma API de alto nível.

Em dezembro de 2019, a Amazon , o Facebook e a Microsoft anunciaram a iniciativa colaborativa de tornar pronta a produção do formato Open Neural Network Exchange (ONNX). O ONNX está agora disponível para suportar muitos frameworks e tempos de execução superiores, incluindo o Caffe2, o MATLAB, o Cognitive Toolkit da Microsoft, o Apache MXNet, o PyTorch e o TensorRT da NVIDIA. Há também um conversor de estágio inicial de TensorFlow e CoreML para ONNX que pode ser usado hoje.

Em novembro de 2018, o ONNX.js foi lançado. O ONNX.js é uma biblioteca Javascript de software livre para executar modelos ONNX em navegadores e no Node.js (algo como o TensorFlow.js). Você pode usá-lo para marcar modelos ONNX pré-treinados diretamente no navegador. O ONONX.js também é a primeira solução a utilizar o multithreading em um mecanismo de inferência AI baseado em JavaScript (via Web Workers), que oferece melhorias significativas de desempenho em qualquer solução existente na CPU. Ótima notícia, certo?

O que é ONNX e por que é tão legal?

Quando você desenvolve um modelo de aprendizado de máquina ou aprendizado profundo, geralmente produz os artefatos de modelo treinados que serão usados para previsão. Esse arquivo contém os parâmetros e pesos da rede neural que você passou horas treinando. Toda plataforma geralmente possui um formato de saída diferente. Por exemplo, os modelos MXNet CNN são salvos em arquivos (* .params e * .json). Este formato só funcionará na inferência de tempo de execução do MXNet. ONNX vem resolver esse problema. Ele torna os modelos de aprendizado profundo portáteis, nos quais você pode desenvolver um modelo usando o MXNet, o Caffe ou o PyTorch e usá-lo em uma plataforma diferente. Por exemplo, você pode desenvolver um modelo de classificação de imagens usando o PyTorch e implantá-lo em dispositivos iPhone para usar o CoreML usando o formato ONNX.

Por que aprender profundamente no navegador?

Existem alguns benefícios importantes de executar um modelo DL no dispositivo do lado do cliente (navegadores):

1- Privacidade:

Se o modelo ML / DL estiver lidando com dados confidenciais e privados e você não quiser enviar os dados para um servidor para inferência, então esta seria uma boa solução para você.

2- baixa latência:

Ter o modelo diretamente no lado do cliente reduz a sobrecarga de comunicação cliente-servidor.

3- Cross-Platform:

Não importa qual sistema operacional você está usando porque funcionará no navegador. Também não há necessidade de instalar nenhuma biblioteca.

Resultados de referência:

A Microsoft realizou alguns testes de benchmarking contra o tensorflow.js e a biblioteca keras.js e os resultados foram impressionantes. Você pode ver que o ONNX.js pode ser mais de 8 vezes mais rápido:

https://github.com/Microsoft/onnxjs

Agora, vamos ver algum código:

Agora, vamos construir um classificador de imagem simples usando o modelo de pré-compilação – Inception_v2 em três etapas simples . Você pode baixar o modelo pré-treinado do zoológico modelo ONNX.

A primeira etapa é criar uma sessão de inferência do ONNX com o backend WebGL ou WebAssembly. Neste exemplo, vou usar o backend WebGL, então vou carregar o modelo que acabei de baixar usando a função session.loadModel() .

O segundo passo é processar e redimensionar a imagem de entrada e criar um tensor a partir da imagem de entrada usando a função onnx.Tensor() .

O terceiro passo é obter as previsões usando a função session.run() e traduzir a saída para a classe relevante.

Snippet de código para usar o ONNX.js

Você pode obter o código de exemplo completo aqui . Há também um site implantado para todas as demonstrações que você tenta aqui .

Conclusão:

O ONNX é um formato padrão aberto muito poderoso que torna os artefatos de modelo portáteis entre as plataformas. Você ainda pode usar sua estrutura favorita para codificação e depois distribuir seus resultados para que ela funcione em qualquer plataforma usando o formato ONNX. Essa é uma ótima maneira de democratizar o desenvolvimento e a inferência de máquinas e aprendizado profundo. Definitivamente há muito mais do que isso, mas espero que as informações contidas neste artigo tenham servido como uma breve e útil introdução ao ONNX e ao ONNX.js.