sql >> Base de Datos >  >> RDS >> MariaDB

Parte 1:Clasificación de imágenes con MariaDB Server y TensorFlow:descripción general

Las empresas de vanguardia están recurriendo a la inteligencia artificial y el aprendizaje automático para enfrentar los desafíos de la nueva era de transformación del negocio digital.

Según Gartner:“El ochenta y siete por ciento de los líderes empresariales sénior dicen que la digitalización es una prioridad de la empresa y el 79 % de los estrategas corporativos dicen que está reinventando su negocio, creando nuevas fuentes de ingresos de nuevas maneras “.

Fuente :Gartner, Acelera la transformación de tu negocio digital, 15 de enero de 2019

Pero hasta ahora, el cambio digital ha sido un desafío. La complejidad de las herramientas, la arquitectura y el entorno crean barreras para el uso del aprendizaje automático. El uso de la gestión de datos relacionales basada en SQL para almacenar y realizar la exploración de datos de imágenes reduce las barreras y desbloquea los beneficios del aprendizaje automático.

Esta publicación de blog demuestra el uso de herramientas populares de código abierto MariaDB Server, la biblioteca TensorFlow Python y la biblioteca de redes neuronales Keras para simplificar la complejidad de implementar el aprendizaje automático. El uso de estas tecnologías puede ayudarlo a acelerar su tiempo de comercialización al acceder, actualizar, insertar, manipular y modificar datos de manera eficiente.

Aprendizaje automático en bases de datos relacionales

En el centro de la transformación empresarial digital habilitada por el aprendizaje automático se encuentran tecnologías como los chatbots, los motores de recomendación, las comunicaciones personalizadas, la segmentación inteligente de anuncios y la clasificación de imágenes.

La clasificación de imágenes tiene una amplia variedad de casos de uso, desde la aplicación de la ley y el ejército, hasta el comercio minorista y los automóviles que se conducen solos. Cuando se implementa con aprendizaje automático, la clasificación de imágenes puede proporcionar inteligencia comercial en tiempo real. El objetivo de la clasificación de imágenes es identificar y representar, como un nivel de gris (o color) único, las características que ocurren en una imagen. Las herramientas más comunes para la clasificación de imágenes son TensorFlow y Keras.

TensorFlow es una biblioteca de Python para computación numérica rápida creada y lanzada por Google. MariaDB Server es una base de datos relacional de código abierto con una interfaz SQL para acceder y administrar datos. Keras es una biblioteca de redes neuronales de código abierto escrita en Python.

En esta publicación, descubrirá cómo probar la clasificación de imágenes al habilitar la interoperabilidad entre TensorFlow y MariaDB Server. Esta publicación utiliza el conjunto de datos Fashion MNIST que contiene 70 000 imágenes en escala de grises en 10 categorías. Las imágenes muestran prendas individuales en baja resolución (28 por 28 píxeles).

Cargar y preparar los datos en MariaDB Server está fuera del alcance de esta publicación. Las siguientes tablas se crearon y completaron de antemano con el conjunto de datos de Fashion MNIST.

