MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Teil 1:Bildklassifizierung mit MariaDB Server und TensorFlow – ein Überblick

Modernste Unternehmen wenden sich der künstlichen Intelligenz und dem maschinellen Lernen zu, um die Herausforderungen der neuen Ära der digitalen Geschäftstransformation zu meistern.

Laut Gartner:„Siebenundachtzig Prozent der Führungskräfte in der Wirtschaft geben an, dass die Digitalisierung eine Unternehmenspriorität ist, und 79 % der Unternehmensstrategen sagen, dass sie ihr Geschäft neu erfindet – neue Einnahmequellen auf neue Weise erschließt “.

Quelle :Gartner, Beschleunigen Sie Ihre digitale Geschäftstransformation, 15. Januar 2019

Doch bisher war der digitale Wandel eine Herausforderung. Die Komplexität der Tools, der Architektur und der Umgebung schafft Hindernisse für die Verwendung von maschinellem Lernen. Die Verwendung von SQL-basierter relationaler Datenverwaltung zum Speichern und Durchführen von Datenexplorationen von Bildern reduziert die Barrieren und erschließt die Vorteile des maschinellen Lernens.

Dieser Blogbeitrag demonstriert die Verwendung der beliebten Open-Source-Tools MariaDB Server, der TensorFlow-Python-Bibliothek und der neuronalen Netzwerkbibliothek von Keras, um die Komplexität der Implementierung von maschinellem Lernen zu vereinfachen. Durch den Einsatz dieser Technologien können Sie Ihre Markteinführungszeit verkürzen, indem Sie effizient auf Daten zugreifen, diese aktualisieren, einfügen, manipulieren und ändern.

Maschinelles Lernen auf relationalen Datenbanken

Im Mittelpunkt der durch maschinelles Lernen ermöglichten digitalen Geschäftstransformation stehen Technologien wie Chatbots, Empfehlungsmaschinen, personalisierte Kommunikation, intelligentes Anzeigen-Targeting und Bildklassifizierung.

Die Bildklassifizierung hat eine Vielzahl von Anwendungsfällen – von der Strafverfolgung und dem Militär bis hin zum Einzelhandel und selbstfahrenden Autos. Bei der Implementierung mit maschinellem Lernen kann die Bildklassifizierung Business Intelligence in Echtzeit bereitstellen. Das Ziel der Bildklassifizierung besteht darin, die in einem Bild vorkommenden Merkmale zu identifizieren und als eindeutige Graustufe (oder Farbe) darzustellen. Die gängigsten Tools zur Bildklassifizierung sind TensorFlow und Keras.

TensorFlow ist eine Python-Bibliothek für schnelle numerische Berechnungen, die von Google erstellt und veröffentlicht wurde. MariaDB Server ist eine relationale Open-Source-Datenbank mit einer SQL-Schnittstelle für den Zugriff auf und die Verwaltung von Daten. Keras ist eine in Python geschriebene Open-Source-Bibliothek für neuronale Netzwerke.

In diesem Beitrag erfahren Sie, wie Sie die Bildklassifizierung testen, indem Sie die Interoperabilität zwischen TensorFlow und MariaDB Server aktivieren. Dieser Beitrag verwendet den Fashion MNIST-Datensatz, der 70.000 Graustufenbilder in 10 Kategorien enthält. Die Bilder zeigen einzelne Kleidungsstücke in niedriger Auflösung (28 x 28 Pixel).

Das Laden und Vorbereiten der Daten in MariaDB Server ist nicht Gegenstand dieses Beitrags. Die folgenden Tabellen wurden erstellt und im Voraus mit dem Fashion MNIST-Datensatz gefüllt.

Bilder Bildrolle Bildlabel
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)
) ENGINE=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)
) 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

Datenexploration

Die folgenden Bibliotheken werden verwendet, um grundlegende Datenanalysen mit MariaDB Server durchzuführen:

  1. Das io -Modul bietet Pythons Hauptfunktionen für den Umgang mit verschiedenen Arten von E/A.
  2. Matplotlib ist eine Python-2D-Plotbibliothek, um eine Vielzahl von Diagrammen plattformübergreifend zu erstellen.
  3. Pandas bietet Datenstrukturen und Operationen zur Manipulation von numerischen Tabellen und Zeitreihen.
  4. Die pymysql Paket enthält eine reine Python-Client-Bibliothek für den Zugriff auf MariaDB Server.

Beginnen wir damit, uns über Python mit dem Datenbankserver zu verbinden:

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

Sobald die Verbindung zum MariaDB-Server hergestellt ist, können die Bilder in der Datenbank einfach aufgerufen und verwaltet werden. Alle zum Trainieren und Testen des Modells verwendeten Bilder werden in einer einzigen Tabelle (tf_images) gespeichert. Wie das Bild verwendet wird, wird in der Bildverwendungstabelle (img_use) definiert. In diesem Fall hat die Tabelle nur zwei Tupel, Training und Testing:

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

