sql >> Database >  >> RDS >> MariaDB

Deel 1:Beeldclassificatie met MariaDB Server en TensorFlow - een overzicht

Geavanceerde bedrijven wenden zich tot kunstmatige intelligentie en machine learning om de uitdagingen van het nieuwe tijdperk van digitale bedrijfstransformatie aan te gaan.

Volgens Gartner:"78 procent van de senior bedrijfsleiders zegt dat digitalisering een bedrijfsprioriteit is en 79% van de bedrijfsstrategen zegt dat het hun bedrijf opnieuw uitvindt en op nieuwe manieren nieuwe inkomstenstromen creëert ".

Bron :Gartner, Versnel uw digitale bedrijfstransformatie, 15 januari 2019

Maar tot nu toe was digitale verandering een uitdaging. De complexiteit van de tools, architectuur en omgeving creëert barrières voor het gebruik van machine learning. Het gebruik van relationeel gegevensbeheer op basis van SQL om gegevens van afbeeldingen op te slaan en uit te voeren, vermindert de barrières en ontgrendelt de voordelen van machine learning.

Deze blogpost demonstreert het gebruik van populaire open source-tools MariaDB Server, TensorFlow Python-bibliotheek en Keras neurale netwerkbibliotheek om de complexiteit van het implementeren van machine learning te vereenvoudigen. Door deze technologieën te gebruiken, kunt u uw time-to-market versnellen door gegevens efficiënt te openen, bij te werken, in te voegen, te manipuleren en te wijzigen.

Machineleren op relationele databases

De kern van de digitale bedrijfstransformatie die mogelijk wordt gemaakt door machine learning, zijn technologieën zoals chatbots, aanbevelingsengines, gepersonaliseerde communicatie, intelligente advertentietargeting en beeldclassificatie.

Beeldclassificatie heeft een breed scala aan gebruiksscenario's, van wetshandhavers en het leger tot auto's in de detailhandel en zelfrijdende auto's. Indien geïmplementeerd met machine learning, kan beeldclassificatie realtime business intelligence bieden. Het doel van beeldclassificatie is het identificeren en weergeven, als een uniek grijsniveau (of kleur), de kenmerken die in een beeld voorkomen. De meest gebruikte hulpmiddelen voor beeldclassificatie zijn TensorFlow en Keras.

TensorFlow is een Python-bibliotheek voor snel numeriek computergebruik, gemaakt en vrijgegeven door Google. MariaDB Server is een open source relationele database met een SQL-interface voor toegang tot en beheer van gegevens. Keras is een open-source neurale netwerkbibliotheek geschreven in Python.

In dit bericht ontdekt u hoe u beeldclassificatie kunt testen door interoperabiliteit tussen TensorFlow en MariaDB Server mogelijk te maken. Dit bericht maakt gebruik van de Fashion MNIST-dataset die 70.000 grijswaardenafbeeldingen in 10 categorieën bevat. De afbeeldingen tonen individuele kledingstukken in lage resolutie (28 bij 28 pixels).

Het laden en voorbereiden van de gegevens in MariaDB Server valt buiten het bestek van dit bericht. De volgende tabellen zijn vooraf gemaakt en gevuld met de Fashion MNIST-dataset.

Afbeeldingen Afbeeldingsrol Afbeeldingslabel
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)
) MOTOR=InnoDB STANDAARD 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 STANDAARD 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

Gegevensverkenning

De volgende bibliotheken worden gebruikt om basisgegevensverkenning met MariaDB Server uit te voeren:

  1. De io module biedt de belangrijkste faciliteiten van Python voor het omgaan met verschillende soorten I/O.
  2. Matplotlib is een Python 2D-plotbibliotheek om een ​​verscheidenheid aan grafieken op verschillende platforms te produceren.
  3. Panda's biedt datastructuren en bewerkingen voor het manipuleren van numerieke tabellen en tijdreeksen.
  4. De pymysql pakket bevat een pure Python-clientbibliotheek voor toegang tot MariaDB Server.

Laten we beginnen door verbinding te maken met de databaseserver 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()

Eenmaal verbonden met de MariaDB-server, kunnen de afbeeldingen in de database eenvoudig worden geopend en beheerd. Alle afbeeldingen die worden gebruikt voor het trainen en testen van het model worden opgeslagen in een enkele tabel (tf_images). Hoe de afbeelding zal worden gebruikt, wordt gedefinieerd in de tabel met afbeeldingsgebruik (img_use). In dit geval heeft de tabel slechts twee tuples, training en testen:

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

Afbeeldingsrol Beschrijving
Training De afbeelding wordt gebruikt om het model te trainen
Testen De afbeelding wordt gebruikt om het model te testen

Het toewijzen van doelattributen aan afbeeldingsobjecten in een dataset wordt labelen genoemd. De labeldefinitie varieert van toepassing tot toepassing en er is nauwelijks een universele definitie van wat een "juist" label is voor een afbeelding. Het gebruik van een relationele database vereenvoudigt het etiketteringsproces en biedt een manier om van grof naar fijnkorrelig etiketten te gaan.

