#Onnx – Object recognition with #CustomVision and ONNX in Windows applications using Windows ML

Hi!

One of the most interesting options that gives us Custom Vision, is the ability to export a model trained to be used on other platforms, without invoking Custom Vision own web service.

The 4 options available that we have today are

  • CoreML, iOS 11
  • TensorFlow, Android
  • ONNX, Windows ML
  • DockerFile, Azure IoT Edge, Azure Functions, AzureML

cv marvel export to ios tensorflow onnx dockerfile

I’ll share my experiences using the ONNX exported models being used in a Windows 10 Universal App.

The first thing we have to know is the version of Windows 10 with which we will work, because at the time of export we will see that we have 2 options

  • ONNX 1.0 for Windows 10 lower than 17738
  • ONNX 1.2 for Windows 10 higher than 17738

I am currently working with Win10 18317, so my examples will be for the ONNX version 1.2. The exported file is a zip that internally has the following files

  • CSharp\ObjectDetection.cs
  • python\cntk_predict.py
  • python\object_detection.py
  • labels.txt
  • model.onnx

The directories CSharp and Python have sample files to use the model with these languages. The file [labels.txt] contains the labels defined in the model, and finally the ONNX file is the model per se.

custom vision marvel onnx 1.2 exported files

For this example, I will use a blank App UWP with the following features

  • Added package NuGet Microsoft.Toolkit.Uwp.UI. Controls
  • Using the same, to access the webcam at the beginning of the app
  • We process each of the frames That are received from the webcam

Sample Code

At this point, we can now use our exported model to analyze images. We must add the file ONNX to our project, and configure the same to be a content and to be copied to the output build of our application.

An important detail here, is that if you have [Visual Studio Tools for AI] installed in Visual Studio, when you add this file the extension will automatically add a CS class to use with the model.  This class requires a lot of work to work, I recommend deleting it, as we will use as a base that is exported from Custom Vision, [ObjectDetection.cs].

custom vision marvel add onnx file to solution in vs

The file [ObjectDetection.cs] contains everything you need to use our model In a UWP App. At the start of the App we initialize the ONNX model, and in each Frame That is received from the camera will process the same to show the results in the window of Debug.

Now, for our app Work properly, you have to make a series of changes to the file [ObjectDetection.cs]. The changes are mainly related to the way in which WinML Processes the output when analyzing an image:

custom vision marvel uwp app running and analyzing

To be able to work this way, I added a new binding To process the output of the processing. This binding Respects the contract of ONNX with an array Long [1, 4].

This way we have no mistake of those “funny” that make you spend pleasant moments.

The full app can be seen in https://github.com/elbruno/events/tree/master/2019%2001%2010%20CodeMash%20CustomVision/CSharp/CustomVisionMarvelConsole01

Happy Coding!

Greetings @ Burlington

El Bruno

References

My Posts

Windows 10 and YOLOV2 for Object Detection Series

Advertisements

#Onnx – Reconocimiento de objetos con #CustomVision y ONNX desde aplicaciones Windows 10 con Windows ML.

Buenas!

Una de las opciones mas interesantes que nos brinda Custom Vision, es la capacidad de exportar un modelo entrenado para ser utilizado en otras plataformas, sin invocar el servicio web propio de Custom Vision.

Las 4 opciones disponibles que tenemos hoy son

  • CoreML, iOS 11
  • TensorFlow, Android
  • ONNX, Windows ML
  • DockerFile, Azure IoT Edge, Azure Functions, AzureML

cv marvel export to ios tensorflow onnx dockerfile

En el post de hoy comentare mi experiencia utilizando el modelo exportado a formato ONNX y siendo utilizado en una Universal App en Windows 10.

Lo primero que tenemos que conocer es la version de Windows 10 con la que trabajaremos, ya que al momento de exportar veremos que tenemos 2 opciones

  • ONNX 1.0 para versiones de Windows 10 menores que 17738
  • ONNX 1.2 para versiones de Windows 10 superiores a 17738

Actualmente estoy trabajando con Win10 18317, así que mis ejemplos serán para la version ONNX 1.2. El archivo exportado es un zip que internamente posee los siguientes archivos

  • CSharp\ObjectDetection.cs
  • python\cntk_predict.py
  • python\object_detection.py
  • labels.txt
  • model.onnx

