MariaDB
 sql >> Database >  >> RDS >> MariaDB

Parte 1:Classificazione delle immagini con MariaDB Server e TensorFlow:una panoramica

Le aziende all'avanguardia si stanno rivolgendo all'intelligenza artificiale e all'apprendimento automatico per affrontare le sfide della nuova era della trasformazione del business digitale.

Secondo Gartner:"L'87% dei dirigenti aziendali senior afferma che la digitalizzazione è una priorità aziendale e il 79% degli strateghi aziendali afferma che sta reinventando il proprio business, creando nuovi flussi di entrate in nuovi modi “.

Fonte :Gartner, Accelera la tua trasformazione del business digitale, 15 gennaio 2019

Ma finora, il cambiamento digitale è stato impegnativo. La complessità degli strumenti, dell'architettura e dell'ambiente crea ostacoli all'utilizzo dell'apprendimento automatico. L'utilizzo della gestione dei dati relazionali basata su SQL per archiviare ed eseguire l'esplorazione dei dati delle immagini riduce le barriere e sblocca i vantaggi dell'apprendimento automatico.

Questo post del blog dimostra l'utilizzo di popolari strumenti open source MariaDB Server, la libreria TensorFlow Python e la libreria di rete neurale Keras per semplificare la complessità dell'implementazione dell'apprendimento automatico. L'utilizzo di queste tecnologie può aiutarti ad accelerare il time-to-market accedendo, aggiornando, inserendo, manipolando e modificando i dati in modo efficiente.

Apprendimento automatico su database relazionali

Al centro della trasformazione del business digitale resa possibile dall'apprendimento automatico ci sono tecnologie come chatbot, motori di raccomandazione, comunicazioni personalizzate, targeting pubblicitario intelligente e classificazione delle immagini.

La classificazione delle immagini ha un'ampia varietà di casi d'uso, dalle forze dell'ordine e dall'esercito, alle auto al dettaglio e a guida autonoma. Se implementata con l'apprendimento automatico, la classificazione delle immagini può fornire business intelligence in tempo reale. L'obiettivo della classificazione delle immagini è identificare e ritrarre, come un unico livello di grigio (o colore), le caratteristiche che si verificano in un'immagine. Gli strumenti più comuni per la classificazione delle immagini sono TensorFlow e Keras.

TensorFlow è una libreria Python per il calcolo numerico veloce creata e rilasciata da Google. MariaDB Server è un database relazionale open source con un'interfaccia SQL per l'accesso e la gestione dei dati. Keras è una libreria di rete neurale open source scritta in Python.

In questo post scoprirai come testare la classificazione delle immagini abilitando l'interoperabilità tra TensorFlow e MariaDB Server. Questo post utilizza il set di dati Fashion MNIST che contiene 70.000 immagini in scala di grigi in 10 categorie. Le immagini mostrano singoli capi di abbigliamento a bassa risoluzione (28 x 28 pixel).

Il caricamento e la preparazione dei dati in MariaDB Server non rientra nell'ambito di questo post. Le seguenti tabelle sono state create e popolate in anticipo con il set di dati Fashion MNIST.

Immagini Ruolo immagine Etichetta immagine
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)
) MOTORE=InnoDB DEFAULT CHARSET=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)
) MOTORE=InnoDB AUTO_INCREMENT=3 CHARSET PREDEFINITO=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

Esplorazione dei dati

Le seguenti librerie vengono utilizzate per eseguire l'esplorazione dei dati di base con MariaDB Server:

  1. L'io fornisce le principali funzionalità di Python per gestire vari tipi di I/O.
  2. Matplotlib è una libreria di plottaggio Python 2D per produrre una varietà di grafici su tutte le piattaforme.
  3. Panda offre strutture dati e operazioni per manipolare tabelle numeriche e serie temporali.
  4. Il pymysql il pacchetto contiene una libreria client in puro Python per accedere al server MariaDB.

Iniziamo connettendoci al server del database tramite 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 volta connesso al server MariaDB, le immagini nel database sono facilmente accessibili e gestibili. Tutte le immagini utilizzate per il training e il test del modello sono archiviate in un'unica tabella (tf_images). La modalità di utilizzo dell'immagine è definita nella tabella di utilizzo dell'immagine (img_use). In questo caso, la tabella ha solo due tuple, training e testing:

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

Ruolo immagine Descrizione
Formazione L'immagine viene utilizzata per addestrare il modello
Test L'immagine viene utilizzata per testare il modello