Imágenes Rol de imagen Etiqueta de imagen
CREATE TABLE tf_images (
 img_label tinyint(4),
 img_vector blob,
 img_idx    int(10) sin firmar NOT NULL,
 img_blob   blob,
 img_use    tinyint(4)
) MOTOR=CONJUNTO DE CARACTERES POR DEFECTO InnoDB=utf8mb4
CREATE TABLE img_use (
 use_id tinyint(4) NOT NULL AUTO_INCREMENT,
 use_name varchar(10) NOT NULL,
 use_desc varchar(100) NOT NULL,
 PRIMARY KEY (use_id)
) MOTOR=InnoDB AUTO_INCREMENT=3 CONJUNTO DE CARACTERES POR DEFECTO=utf8mb4
CREATE TABLE categories (
 class_idx tinyint(4) NOT NULL,
 class_name char(20) DEFAULT NULL,
 PRIMARY KEY (class_idx)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

Exploración de datos

Las siguientes bibliotecas se utilizan para realizar la exploración básica de datos con MariaDB Server:

  1. El io El módulo proporciona las funciones principales de Python para tratar con varios tipos de E/S.
  2. Matplotlib es una biblioteca de trazado 2D de Python para producir una variedad de gráficos en todas las plataformas.
  3. Pandas ofrece estructuras de datos y operaciones para manipular tablas numéricas y series de tiempo.
  4. El pymysql El paquete contiene una biblioteca cliente de Python puro para acceder al servidor MariaDB.

Comencemos conectándonos al servidor de la base de datos a través de Python:

import io
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import pandas as pd
import pymysql as MariaDB
%matplotlib inline

conn = MariaDB.connect( host = '127.0.0.1'
, port = 3306
, user = 'mdb'
, passwd = 'letmein'
, db = 'ml'
, charset = 'utf8')

cur = conn.cursor()

Una vez conectado al servidor MariaDB, se puede acceder y administrar fácilmente las imágenes en la base de datos. Todas las imágenes utilizadas para entrenar y probar el modelo se almacenan en una sola tabla (tf_images). La forma en que se utilizará la imagen se define en la tabla de uso de imágenes (img_use). En este caso, la tabla tiene solo dos tuplas, entrenamiento y prueba:

sql="SELECT use_name AS 'Image Role'
          , use_desc AS 'Description'
     FROM img_use"
display( pd.read_sql(sql,conn) )

Rol de imagen Descripción
Entrenamiento La imagen se usa para entrenar el modelo
Pruebas La imagen se utiliza para probar el modelo

La asignación de atributos de destino a objetos de imagen en un conjunto de datos se denomina etiquetado. La definición de la etiqueta varía de una aplicación a otra, y apenas existe una definición universal de lo que es una etiqueta "correcta" para una imagen. El uso de una base de datos relacional simplifica el proceso de etiquetado y proporciona una forma de pasar de etiquetas de grano grueso a fino.

En este ejemplo, usando la tabla de "categorías", una imagen tiene solo una etiqueta (gruesa) como se muestra a continuación:

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Nombre de clase
0 Camiseta/top
1 Pantalones
2 Jersey
3 Vestido
4 Abrigo
5 Sandalia
6 Camisa
7 Zapatillas
8 Bolsa
9 Botines

Las imágenes La tabla contiene todas las imágenes que se utilizarán para el entrenamiento y las pruebas. Cada imagen tiene un identificador único, una etiqueta y si se usa para entrenar o probar el modelo. Las imágenes se almacenan en su formato PNG original y como tensores de punto flotante preprocesados. Se puede ejecutar una combinación interna simple en esta tabla para mostrar las representaciones de la imagen (formato vectorial o png), su etiqueta y el uso previsto.

sql="SELECT cn.class_name AS 'Class Name' 
          , iu.use_name AS 'Image Use' 
          , img_vector AS 'Vector Representation' 
          , img_blob AS 'Image PNG' 
     FROM tf_images AS ti 
          INNER JOIN categories AS cn ON ti.img_label = cn.class_idx
          INNER JOIN img_use AS iu ON ti.img_use  = iu.use_id
     LIMIT 5"
display( pd.read_sql(sql,conn) )

Nombre de clase Uso de imágenes Representación de vectores Imagen PNG
Botines Entrenamiento b'\x80\x02cnumpy.core.multiarray\n_reconstrucción... b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Camiseta/top Entrenamiento b'\x80\x02cnumpy.core.multiarray\n_reconstrucción... b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Camiseta/top Entrenamiento b'\x80\x02cnumpy.core.multiarray\n_reconstrucción... b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Vestido Entrenamiento b”\x80\x02cnumpy.core.multiarray\n_reconstruir… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Camiseta/top Entrenamiento b'\x80\x02cnumpy.core.multiarray\n_reconstrucción... b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

El uso de sentencias SQL facilita el proceso de exploración de datos. Por ejemplo, la instrucción SQL siguiente muestra la distribución de imágenes por etiqueta de imagen.

sql="SELECT class_name AS 'Image Label' \
     , COUNT(CASE WHEN img_use = 1 THEN img_label END) AS 'Training Images'\
     , COUNT(CASE WHEN img_use = 2 THEN img_label END) AS 'Testing Images'\
     FROM tf_images INNER JOIN categories ON class_idx = img_label \
     GROUP BY class_name"
df = pd.read_sql(sql,conn)
display (df)
ax = df.plot.bar(rot=0)

Etiqueta de imagen Imágenes de entrenamiento Imágenes de prueba
0 Botines 6000 1000
1 Bolsa 6000 1000
2 Abrigo 6000 1000
3 Vestido 6000 1000
4 Jersey 6000 1000
5 Sandalia 6000 1000
6 Camisa 6000 1000
7 Zapatillas 6000 1000
8 Camiseta/top 6000 1000
9 Pantalones 6000 1000

Hay 6000 imágenes para cada etiqueta en el conjunto de entrenamiento y 1000 imágenes para cada etiqueta en el conjunto de prueba. Hay 60 000 imágenes en total en el conjunto de entrenamiento y 10 000 imágenes en total en el conjunto de prueba.

Las prendas individuales se almacenan como imágenes de baja resolución. Dado que la base de datos puede almacenar esas imágenes de manera eficiente como objetos binarios grandes (BLOB), es muy fácil recuperar una imagen mediante SQL, como se muestra a continuación:

sql="SELECT img_blob \
     FROM tf_images INNER JOIN img_use ON use_id = img_use \
     WHERE use_name = 'Testing' and img_idx = 0"

cur.execute(sql)
data = cur.fetchone()
file_like=io.BytesIO(data[0])
img = mpimg.imread(file_like)
plt.imshow(img)

arriba:imagen del conjunto de datos fashion_mnist

Esta primera parte de la serie de blogs ha demostrado cómo se puede usar una base de datos relacional para almacenar y realizar la exploración de datos de imágenes usando instrucciones SQL simples. La Parte 2 mostrará cómo formatear los datos en las estructuras de datos que necesita TensorFlow y luego cómo entrenar el modelo, realizar predicciones (es decir, identificar imágenes) y almacenar esas predicciones en la base de datos para su posterior análisis o uso.

Licencia MIT

El conjunto de datos de Fashion MNIST (fashion_mnist) aprovechado por este blog está autorizado bajo la Licencia MIT.

La licencia MIT (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com

Por la presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión, publicación, distribución, sublicencia y/o venta de copias del Software, y para permitir que las personas a las que se proporciona el Software lo hagan, sujeto a las siguientes condiciones:

El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.

EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, ENTRE OTRAS, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN FIN DETERMINADO Y NO VIOLACIÓN. EN NINGÚN CASO LOS AUTORES O LOS TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE CUALQUIER RECLAMACIÓN, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE CUALQUIER OTRO TIPO, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTROS TRATOS EN EL SOFTWARE.

Referencias

Convierta su propia imagen en la imagen de MNIST
matplotlib:Tutorial de imágenes
5 formas en que la IA está transformando la experiencia del cliente
La digitalización está reinventando el negocio
¿Qué es la clasificación de imágenes?
Introducción a Python Biblioteca de aprendizaje profundo TensorFlow