Los directorios CSharp y Python poseen archivos de ejemplo para utilizar el modelo con estos lenguajes. El archivo [labels.txt] posee los labels definidos en el modelo, y finalmente el archivo ONNX es el modelo.

custom vision marvel onnx 1.2 exported files

Para este ejemplo, utilizare una UWP App en blanco con las siguientes características

  • Agregado el paquete NuGet Microsoft.Toolkit.Uwp.UI.Controls
  • Utilizando el mismo, para acceder a la webcam en el inicio de la app
  • Procesamos cada uno de los frames que se reciben desde la webcam

Sample Code

En este momento, ya podemos utilizar nuestro modelo exportado para analizar las imágenes de las cámaras. Debemos agregar el archivo ONNX a nuestro proyecto, y configurar el mismo para que sea un contenido y para que se copie al output build de nuestra aplicación.

Un detalle importante para tener en cuenta es que si tenemos instalada [Visual Studio Tools for AI] en Visual Studio, al momento de agregar este archivo, la extensión nos agregara automáticamente una clase CS para utilizar con el modelo.  Esta clase requiere bastante trabajo para funcionar, yo recomiendo borrarla, ya que utilizaremos como base la que se exporta desde Custom Vision, [ObjectDetection.cs].

custom vision marvel add onnx file to solution in vs

El archivo [ObjectDetection.cs] contiene todo lo necesario para utilizar nuestro modelo en una UWP App. En el inicio de la App inicializaremos el modelo ONNX, y en cada Frame que se reciba de la cámara procesaremos el mismo para mostrar los resultados en la ventana de Debug.

Ahora bien, para que nuestra app funcione correctamente, hay que hacer una serie de cambios en el archivo [ObjectDetection.cs]. Los cambios están principalmente relacionados en la forma en la que WinML procesa el output cuando se analiza una imagen

custom vision marvel uwp app running and analyzing

Para poder trabajar de esta forma, he agregado un nuevo binding para procesar el output del procesamiento. Este binding respeta el contract de ONNX con un array Long [1, 4].

De esta forma no tenemos ningún error de esos “divertidos” que te hacen pasar ratos agradables.

The full app can be seen in https://github.com/elbruno/events/tree/master/2019%2001%2010%20CodeMash%20CustomVision/CSharp/CustomVisionMarvelConsole01

Happy Coding!

Saludos @ Burlington

El Bruno

References

My Posts

Windows 10 and YOLOV2 for Object Detection Series

#WinML – Alternatives to #Yolo for object detection in #ONNX format

Hi!

A few days ago I commented with some colleagues the example of using TinyYolo In a UWP Application. Now it is a very task, because we can use a ONNX model in an Windows 10 application.

Note: The App can be an UWP app or a standard Win32 app, like, for example, the classic Windows forms.

Well, in the middle of the conversation, someone ask the following question, which is also a classic in ML events and talks:

Is there an AI model Marketplace for Windows?

