Detección de objetos con Azure Custom Vision
Tags: cloud, azure, ai, tutorial
Published: 2023-04-01 04:07:32

La detección de objetos en imágenes nos permite conocer las coordenadas de uno o múltiples objetos (o etiquetas) previamente establecidas. 

En este tutorial aprenderemos a crear un modelo de visión por computador con el recurso _Custom Vision de Azure_, para el reconocimiento de objetos (Botellas, Rostros, Guitarras, y Sombreros) en imágenes.

**Aspectos importantes:**  

Para personalizar nuestro modelo, este será el proceso de deberemos tener en cuenta: 


![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lkealagumjbnveq84wqy.png)
 
_Acceso a Custom Vision:_ https://www.customvision.ai/

_Dataset de imágenes de ejemplo:_ URL

## **Proceso previo: Crear un proyecto de Custom Vision.**

En primera instancia, necesitaremos iniciar sesión en el portal Low-Code de Custom Vision con las credenciales de nuestra cuenta de Azure, y crear un nuevo proyecto de tipo Object Detection. 

**Nota:** Necesitaremos un recurso Azure Custom Vision. Este recurso lo podemos crear desde el portal de Azure, o desde este asistente de configuración directamente. 

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nifwlyxpex61vcz78phw.png)

## **Paso 1: Cargar Imágenes**

Como primer paso, lo primero que haremos será cargar las imágenes (de preferencia en orden, según los objetos que vayamos a etiquetar para la detección de objetos).

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4rcoq2u562nh7sef3rpt.png)
 
Al seleccionar la opción _Add Images_, podremos seleccionar las imágenes que deseemos cargar. En este ejemplo cargaremos las imágenes para etiquetar imágenes con sombreros: 

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ijk5pe8boroqpykgcipa.png)
 
Una vez finalizada la carga de imágenes, podremos ver algo como esto:

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lo75xdnyszt1ahqob75g.png)
 
Ahora, con cada una de las imágenes cargadas, deberemos abrir cada imagen, y seleccionar el área donde se encuentra el objeto que deseamos etiquetar.

![Select object in the image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7owv1fvcmmfh1uuwf6sr.png)
 
**Nota:** en una imagen podemos seleccionar una o varias áreas para etiquetar varios objetos. 

![Image areas](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w205r4xk9gz2q8bm1rrc.png)

Para poder finalizar este proceso de etiquetado de imágenes, es importante que hayamos etiquetado mínimo 15 imágenes por cada categoría. Para nuestro ejemplo, este es el número de imágenes que hemos utilizado en cada etiqueta: Botella - 18, Rostro - 26, Guitarra - 18, y Sombrero - 19. 

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ugf0sshyior6g7mgqa1e.png)

## **Paso 2. Entrenar el modelo**

Ahora que ya tenemos lo más importante (como en cualquier otro modelo de Machine Learning) – _los datos_, ahora podemos hacer el entrenamiento desde esta opción: 

![Train option](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9drx69oxf567ey3q729t.png) 

Aquí Podemos considerar dos tipos de entrenamiento:

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3fgvc2mcgejkrm1qsus5.png)

Por un lado, podemos realizar el entrenamiento en el menor tiempo posible según el número de imágenes que se hayan cargado y el número de etiquetas que tengamos; y por otro lado podemos hacer un entrenamiento avanzado, en el cual podremos encontrar el mejor modelo posible, considerando un máximo de tiempo que nosotros podemos especificar: 

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bhe7u812swf9ptbynfvg.png)
 
Cuando el entrenamiento haya finalizado, podremos evaluar el modelo.

## **Paso 3. Evaluar el modelo**

En este paso, en la sección de _Performance_, podremos analizar el modelo con tres métricas: _Precisión_, _Recall_, y _mAP _(Mean Average Precision).  

![General performance](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v5bruhmdpr9szww5fnft.png) 

![Performance per object](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8abdfcc11dgwcbovptgy.png)
 
De manera general, estas métricas nos sirven para analizar lo siguiente: 

> **Precisión:** indica la fracción de imágenes identificadas que eran correctas. Por ejemplo, si el modelo identificara 100 imágenes como sombreros y 99 de ellas fueran realmente sombreros, la precisión sería del 99 %.

> **Recall:** indica la fracción de clasificaciones reales que se identificaron correctamente. Por ejemplo, si en realidad hubiera 100 imágenes con sombreros y el modelo identificara 80 como sombreros, el recall sería del 80 %.

> **mAP:** es el valor medio de la precisión media (AP). AP es el área bajo la curva de precisión/recuperación (precisión trazada frente a la recuperación para cada predicción realizada).

**Prueba rápida:**

Con nuestro modelo de Azure Custom Vision listo, desde la opción _Quick Test_ podremos realizar un ejemplo rápido:

![Quick Test option](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1yfqb8xru290isb6yy6t.png) 
 
Aquí podremos subir una imagen desde nuestro computador, o utilizar el enlace de una imagen en línea. Asimismo, podremos establecer el umbral de probabilidad, es decir, mostrar todos los objetos detectados que tengan una probabilidad mayor a la que nosotros especifiquemos. 

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j25dcw5vns49ncdfluu8.png)
 
Ejemplo: en la imagen previa podemos ver que existe un 99.8% de probabilidad de que en el área especificada se encuentre una Guitarra. 

## **Plus: Publicar el modelo.**

Ahora que ya tenemos un modelo de Custom Vision establecido, ahora podemos publicarlo desde la sección de _Performance_, y seleccionar una _iteración/entrenamiento_. 

Para publicar el modelo, deberemos especificar un nombre, y el recurso de Custom Vision en Azure que nos permita hacer evaluaciones:

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hc9w4atleduiaj1hwghj.png)
 
Al publicar el modelo, podremos utilizar este recurso a manera de web API:

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gd041q06baavii67fm5a.png)
 
También pudiéramos exportar el modelo considerando TensorFlow, CoreML, Docker container, entre otros. 

Aquí podemos aprender más al respecto: [Exportación del modelo para su uso con dispositivos móviles](https://learn.microsoft.com/es-es/azure/cognitive-services/custom-vision-service/export-your-model).

## **¡Gracias por leer!**

Espero que te haya gustado el artículo. Si tienes alguna pregunta o idea en mente, será un gusto poder estar en comunicación e intercambiar conocimientos entre sí.

Nos vemos en [Twitter](https://twitter.com/esDanielGomez) / [esDanielGomez.com](https://esdanielgomez.com/)!