In dit voorbeeld, met behulp van de tabel 'categorieën', heeft een afbeelding slechts één label (grof) zoals hieronder weergegeven:

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Klassenaam
0 T-shirt/top
1 Broek
2 Trui
3 Jurk
4 Jas
5 Sandaal
6 Overhemd
7 Sneaker
8 Tas
9 Enkellaars

De afbeeldingen tabel bevat alle afbeeldingen die moeten worden gebruikt voor training en testen. Elke afbeelding heeft een unieke id, een label en of deze wordt gebruikt voor het trainen of testen van het model. De afbeeldingen worden opgeslagen in hun originele PNG-formaat en als voorbewerkte drijvende-komma-tensoren. Een eenvoudige inner join op deze tabel kan worden uitgevoerd om de afbeeldingsrepresentaties (vector- of png-indeling), het label en het beoogde gebruik weer te geven.

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

Klassenaam Afbeelding gebruiken Vectorweergave Afbeelding PNG
Enkellaars Training b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Training b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Training b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Jurk Training b”\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Training b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

Het gebruik van SQL-instructies maakt het gegevensverkenningsproces eenvoudig. De onderstaande SQL-instructie toont bijvoorbeeld de afbeeldingsdistributie per afbeeldingslabel.

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)

Afbeeldingslabel Trainingsafbeeldingen Afbeeldingen testen
0 Enkellaars 6000 1000
1 Tas 6000 1000
2 Jas 6000 1000
3 Jurk 6000 1000
4 Trui 6000 1000
5 Sandaal 6000 1000
6 Overhemd 6000 1000
7 Sneaker 6000 1000
8 T-shirt/top 6000 1000
9 Broek 6000 1000

Er zijn 6.000 afbeeldingen voor elk label in de trainingsset en 1.000 afbeeldingen voor elk label in de testset. Er zijn in totaal 60.000 afbeeldingen in de trainingsset en in totaal 10.000 afbeeldingen in de testset.

Individuele kledingstukken worden opgeslagen als afbeeldingen met een lage resolutie. Omdat de database die afbeeldingen efficiënt kan opslaan als Binary Large OBjects (BLOB's), is het heel eenvoudig om een ​​afbeelding op te halen met SQL, zoals hieronder weergegeven:

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)

hierboven:afbeelding uit dataset fashion_mnist

Dit eerste deel van de blogreeks heeft laten zien hoe een relationele database kan worden gebruikt om gegevens van afbeeldingen op te slaan en uit te voeren met behulp van eenvoudige SQL-instructies. Deel 2 laat zien hoe de gegevens kunnen worden geformatteerd in de gegevensstructuren die TensorFlow nodig heeft, en vervolgens hoe het model te trainen, voorspellingen uit te voeren (d.w.z. afbeeldingen te identificeren) en die voorspellingen weer op te slaan in de database voor verdere analyse of gebruik.

MIT-licentie

De dataset Fashion MNIST (fashion_mnist) die door deze blog wordt gebruikt, valt onder de MIT-licentie.

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

Hierbij wordt kosteloos toestemming verleend aan eenieder die een kopie van deze software en bijbehorende documentatiebestanden (de "Software") verkrijgt, om zonder beperking in de Software te handelen, inclusief maar niet beperkt tot de rechten om de Software te gebruiken, kopiëren, wijzigen, samenvoegen, publiceren, distribueren, in sublicentie te geven en/of te verkopen, en om personen aan wie de Software wordt geleverd toe te staan ​​dit te doen, met inachtneming van de volgende voorwaarden:

De bovenstaande copyrightkennisgeving en deze toestemmingskennisgeving zullen worden opgenomen in alle kopieën of substantiële delen van de Software.

DE SOFTWARE WORDT GELEVERD "AS IS", ZONDER ENIGE GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUK. IN GEEN GEVAL ZULLEN DE AUTEURS OF HOUDERS VAN HET AUTEURSRECHT AANSPRAKELIJK ZIJN VOOR ENIGE CLAIM, SCHADE OF ANDERE AANSPRAKELIJKHEID, HETZIJ IN EEN OVEREENKOMST, ONRECHTMATIGE OF ANDERE, VOORTVLOEIENDE UIT, UIT OF IN VERBAND MET DE SOFTWARE OF HET GEBRUIK IN OF DE ANDERE HANDELINGEN SOFTWARE.

Referenties

Converteer eigen afbeelding naar de afbeelding van MNIST
matplotlib:zelfstudie afbeeldingen
5 manieren waarop AI de klantervaring transformeert
Digitalisering vindt het bedrijfsleven opnieuw uit
Wat is afbeeldingsclassificatie?
Inleiding tot de Python Deep Learning-bibliotheek TensorFlow


  1. Logboekbufferspoelingen begrijpen

  2. Een aangepaste ORDER BY-volgorde definiëren in mySQL

  3. 8 manieren om dagen aan een datum toe te voegen in MariaDB

  4. PostgreSQL-procesnamen op Solaris