The answer is yes. And although it’s not a Marketplace Models only, at Azure AI Gallery (Https://gallery.azure.ai/models) We can find many ONNX models, already ready to be used in Windows 10.

01 azure ai gallery home

On the main page we can see the different models organized by categories and by relevance. If we go into the detail of one of the models, we will see the details of the same, Like this As the option of downloading the file ONNX

02 azure ai gallery Alex Net details

Finally, according to the documentation of the model, we will be able to access your GitHub repository, Paper Where it explains the same, and other options.

03 AlexNet paper

So, you know, if you want to add some AI capabilities in your Apps, the Azure AI Gallery is a #MustReview Place to look!

Happy Coding!

Greetings @ Toronto

El Bruno

References

Windows 10 and YOLOV2 for Object Detection Series

#WinML – Alternativas a #TinyYolo para reconocimiento de objetos en formato #ONNX

Buenas!

Hace unos días comentaba con unos colegas el ejemplo de utilización de TinyYolo en una UWP. Ahora es muy simple poder utilizar un modelo de ML en formato ONNX y utilizarlo en una aplicación en Windows 10.

Nota: la app puede ser UWP o una app Win32 estándar, como, por ejemplo, los clásicos Windows Forms.

Pues bien, en el medio de la conversación, surgió la pregunta que mas respondo en eventos y charlas:

¿Hay un Marketplace de modelos de AI para Windows?

La respuesta es SI. Y aunque no es un marketplace solo de modelos, en Azure AI Gallery (https://gallery.azure.ai/models) podemos encontrar muchos modelos ONNX, ya preparados para ser utilizados en Windows 10.

01 azure ai gallery home

En la página principal podemos ver los diferentes modelos organizados por categorías y por relevancia. Si entramos al detalle de uno de los modelos, veremos los detalles del mismo, asi como la opción del descargar el archivo ONNX

02 azure ai gallery Alex Net details

Finalmente, de acuerdo con la documentación del modelo, podremos acceder a su repositorio de GitHub, al paper donde se explica el mismo, y otras opciones.

03 AlexNet paper

Así que, ya sabes, si quieres agregar algunas capacidades de AI en tus apps, la Azure AI Gallery es un #MustReview place donde buscar!

Happy Coding!

Saludos @ Toronto

El Bruno

References

Windows 10 and YOLOV2 for Object Detection Series

#WinML – Updated demo using Tiny YOLO V2 1.2, Windows 10 and YOLOV2 for Object Detection Series

Windows 10 and YOLOV2 for Object Detection Series


Hi!

There is a new Tiny YOLO V2 version in Azure AI Gallery

Tiny YOLOv2 1.2

I’ve updated my sample in GitHub to use this new version

https://github.com/elbruno/Blog/tree/master/20180806%20UwpMLNet%20TinyYoloV2%201.2

And it seems that Windows Insiders, are still having issues loading ONNXs models. My current build is 17730.1000

I1.png

Happy Coding!

Greetings @ Toronto

El Bruno

References

#WinML – Demo actualizada para utilizar Tiny YOLOv2 1.2, Windows 10 and YOLOV2 for Object Detection Series

Windows 10 and YOLOV2 for Object Detection Series


Buenas!

Ya tenemos disponible una nueva version de Tiny YOLO V2 en Azure AI Gallery

Tiny YOLOv2 1.2

Así que he actualizado el sample en GitHub para que utilice esta nueva version

https://github.com/elbruno/Blog/tree/master/20180806%20UwpMLNet%20TinyYoloV2%201.2

Y solo recordar que la carga de modelos ONNX parece que sigue sin funcionar en las versiones de Windows Insiders, en mi caso la build 17730.1000

I1.png

 

Happy Coding!

Saludos @ Toronto

El Bruno

References

#WinML – How to create a #Windows10 App and use #TinyYOLOV2 for object detection (the complete series)

Hi !

Windows 10 and TinyYOLOV2 for Object Detection Series

The complete example in GitHub

https://github.com/elbruno/Blog/tree/master/20180709%20UwpMLNet%20TinyYoloV3

Happy Coding!

Greetings @ Toronto

El Bruno

References

#Windows10 – A bit of Windows Subsystem For Linux, and some interesting IP addresses [1e100.net]

Hi!

These days I’ve been working in my home network. Now that we have many devices connected, I begin to see traces that are strange to me. Generally, it is usually something expected, like for example open ports by games of my children friends connected to my home network, however, the following scenario was funny for me.

Well, it all started when I saw in the traces a lot of activity with this data.

Destination URL or IP address: 173.194.193.188

Service or port number: 5228

 

I1.png

Usually, the next step is a command prompt and [nslookup] to view the host for this IP. However, now that Windows 10 allows us to use in Linux almost in native mode, I launched my Ubuntu instance and thanks to [Windows Subsystem For Linux] I was able to use the command [Dig], which is a very cool Linux tool. This is the perfect excuse to learn and use something new 😀

This is what I found: Traffic is performed in the domain 1e100.net

I2

This is at least curious. Like this That the following was to find out if there are any Apps That use that port and that domain. This is as simple as doing a Google search for https://www.google.com/search?q=ip%09173.194.193.188%09%09port+5228

I3

And here begins the interesting results. I leave it in item a item, where he was more and more surprised:

  • First of all, this port seems to be used a lot from Chrome in Apps Like Google Drive, Chrome Remote Desktop and other Google apps
  • Google Apps? It makes sense because the domain 1e100.net is owned by Google !!!

And this is where I dropped my face, after trying to explain why the domain name, I read the following

1e100 means 1 E 100. 1 * 10 ^ 100. The number, which is named Googol, where Google gets the name from !!!

Well, look, you got a new geek data to share with friends this weekend

Happy Coding!

Greetings @ Toronto

El Bruno

References

#Windows10 – Un poco de Windows Subsystem for Linux, y algunas IPs interesantes de conocer! [1e100.net]

Buenas!

Durante estos días he estado poniendo un poco de orden en la red interna de mi casa. Ahora que tenemos muchos Devices conectados, empiezo a ver trazas que me resultan extrañas. Por lo general, suele ser algo esperado, como por ejemplo puertos abiertos por juegos de amigos de mis niños que se conectan a la red, sin embargo, el siguiente escenario me llamo mucho la atención.

Todo comenzó cuando vi en las trazas bastante actividad con estos datos.

Destination URL or IP address: 173.194.193.188

Service or port number: 5228

 

I1

El siguiente paso es utilizar [nslookup] para ver el host de esta IP. Sin embargo, ahora que Windows 10 nos permite utilizar in Linux casi en modo nativo, pues lancé mi instancia de Ubuntu y gracias a [Windows Subsystem for Linux] pude utilizar el comando [dig], que es propio de Linux.

Esto es lo que me encontré: el tráfico se relaciona con el dominio 1e100.net

 

I2

Esto es por lo menos curioso. Así que lo siguiente fue averiguar si hay algunas apps registradas que utilicen ese puerto y ese dominio. Esto es tan simple como realizar una búsqueda en Google por https://www.google.com/search?q=ip%09173.194.193.188%09%09port+5228

I3

Y aquí comienza lo interesante. Lo dejo en Item a Item, donde cada vez estaba más sorprendido:

  • En primer lugar, este puerto parece que se utiliza mucho desde Chrome en apps como Google Drive, Chrome Remote Desktop y otras Apps de Google
  • Google Apps? Tiene sentido ya que el dominio 1e100.net es de Google

Y aquí fue donde se me cayó la cara, después de intentar explicarme el porque del nombre del dominio, leo lo siguiente

1e100 means 1 E 100. 1 * 10 ^ 100. The number, which is named Googol, where Google gets the name from !!!

Pues mira, ya tienes un dato friki para compartir con amigos

Happy Coding!

Saludos @ Toronto

El Bruno

References

#WinML – How to convert Tiny-YoloV3 model in CoreML format to Onnx and use it in a #Windows10 App

Windows 10 and YOLOV2 for Object Detection Series


Hi!

In today’s post I’ll share some experience on how to download the latest version of Tiny-YoloV3 and use it in the UWP App that I created in previous posts. Important, the Tiny-YoloV2  model I’ve used in previous posts was in Onnx format, and it was downloaded from Azure AI Gallery.

We can download Tiny-YoloV3 from the official site, however I will work with a version that is already compiled in CoreML format, CoreML format is usually used in iOS apps (see References).

Well, to convert the model of CoreML To Onnx, we will use Visual Studio Tools For Ai. And the next set of software

Once all the software is installed, we can follow the step by step of [Ai Converting Models To ONNX] to convert our model. However, the road is not as simple as it seems. The 1st thing we can find are errors like the following

01 thanks Python

Problems with Python, in my case had several versions of Python installed, but the IDE had no marked as [Default]. From the panel [Pythin Environments] You can fix this

01 1 Python environments

Next Problem I need some configuration on my part, it was related to Prerequisites for conversion. It all starts with [Missing Package WinMLTools]

—————————

Error

—————————

Missing package WinMLTools, please check details in output window.

—————————

OK  

—————————

 

Traceback (most recent call last):

  File “C:\Users\<Bruno>\AppData\Local\Microsoft\VisualStudio\15.0_e5344afb\Extensions\kzqekf1z.44v\RuntimeSDK\model\model_converter_cli.py”, line 76, in check_winmltools_installed

    import winmltools

ModuleNotFoundError: No module named ‘winmltools’

However After Of Investigate for a while, these are the 2 Packages I need to install

Microsoft ML Tool (winmltools)

pip3 install winmltools==0.1.0.5072

CoreML Tools

pip3 install “git+https://github.com/apple/coremltools@v0.8”

As always, 1st thing to do is update Python

03 upgrade pip.png

And now we can launch the conversion operation again

07 01 convert.png

And a few seconds later we already have our Tiny-YoloV3 in format Onnx

07 convert running

Because the model respects the Input/Output of the previous version, we only have to replace the file in our solution. I have added the new Onnx Just to have a little more control over the example.

08 Sol Onnx.png

As I have always updated the complete example in GitHub

https://github.com/elbruno/Blog/tree/master/20180709%20UwpMLNet%20TinyYoloV3

Happy Coding!

Greetings @ Toronto

El Bruno

References