Construcción de un modelo de Machine Learning usando TensorFlow (parte 1)

Hoy, en pleno proceso de digitalización de las industrias, hay un campo que destaca especialmente por su eficacia y flexibilidad para producir este cambio. Y es el caso de la IA (Inteligencia Artificial). Aunque este campo ya era investigado desde antes del siglo XXI, no fue hasta la última década donde se produjo el ¡Boom! para convertirse en uno de los campos más investigados y solicitados, creando una demanda en la sociedad actual que no da a basto para suplirlas.

En este artículo en concreto, voy a centrarme en una subrama de la IA, llamada Machine Learning, donde más concretamente me enfocaré en la creación de un modelo de predicción usando Tensorflow y como ejemplo de tarea intentaré la de clasificar monos y humanos en una imagen dada.

Para ello, en primer lugar necesitamos preparar la parte más importante de un modelo, los datos de entrenamiento. Este procedimiento suele ser la parte más pesada de un proyecto de ML, donde abarca entre un 70% – 80% del tiempo total invertido en un proyecto, esto es debido a que los datos interfieren directamente con el porcentaje de acierto a la hora de predecir sobre los nuevos datos obtenidos. Pongamos un ejemplo, queremos clasificar en una imagen un perro y un gato, pero los datos de entrenamiento que hemos creado, contienen en gran parte fotos de perros pero muy pocas de gatos, esto puede provocar que una vez entrenado el modelo con estos datos, al llegar el momento de la predicción de imágenes nuevas se equivoque un gato con un perro. Esto es debido a que al darle tan pocas imágenes de gatos el modelo no ha conseguido suficiente información para identificar los patrones que diferencian los perros de los gatos. Por eso debemos hacer que nuestros datos de entrenamiento sean lo más balanceados posibles para que no ocurran casos como este.

Para nuestro ejemplo, he seleccionado imágenes de monos y personas en cantidades similares y las he clasificado dependiendo de si aparecía un mono o un humano, usando LabelImg, que nos permite la clasificación de  imágenes gráficamente y ayuda a generar un archivo XML que indica en qué píxeles de la imagen aparece el objetivo.

Después de pasar horas y horas clasificando todas las imágenes, ha llegado el momento de codificar. Pero, ¿en qué se codifica ML? Te preguntarás. Aunque hoy en día existen multitud de lenguajes de programación que facilitan la tarea de crear modelos de ML, hay un lenguaje que destaca por encima de todos, y es el caso de Python. ¿Por qué Python?, es debido a que Python nos proporciona una gran cantidad de librerías descargables, como TensorFlow o Keras, que nos ayudan a modelar nuestro modelo de forma fácil y sencillo y otras librerías que nos permite adaptar nuestros datos de entrenamiento al formato del input que pide TensorFlow.

Pero antes de empezar a escribir una línea de código, necesitamos realizar paso  más, y es preparar la estructura interna de la carpeta de datos, ya que, a pesar de que TensorFlow nos ayuda a crear los archivos TFRecord que son los que se pasa al modelo para entrenar, los Scripts para crear estos ficheros piden una entrada de unas carpetas en concreto y, por tanto, tenemos que adaptar nuestra carpeta de dataset a ello.

En primer lugar, la carpeta necesita un formato tal que así:

Como se puede observar la estructura es muy simple, donde en la carpeta raíz se encuentra la carpeta que almacena las imágenes y luego otra que almacena las anotaciones, estas anotaciones son los archivos XML que hemos generado a partir de clasificar las imágenes con el programa LabelImg, y por otro lado un fichero label_map.pbtxt que contendrá las objetivos que queremos clasificar en este caso son humanos y monos por lo que el archivo tendrá un formato igual a este:

CONTINUAR CON LA PARTE 2 ->

Antonio Jin
projects@evenbytes.com