MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Partie 1 :Classification d'images avec MariaDB Server et TensorFlow - un aperçu

Les entreprises de pointe se tournent vers l'intelligence artificielle et l'apprentissage automatique pour relever les défis de la nouvelle ère de la transformation numérique de l'entreprise.

Selon Gartner :"Quatre-vingt-sept % des dirigeants d'entreprise déclarent que la numérisation est une priorité pour l'entreprise et 79 % des stratèges d'entreprise déclarent qu'elle réinvente leur activité en créant de nouvelles sources de revenus de nouvelles manières ".

Source  :Gartner, Accélérez la transformation de votre entreprise numérique, 15 janvier 2019

Mais jusqu'à présent, le changement numérique a été difficile. La complexité des outils, de l'architecture et de l'environnement crée des obstacles à l'utilisation de l'apprentissage automatique. L'utilisation de la gestion des données relationnelles basée sur SQL pour stocker et effectuer l'exploration des données des images réduit les obstacles et libère les avantages de l'apprentissage automatique.

Cet article de blog montre comment utiliser les outils open source populaires MariaDB Server, la bibliothèque Python TensorFlow et la bibliothèque de réseau de neurones Keras pour simplifier la complexité de la mise en œuvre de l'apprentissage automatique. L'utilisation de ces technologies peut vous aider à accélérer votre mise sur le marché en accédant, mettant à jour, insérant, manipulant et modifiant efficacement les données.

Apprentissage automatique sur des bases de données relationnelles

Au centre de la transformation numérique de l'entreprise rendue possible par l'apprentissage automatique se trouvent des technologies telles que les chatbots, les moteurs de recommandation, les communications personnalisées, le ciblage publicitaire intelligent et la classification des images.

La classification des images a une grande variété de cas d'utilisation, des forces de l'ordre et de l'armée aux voitures de détail et autonomes. Lorsqu'elle est mise en œuvre avec l'apprentissage automatique, la classification des images peut fournir une intelligence économique en temps réel. L'objectif de la classification d'images est d'identifier et de représenter, en tant que niveau de gris (ou couleur) unique, les caractéristiques apparaissant dans une image. Les outils les plus courants pour la classification d'images sont TensorFlow et Keras.

TensorFlow est une bibliothèque Python pour le calcul numérique rapide créée et publiée par Google. MariaDB Server est une base de données relationnelle open source avec une interface SQL pour accéder et gérer les données. Keras est une bibliothèque de réseaux de neurones open source écrite en Python.

Dans cet article, vous découvrirez comment tester la classification des images en permettant l'interopérabilité entre TensorFlow et MariaDB Server. Cet article utilise l'ensemble de données Fashion MNIST qui contient 70 000 images en niveaux de gris dans 10 catégories. Les images montrent des vêtements individuels en basse résolution (28 x 28 pixels).

Le chargement et la préparation des données dans MariaDB Server sortent du cadre de cet article. Les tableaux suivants ont été créés et remplis à l'avance avec l'ensemble de données Fashion MNIST.