La mappatura degli attributi di destinazione agli oggetti immagine in un set di dati è chiamata etichettatura. La definizione dell'etichetta varia da applicazione ad applicazione e difficilmente esiste una definizione universale di cosa sia un'etichetta "corretta" per un'immagine. L'utilizzo di un database relazionale semplifica il processo di etichettatura e fornisce un modo per passare dalle etichette a grana grossa a quelle a grana fine.

In questo esempio, utilizzando la tabella "categorie", un'immagine ha una sola etichetta (grossolana) come mostrato di seguito:

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Nome classe
0 T-shirt/top
1 Pantaloni
2 Pullover
3 Vestito
4 Cappotto
5 Sandalo
6 Camicia
7 Scarpe da ginnastica
8 Borsa
9 Stivaletto

Le immagini la tabella contiene tutte le immagini da utilizzare per la formazione e il test. Ogni immagine ha un identificatore univoco, un'etichetta e se viene utilizzata per l'addestramento o il test del modello. Le immagini vengono archiviate nel loro formato PNG originale e come tensori a virgola mobile pre-elaborati. È possibile eseguire un semplice inner join su questa tabella per visualizzare le rappresentazioni dell'immagine (formato vettoriale o png), la sua etichetta e l'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) )

Nome classe Uso dell'immagine Rappresentazione vettoriale Immagine PNG
Stivaletto Formazione b'\x80\x02cnumpy.core.multiarray\n_reconstruct... b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Formazione b'\x80\x02cnumpy.core.multiarray\n_reconstruct... b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Formazione b'\x80\x02cnumpy.core.multiarray\n_reconstruct... b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Vestito Formazione b"\x80\x02cnumpy.core.multiarray\n_reconstruct... b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Formazione b'\x80\x02cnumpy.core.multiarray\n_reconstruct... b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

L'utilizzo di istruzioni SQL semplifica il processo di esplorazione dei dati. Ad esempio, l'istruzione SQL seguente mostra la distribuzione dell'immagine in base all'etichetta dell'immagine.

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)

Etichetta immagine Immagini di allenamento Test delle immagini
0 Stivaletto 6000 1000
1 Borsa 6000 1000
2 Cappotto 6000 1000
3 Vestito 6000 1000
4 Pullover 6000 1000
5 Sandalo 6000 1000
6 Camicia 6000 1000
7 Scarpe da ginnastica 6000 1000
8 T-shirt/top 6000 1000
9 Pantaloni 6000 1000

Ci sono 6.000 immagini per ogni etichetta nel set di addestramento e 1.000 immagini per ogni etichetta nel set di test. Ci sono 60.000 immagini totali nel set di addestramento e 10.000 immagini totali nel set di prova.

I singoli capi di abbigliamento vengono archiviati come immagini a bassa risoluzione. Poiché il database può archiviare quelle immagini in modo efficiente come Binary Large OBjects (BLOB), è molto facile recuperare un'immagine utilizzando SQL, come mostrato di seguito:

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)

sopra:immagine dal set di dati fashion_mnist

Questa prima parte della serie di blog ha dimostrato come un database relazionale può essere utilizzato per archiviare ed eseguire l'esplorazione dei dati di immagini utilizzando semplici istruzioni SQL. La parte 2 mostrerà come formattare i dati nelle strutture dati necessarie a TensorFlow, quindi come addestrare il modello, eseguire previsioni (ovvero identificare immagini) e archiviare tali previsioni nel database per ulteriori analisi o utilizzo.

Licenza MIT

Il set di dati Fashion MNIST (fashion_mnist) sfruttato da questo blog è concesso in licenza con licenza MIT.

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

Il permesso è concesso, gratuitamente, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), di trattare il Software senza restrizioni, inclusi, a titolo esemplificativo, i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software e di consentire alle persone a cui il Software viene fornito di farlo, alle seguenti condizioni:

L'avviso di copyright di cui sopra e questo avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.

IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA ALCUN TIPO DI GARANZIA, ESPRESSA O IMPLICITA, INCLUSE MA NON LIMITATE ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI PER ALCUN RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, ILLECITO O ALTRO, DERIVANTE DA, DERIVANTE DA O IN COLLEGAMENTO CON IL SOFTWARE O L'UTILIZZO O ALTRI CONTRATTI NEL SOFTWARE.

Riferimenti

Converti la propria immagine nell'immagine di MNIST
matplotlib:tutorial sull'immagine
5 modi in cui l'IA sta trasformando l'esperienza del cliente
La digitalizzazione sta reinventando il business
Cos'è la classificazione delle immagini?
Introduzione a Python Libreria di Deep Learning TensorFlow