Bildrolle Beschreibung
Schulung Das Bild wird zum Trainieren des Modells verwendet
Testen Das Bild wird zum Testen des Modells verwendet

Das Zuordnen von Zielattributen zu Bildobjekten in einem Datensatz wird als Labeling bezeichnet. Die Bezeichnungsdefinition variiert von Anwendung zu Anwendung, und es gibt kaum eine universelle Definition dessen, was eine „richtige“ Bezeichnung für ein Bild ist. Die Verwendung einer relationalen Datenbank vereinfacht den Beschriftungsprozess und bietet eine Möglichkeit, von grobkörnigen zu feinkörnigen Beschriftungen zu wechseln.

In diesem Beispiel mit der Tabelle „Kategorien“ hat ein Bild nur ein Label (grob), wie unten gezeigt:

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Klassenname
0 T-Shirt/Oberteil
1 Hose
2 Pullover
3 Kleid
4 Mantel
5 Sandale
6 Hemd
7 Sneaker
8 Tasche
9 Stiefelette

Die Bilder Tabelle enthält alle Bilder, die für Training und Tests verwendet werden sollen. Jedes Bild hat eine eindeutige Kennung, ein Label und ob es zum Trainieren oder Testen des Modells verwendet wird. Die Bilder werden in ihrem ursprünglichen PNG-Format und als vorverarbeitete Fließkomma-Tensoren gespeichert. Ein einfacher innerer Join auf dieser Tabelle kann ausgeführt werden, um die Bilddarstellungen (Vektor- oder PNG-Format), ihre Beschriftung und die beabsichtigte Verwendung anzuzeigen.

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

Klassenname Bildnutzung Vektordarstellung Bild-PNG
Stiefelette Schulung b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-Shirt/Oberteil Schulung b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-Shirt/Oberteil Schulung b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Kleid Schulung b”\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-Shirt/Oberteil Schulung b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

Die Verwendung von SQL-Anweisungen vereinfacht den Datenexplorationsprozess. Die folgende SQL-Anweisung zeigt beispielsweise die Bildverteilung nach Bildbezeichnung.

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)

Bildlabel Schulungsbilder Bilder testen
0 Stiefelette 6000 1000
1 Tasche 6000 1000
2 Mantel 6000 1000
3 Kleid 6000 1000
4 Pullover 6000 1000
5 Sandale 6000 1000
6 Hemd 6000 1000
7 Sneaker 6000 1000
8 T-Shirt/Oberteil 6000 1000
9 Hose 6000 1000

Es gibt 6.000 Bilder für jedes Etikett im Trainingssatz und 1.000 Bilder für jedes Etikett im Testsatz. Das Trainingsset enthält insgesamt 60.000 Bilder und das Testset insgesamt 10.000 Bilder.

Einzelne Kleidungsstücke werden als Bilder mit niedriger Auflösung gespeichert. Da die Datenbank diese Bilder effizient als Binary Large OBjects (BLOBs) speichern kann, ist es sehr einfach, ein Bild mit SQL abzurufen, wie unten gezeigt:

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)

oben:Bild aus dem fashion_mnist-Datensatz

Dieser erste Teil der Blogserie hat gezeigt, wie eine relationale Datenbank zum Speichern und Durchführen von Datenexplorationen von Bildern mit einfachen SQL-Anweisungen verwendet werden kann. Teil 2 zeigt, wie die Daten in die von TensorFlow benötigten Datenstrukturen formatiert und dann das Modell trainiert, Vorhersagen durchgeführt (d. h. Bilder identifiziert) und diese Vorhersagen zur weiteren Analyse oder Verwendung wieder in der Datenbank gespeichert werden.

MIT-Lizenz

Der von diesem Blog genutzte Dataset Fashion MNIST (fashion_mnist) ist unter der MIT-Lizenz lizenziert.

Die MIT-Lizenz (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com

Hiermit wird jeder Person, die eine Kopie dieser Software und der dazugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, uneingeschränkt mit der Software zu handeln, einschließlich, aber nicht beschränkt auf die Rechte, Kopien der Software zu verwenden, zu kopieren, zu modifizieren, zusammenzuführen, zu veröffentlichen, zu verteilen, Unterlizenzen zu vergeben und/oder Kopien der Software zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:

Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.

DIE SOFTWARE WIRD OHNE MÄNGELGEWÄHR BEREITGESTELLT, OHNE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF GEWÄHRLEISTUNGEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG VON RECHTEN DRITTER. DIE AUTOREN ODER URHEBERRECHTSINHABER SIND IN KEINEM FALL HAFTBAR FÜR ANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNG, OB IN EINER VERTRAGSAKTION, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDLUNGEN IN DER SOFTWARE ERGEBEN SOFTWARE.

Referenzen

Konvertieren Sie Ihr eigenes Bild in das Bild von MNIST
matplotlib:Bild-Tutorial
5 Wege, wie KI das Kundenerlebnis verändert
Digitalisierung erfindet das Geschäft neu
Was ist Bildklassifizierung?
Einführung in Python Deep-Learning-Bibliothek TensorFlow