Images Rôle d'image Libellé de l'image
CREATE TABLE tf_images (
 img_label tinyint(4),
 img_vector blob,
 img_idx    int(10) unsigned NOT NULL,
 img_blob   blob,
 img_use    tinyint(4)
) MOTEUR=jeu de caractères par défaut 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,
 CLÉ PRIMAIRE (use_id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=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

Exploration des données

Les bibliothèques suivantes sont utilisées pour effectuer une exploration de données de base avec MariaDB Server :

  1. Le io fournit les principales fonctionnalités de Python pour gérer différents types d'E/S.
  2. Matplotlib est une bibliothèque de traçage 2D Python permettant de produire une variété de graphiques sur différentes plates-formes.
  3. Pandas offre des structures de données et des opérations pour manipuler des tableaux numériques et des séries chronologiques.
  4. Le pymysql Le package contient une bibliothèque cliente en Python pur pour accéder à MariaDB Server.

Commençons par nous connecter au serveur de base de données via 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()

Une fois connecté au serveur MariaDB, les images de la base de données peuvent être facilement accessibles et gérées. Toutes les images utilisées pour l'entraînement et le test du modèle sont stockées dans une seule table (tf_images). La manière dont l'image sera utilisée est définie dans la table d'utilisation des images (img_use). Dans ce cas, la table n'a que deux tuples, formation et test :

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

Rôle d'image Description
Formation L'image est utilisée pour entraîner le modèle
Test L'image est utilisée pour tester le modèle

Le mappage d'attributs cibles sur des objets d'image dans un jeu de données est appelé étiquetage. La définition de l'étiquette varie d'une application à l'autre, et il n'y a guère de définition universelle de ce qu'est une étiquette "correcte" pour une image. L'utilisation d'une base de données relationnelle simplifie le processus d'étiquetage et permet de passer d'étiquettes à grain grossier à des étiquettes à grain fin.

Dans cet exemple, en utilisant le tableau "catégories", une image n'a qu'un seul libellé (grossier) comme indiqué ci-dessous :

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Nom de classe
0 T-shirt/haut
1 Pantalon
2 Pull
3 Robe
4 Manteau
5 Sandale
6 Chemise
7 Basket
8 Sac
9 Bottines

Les images table contient toutes les images à utiliser pour la formation et les tests. Chaque image a un identifiant unique, une étiquette et si elle est utilisée pour la formation ou le test du modèle. Les images sont stockées dans leur format PNG d'origine et sous forme de tenseurs à virgule flottante prétraités. Une simple jointure interne sur cette table peut être exécutée pour afficher les représentations de l'image (format vectoriel ou png), son étiquette et l'utilisation prévue.

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) )

Nom de classe Utilisation des images Représentation vectorielle Image PNG
Bottines Formation b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/haut Formation b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/haut Formation b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Vêtements Formation b"\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/haut Formation b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

L'utilisation d'instructions SQL facilite le processus d'exploration des données. Par exemple, l'instruction SQL ci-dessous montre la distribution des images par étiquette d'image.

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)

Libellé de l'image Images de formation Test d'images
0 Bottines 6000 1000
1 Sac 6000 1000
2 Manteau 6000 1000
3 Robe 6000 1000
4 Pull 6000 1000
5 Sandale 6000 1000
6 Chemise 6000 1000
7 Basket 6000 1000
8 T-shirt/haut 6000 1000
9 Pantalon 6000 1000

Il y a 6 000 images pour chaque étiquette dans l'ensemble d'apprentissage et 1 000 images pour chaque étiquette dans l'ensemble de test. Il y a 60 000 images au total dans l'ensemble d'apprentissage et 10 000 images au total dans l'ensemble de test.

Les vêtements individuels sont stockés sous forme d'images à faible résolution. Étant donné que la base de données peut stocker efficacement ces images sous forme de grands objets binaires (BLOB), il est très facile de récupérer une image à l'aide de SQL, comme indiqué ci-dessous :

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)

ci-dessus :image de l'ensemble de données fashion_mnist

Cette première partie de la série de blogs a démontré comment une base de données relationnelle peut être utilisée pour stocker et effectuer l'exploration de données d'images à l'aide de simples instructions SQL. La partie 2 montrera comment formater les données dans les structures de données nécessaires à TensorFlow, puis comment former le modèle, effectuer des prédictions (c'est-à-dire identifier des images) et stocker ces prédictions dans la base de données pour une analyse ou une utilisation plus approfondie.

Licence MIT

L'ensemble de données Fashion MNIST (fashion_mnist) exploité par ce blog est sous licence MIT.

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

L'autorisation est accordée, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans s'y limiter, les droits d'utiliser, de copier, de modifier, de fusionner, de publier, de distribuer, de sous-licencier et/ou de vendre des copies du Logiciel, et d'autoriser les personnes à qui le Logiciel est fourni à le faire, sous réserve des conditions suivantes :

L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du Logiciel.

LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS, MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS, LES AUTEURS OU LES DÉTENTEURS DU COPYRIGHT NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.

Références

Convertir sa propre image en image du MNIST
matplotlib :tutoriel sur les images
5 façons dont l'IA transforme l'expérience client
La numérisation réinvente l'entreprise
Qu'est-ce que la classification des images ?
Introduction à Python Bibliothèque d'apprentissage profond TensorFlow