Page 47 - Revista_60.pub
P. 47
C#
WINDOWS ML (ML.NET C#)
Antes de iniciarmos o nosso exemplo, precisamos de
nos familiarizar com um outro termo “novo”… o ONNX, isto
é, o Open Neural Network Exchange Format. Simplificando
o termo, este é uma forma de representação de modelos de
aprendizagem, em que os programadores ou os simples
curiosos acerca deste tema podem utilizar e mover modelos
com maior facilidade entre um maior leque de ferramentas
tais como as frameworks Caffe2 (modular e escalável), chai-
ner (suporta a computação CUDA, redes de feed-forward,
redes recorrentes e redes recursivas), etc… também pode
ser bastante interessante neste âmbito dar uma vista de
olhos no Microsoft Cognitive Toolkit (opensource que treina
algoritmos de aprendizagem profunda para aprender como o
cérebro humano).
Após esta pequena introdução teórica, para criarmos
aplicações com o Windows ML precisamos apenas de:
1. Um modelo ONNX treinado ou converta modelos
treinados em outras estruturas ML em ONNX com
o WinMLTools .
Neste exemplo, para não tornar demasiado longo
nem estar a criar modelos do zero, vamos utilizar um modelo
já pronto disponível no github, nos samples de Windows
Machine Learning. Este modelo e exemplo apenas tem como
fluxograma.1 objectivo permitir ao utilizador a escolha de um ficheiro de
imagem, e ele encontrará o objecto “predominante” na ima-
gem.
Podemos descarregar o modelo bem como o exem-
plo completo em: https://github.com/Microsoft/Windows-
Machine-Learning/tree/master/Samples/
SqueezeNetObjectDetection/UWP
2. Adicionar o arquivo do modelo ONNX à nossa
aplicação
Apesar de no exemplo escolhido tudo estar feito, vamos
ver como importar o modelo, caso o leitor pretenda seguir as
etapas do zero.
Após ter o projeto aberto (uma aplicação UWP), no Vi-
sual Studio, do lado direito, no “Solution Explorer”, clicamos
na pasta “Assets” com o botão direito do rato, escolhemos
“Adicionar”, depois “Item Existente”, e escolhemos o mode-
lo ONNX, que descarregamos. Isto irá importar o modelo
com o nome “model.onnx”, que na verdade será o nosso
modelo.
Diagrama.1
Antes de prosseguir, temos de marcar o modelo para
Este mecanismo permite também que haja um maior ser feito o build aquando da compilação. Para tal clicamos
desempenho da CPU e GPU para uma rápida avaliação de com o botão direito do rato no “model.onnx” que se encon-
resultados. tra na pasta de “Assets”, depois em “Propriedades”, “Build
Neste ponto convém ressalvar que para libertarmos Action” e selecionámos a opção “Content”.
memória devemos sempre invocar o metódo Dispose() no mo-
delo e não apenas exclui-los, isto porque cada instância possui
uma cópia do modelo em memória. Assim se estivemos a tra- 3. Integrar o modelo no código da nossa aplicação
balhar com modelos pequenos isto pode não ser significativo Para integrar o modelo na nossa aplicação temos de
mas quanto trabalhamos com grandes modelos de dados, este escrever algum código! Para tal no ficheiro MainPa-
é um ponto importante a ter em conta.
47