
NOTICIAS / CIENCIA DE DATOS
Imagínese que es usted el director de una nueva empresa de alta tecnología que quiere vender al mercado un producto totalmente nuevo (un nuevo dispositivo IoT, digamos). Ha participado en numerosas conferencias, exposiciones y demostraciones para dar a conocer su producto con antelación y darlo a conocer. El impacto directo que espera es que las ventas de su producto, una vez lanzado, puedan ser lo suficientemente elevadas como para alcanzar sus objetivos.
Imagínese que es usted el director de una nueva empresa de alta tecnología que quiere vender al mercado un producto totalmente nuevo (un nuevo dispositivo IoT, digamos). Ha participado en numerosas conferencias, exposiciones y demostraciones para dar a conocer su producto con antelación y darlo a conocer. El impacto directo que espera es que las ventas de su producto, una vez lanzado, puedan ser lo suficientemente elevadas como para alcanzar sus objetivos.
He aquí un problema: no dispone de medios para anticipar y estimar la demanda de su producto.
Un dato sencillo que podría comprobar es cuánto habla la gente de su producto en Internet. Podría echar un vistazo a las principales redes sociales (Facebook, Twitter, Instagram...) y cuantificar cuántas publicaciones mencionan su producto. Eso le daría una idea de la magnitud de las ventas que podría esperar.
Tiene dos opciones para reconocer un producto en un post social. Puede analizar su texto realizando Text Mining o puede realizar Image Recognition en la imagen del post. Pero hay un problema con el análisis del texto: cuando un producto sale a la venta, hay pocas posibilidades de que todo el mundo conozca su nombre y lo mencione inmediatamente después de la fecha de lanzamiento. Por ello, el reconocimiento de imágenes es la solución preferida. Para reconocer un producto en imágenes (si tiene varios productos que reconocer), necesitará realizar Detección de objetos y ahí es donde entra Tensorflow.
¿Qué es Tensorflow?
Tensorflow es un código abierto librería matemática, que proporciona APIs estables en Python y C, utilizada para varias tareas de manipulación data. Es muy conocida y utilizada para aplicaciones de aprendizaje automático y aprendizaje profundo, como las redes neuronales. Los casos de uso por los que Tensorflow es más conocido son el reconocimiento de imágenes, el procesamiento del lenguaje natural y el análisis de voz a texto.
Nuestro caso de uso específico es Detección de objetos. Puede utilizar Tensorflow a diferentes niveles:
- Nivel 1: Utilice un modelo preentrenado de la estantería y aplíquelo directamente a su data para reconocer los productos. Este método es el menos complejo y el más rápido, ya que no necesita construir ni entrenar un modelo.
- Nivel 2: Entrene un modelo en su propio data, para que el modelo pueda aprender y conocer con precisión la gama de sus productos. Este nivel requiere entrenar un modelo sobre data que usted haya etiquetado de antemano. Lleva más tiempo pero aporta resultados más relevantes, ya que el modelo reconocerá las referencias exactas de los productos.
- Nivel 3: Cree su propio modelo desde cero. En este nivel, usted no sólo entrena un modelo, sino que lo construye desde el principio. Puede ser el ajuste de parámetros sobre un modelo existente, así como el desarrollo de una nueva arquitectura de red neuronal. Está más dedicado a fines de investigación, ya que es un enfoque que requiere mucho tiempo.
A continuación describimos con más detalle cada nivel de uso de Tensorflow.
Nivel 1 - Utilizar un modelo preentrenado
El primer uso básico es utilizar un modelo que ya ha sido entrenado en un conjunto data etiquetado. Esta opción debe elegirse siempre que el data al que desee aplicar el modelo sea muy similar al data de entrenamiento. Por ejemplo, cuando desee reconocer objetos genéricos como zapatos, smartphones, bolsos, etc. Por lo tanto, este enfoque no será adecuado si espera reconocer una marca y un modelo preciso de su gama de productos.
Normalmente, estos modelos se entrenan con conjuntos data estándar, como el Coco dataset (enlace github aquí) o ImageNet dataset (enlace aquí). Estos datasets están compuestos por enormes colecciones de imágenes ya etiquetadas y listas para ser utilizadas en el entrenamiento de modelos. Su uso está muy extendido para entrenar modelos de clasificación de imágenes y detección de objetos, que pueden utilizarse como modelos preentrenados para el reconocimiento genérico de productos.
Ahora que sabemos más sobre el data, echemos un vistazo rápido al modelo preentrenado que podría utilizar. Uno de los recursos más comunes para encontrar modelos preentrenados es Keras. Dispone de un módulo en el que puede encontrar varios tipos de modelos de clasificación de imágenes (VGG16, ResNet50, IncetopnV3...), que han sido entrenados en conjuntos estándar datasets. ImageNet para estos casos. El flujo de trabajo es entonces sencillo, usted carga el modelo y lo aplica directamente a sus imágenes para extraer las características. Por ejemplo, puede clasificar directamente cuáles de sus imágenes contienen relojes, auriculares, cascos... Hay otro ejemplo más específico para el caso de uso de la detección de objetos y fue desarrollado por el equipo Tensorflow de Google. Construyeron una serie de modelos preentrenados (uno de ellos se basa en el conjunto Coco data), para utilizarlos directamente en imágenes nuevas para la detección de objetos (enlace github aquí). Estos modelos también podrían utilizarse como modelos para volver a entrenar en su propio data, de lo que nos ocuparemos en el nivel 2.
Nivel 2 - Entrene un modelo por su cuenta data
Cuando trabaje con un dataset bastante diferente del dataset original utilizado para entrenar el modelo, la simple aplicación no funcionará. Tendrá que construir su propio dataset de entrenamiento y volver a entrenar el modelo con él.
La mayoría de los problemas de reconocimiento de imágenes requieren el uso de redes neuronales convolucionales (CNN). Las primeras capas (capas convolucionales) extraen patrones y características de la imagen. Estas características se pasan a las últimas capas (capas totalmente conectadas) para la predicción. Existen dos enfoques para volver a entrenar un modelo en su propio data: Aprendizaje por transferencia y Ajuste fino.
Aprendizaje por transferencia consiste en utilizar las capas convolucionales preentrenadas del modelo original y entrenar las capas totalmente conectadas sobre las características extraídas de nuestro conjunto de imágenes. La idea aquí es utilizar los conocimientos adquiridos al entrenar el modelo en el conjunto data original y utilizarlos para nuestro problema. Esta técnica es eficaz en los casos en que los dos conjuntos data son similares, por ejemplo, un modelo entrenado para reconocer coches podría volver a entrenarse para reconocer camiones. La razón es que las imágenes de coches son similares a las de camiones y es probable que los patrones extraídos por las capas convolucionales de estas imágenes sean similares. La figura siguiente ilustra el proceso:
Si su dataset es muy diferente del dataset original, tendrá que realizar Ajuste fino. A diferencia del aprendizaje por transferencia, aquí se vuelve a entrenar toda la red (o al menos la mayoría de las capas convolucionales). Así, las capas convolucionales se entrenan en sus imágenes y pueden extraer características totalmente adaptadas a ellas. La ventaja del ajuste fino es que el modelo se entrena completamente en el conjunto data y es probable que tenga mejores prestaciones, pero también requiere más tiempo y es más caro computacionalmente. La figura siguiente ilustra el proceso:
Para construir un dataset para la detección de objetos es necesario recopilar muchas imágenes de entrenamiento, pero "¿cuántas exactamente?", cabe preguntarse. Algunos dicen que cientos, otros que miles o incluso cientos de miles, pero en realidad no existe una verdad de base. Sin embargo, se recomienda tener más de cien imágenes para cada clase que quiera que reconozca su modelo.
Una vez que haya recopilado sus imágenes, deberá etiquetarlas. El proceso de etiquetado consiste en crear archivos JSON que contengan las coordenadas y la clase del objeto que el modelo debe detectar y reconocer en cada imagen. Esta parte suele hacerse manualmente, pero puede semiautomatizarse mediante código. Se han desarrollado varias herramientas de código abierto para agilizar el etiquetado manual, y una de ellas es el BBox-Label-Tool en Github. La herramienta consiste en una interfaz de usuario, que carga todas las imágenes y permite al usuario etiquetar una imagen con 2 clics:
El usuario sólo tiene que hacer clic en la esquina superior izquierda y en la esquina inferior derecha del objeto, entonces la herramienta dibuja un rectángulo alrededor de la imagen y guarda las coordenadas en un archivo. Esto reduce el tiempo de etiquetado (aparte de añadir la clase del objeto) a 3 segundos. El archivo JSON final, después de añadir la clase del objeto, debería tener este aspecto:
El último paso es convertir los archivos en un único archivo, especialmente formateado para Tensorflow. Se ofrece un sencillo tutorial aquí.
Una vez que haya creado su dataset, puede empezar a entrenar su modelo, ¡pero primero necesita encontrar un modelo preentrenado! Las recientes investigaciones en aprendizaje profundo han llevado al desarrollo de varios modelos basados en redes neuronales para la detección de objetos. Una arquitectura famosa es la Faster R-CNN basada en redes de propuestas regionales (RPN). Faster R-CNN tiene dos redes: una RPN para generar propuestas de regiones y una red que utiliza estas propuestas para detectar objetos. El equipo Tensorflow de Google ha desarrollado una serie de modelos de aprendizaje profundo para que sean fácilmente utilizables por los científicos del data y uno de ellos es un modelo de detección de objetos basado en Faster R-CNN. El modelo se proporciona en la página de Tensorflow Github página con un tutorial. La página tutorial muestra los pasos para volver a entrenar el modelo (con Aprendizaje por Transferencia) y desplegarlo en Google ML Engine.
Nivel 3 - Cree su propio modelo desde cero
Si tiene alma de investigador o tiene un problema de visión por ordenador muy específico, puede crear su propio modelo desde cero. En este caso, tiene tres opciones :
- Construir un modelo de clasificación de imágenes con CNN
La solución más sencilla para el reconocimiento de productos es la clasificación de imágenes con arquitectura de redes neuronales convolucionales. Estos modelos toman una imagen como entrada y dan como salida una etiqueta que indica el objeto. Por tanto, sólo deben utilizarse cuando las imágenes contengan un único objeto que desee detectar. Sin embargo, es probable que el uso de un modelo de clasificación de imágenes para la detección de objetos tenga un rendimiento pobre simplemente por el ruido que rodea al objeto en la imagen. Los modelos de clasificación de imágenes están diseñados para extraer características de toda la imagen y clasificarla en su conjunto. El problema aquí es que dos imágenes diferentes, por ejemplo una imagen de una habitación y otra de una calle, ambas con el objeto deseado, pueden tener la misma etiqueta. Esto dificulta la tarea de clasificación. A continuación dos tutoriales sobre cómo construir CNN desde cero.
- Construir un modelo de detección de objetos
Como ya se ha dicho, los modelos de detección de objetos han surgido recientemente con la investigación en Deep Learning. La arquitectura Faster R-CNN se introdujo a finales de 2015 como una iteración de la arquitectura más antigua Fast R-CNN. Da salida a :
a) una lista de cuadros delimitadores
b) una etiqueta asignada a cada cuadro delimitador
c) una probabilidad para cada etiqueta y cuadro delimitador
En primer lugar, se aplica a la imagen una CNN preentrenada que crea un mapa de características. A continuación, estas características se pasan a una RPN para encontrar regiones candidatas (cuadros delimitadores) que contengan objetos relevantes. El último paso consiste en utilizar las características computadas por la CNN y los recuadros delimitadores para clasificar el contenido de los recuadros delimitadores y ajustar sus coordenadas (para que se ajuste mejor al objeto). Esto se hace mediante el módulo RCNN. La figura siguiente ilustra la arquitectura:
En este tutorial, y existen trabajos de código abierto sobre el tema aquí.
- Construir un modelo híbrido utilizando arquitecturas de detección de objetos y CNNs
Si desea mejorar su rendimiento, puede considerar el enfoque híbrido. Es posible que un enfoque de detección de objetos dé como resultado una mala clasificación (se detecta bien el objeto pero se predice una etiqueta errónea). En este caso, puede entrenar primero un modelo de detección de objetos en su dataset, con una sola etiqueta ("objeto", por ejemplo) y luego recortar sus imágenes basándose en las coordenadas de los cuadros delimitadores. Esto creará un conjunto de imágenes que contendrá sólo el objeto relevante detectado en las imágenes originales. A continuación, puede utilizar este conjunto como conjunto de entrenamiento para la clasificación de imágenes CNN.
Ampliación - Aprendizaje automático
Hoy en día podemos observar el desarrollo de nuevas iniciativas que pretenden que el proceso de crear y personalizar su propio modelo esté al alcance de cualquiera, incluso de personas sin formación técnica. El objetivo es que en lugar de utilizar modelos listos para aplicar (como el nivel 1), usted pueda entrenar su propio modelo sin necesidad de tener los conocimientos subyacentes.
¿Cómo funciona?
La solución consiste en automatizar la creación del modelo de clasificación de imágenes o de detección de objetos. Sólo tendrá que proporcionar un conjunto data etiquetado con sus imágenes y enviarlo a la solución. Este data se ingestará para entrenar sobre él un modelo de visión por ordenador (como nivel 2 o nivel 3). Se obtendrá un modelo entrenado, a veces incluso una API, que usted podrá utilizar para predecir las etiquetas y localizar objetos en nuevas imágenes. El modelo se optimiza a sí mismo, por lo que no necesita saber cómo implementarlo ni cómo parametrizarlo.
¿Cuáles son las soluciones?
Dos actores principales están surgiendo en este ámbito, y han lanzado herramientas que por el momento se encuentran en fase beta.
- En primer lugar, tenemos a Google y su componente Google Cloud AutoML de su conjunto de plataformas en la nube (enlace aquí). Cloud AutoML no sólo está diseñado para problemas de visión por ordenador, sino que también puede ser útil para cualquier aplicación de aprendizaje automático, así como para el procesamiento del lenguaje natural y la traducción.
- En segundo lugar, tenemos la iniciativa de código abierto AutoKeras (enlace aquí). Está basado en Keras, y se basa en la búsqueda automática de la arquitectura y los hiperparámetros de los modelos de aprendizaje profundo.
Artículo coescrito por Matthieu Montaigu y Kasra Mansouri, científicos del Data en el Artefact.
¿ Le interesa saber más sobre la previsión de ventas gracias a modelos de reconocimiento de productos a medida ? ¡Nuestros expertos están a su disposición para responder a todas sus preguntas !

BLOG









