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

Del 1:Billedklassificering med MariaDB Server og TensorFlow – en oversigt

Avancerede virksomheder henvender sig til kunstig intelligens og maskinlæring for at imødekomme udfordringerne i den nye digitale virksomhedstransformationsæra.

Ifølge Gartner:"Syvogfirs procent af ledende virksomhedsledere siger, at digitalisering er en virksomheds prioritet, og 79% af virksomhedens strateger siger, at det genopfinder deres forretning – skaber nye indtægtsstrømme på nye måder “.

Kilde :Gartner, Speed ​​Up Your Digital Business Transformation, 15. januar 2019

Men hidtil har den digitale forandring været udfordrende. Kompleksiteten af ​​værktøjerne, arkitekturen og miljøet skaber barrierer for at bruge maskinlæring. Brug af SQL-baseret relationel datastyring til at gemme og udføre dataudforskning af billeder reducerer barriererne og låser op for fordelene ved maskinlæring.

Dette blogindlæg demonstrerer brugen af ​​populære open source-værktøjer MariaDB Server, TensorFlow Python-biblioteket og Keras neurale netværksbibliotek for at forenkle kompleksiteten ved implementering af maskinlæring. Brug af disse teknologier kan hjælpe dig med at fremskynde din time-to-market ved effektivt at få adgang til, opdatere, indsætte, manipulere og ændre data.

Machine Learning på relationelle databaser

I centrum af den digitale forretningstransformation, der er muliggjort af maskinlæring, er teknologier såsom chatbots, anbefalingsmotorer, personlig kommunikation, intelligent annoncemålretning og billedklassificering.

Billedklassificering har en bred vifte af brugssager - fra retshåndhævelse og militæret til detail- og selvkørende biler. Når det implementeres med maskinlæring, kan billedklassificering give forretningsintelligens i realtid. Formålet med billedklassificering er at identificere og skildre, som et unikt gråt niveau (eller farve), de funktioner, der forekommer i et billede. De mest almindelige værktøjer til billedklassificering er TensorFlow og Keras.

TensorFlow er et Python-bibliotek til hurtig numerisk databehandling skabt og udgivet af Google. MariaDB Server er en open source relationsdatabase med en SQL-grænseflade til at få adgang til og administrere data. Keras er et open source neuralt netværksbibliotek skrevet i Python.

I dette indlæg vil du opdage, hvordan du tester billedklassificering ved at aktivere interoperabilitet mellem TensorFlow og MariaDB Server. Dette indlæg bruger Fashion MNIST-datasættet, som indeholder 70.000 gråtonebilleder i 10 kategorier. Billederne viser individuelle beklædningsgenstande i lav opløsning (28 x 28 pixels).

Indlæsning og klargøring af data til MariaDB Server er uden for dette indlægs rammer. Følgende tabeller er blevet oprettet og udfyldt på forhånd med Fashion MNIST-datasættet.

Billeder Billedrolle Billedetiket
CREATE TABLE tf_images (
 img_label tinyint(4),
 img_vector blob,
 img_idx    int(10) unsigned NOT NULL,
 img_blob   blob,
 img_use  )  tinyint /> ) 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

Dataudforskning

Følgende biblioteker bruges til at udføre grundlæggende dataudforskning med MariaDB Server:

  1. io modul giver Pythons hovedfaciliteter til at håndtere forskellige typer I/O.
  2. Matplotlib er et Python 2D-plotbibliotek til at producere en række grafer på tværs af platforme.
  3. Pandaer tilbyder datastrukturer og operationer til at manipulere numeriske tabeller og tidsserier.
  4. pymysql pakken indeholder et rent Python-klientbibliotek for at få adgang til MariaDB Server.

Lad os starte med at oprette forbindelse til databaseserveren gennem 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()

Når først oprettet forbindelse til MariaDB-serveren, kan billederne i databasen nemt tilgås og administreres. Alle billeder, der bruges til træning og test af modellen, er gemt i en enkelt tabel (tf_images). Hvordan billedet skal bruges er defineret i billedbrugstabellen (img_use). I dette tilfælde har bordet kun to tuples, træning og test:

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

Billedrolle Beskrivelse
Uddannelse Billedet bruges til træning af modellen
Test Billedet bruges til at teste modellen

Kortlægning af målattributter til billedobjekter i et datasæt kaldes mærkning. Etiketdefinitionen varierer fra anvendelse til anvendelse, og der er næppe en universel definition af, hvad en "korrekt" etiket er for et billede. Brug af en relationsdatabase forenkler mærkningsprocessen og giver mulighed for at gå fra grove til finkornede etiketter.

I dette eksempel, ved at bruge "kategorier"-tabellen, har et billede kun én etiket (grov) som vist nedenfor:

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Klassenavn
0 T-shirt/top
1 Bukse
2 trøje
3 Kjole
4 Frakke
5 Sandal
6 skjorte
7 Sneaker
8 Taske
9 Ankelstøvle

billederne tabel indeholder alle de billeder, der skal bruges til træning og test. Hvert billede har en unik identifikator, en etiket, og om det bruges til træning eller test af modellen. Billederne gemmes i deres originale PNG-format og som forbehandlede flydende komma-tensorer. En simpel indre joinforbindelse på denne tabel kan udføres for at vise billedrepræsentationerne (vektor- eller png-format), dens etiket og den tilsigtede brug.

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

Klassenavn Billedbrug Vektorrepræsentation Image PNG
Ankelstøvle Uddannelse b’\x80\x02cnumpy.core.multiarray\n_reconstruct... b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Uddannelse b’\x80\x02cnumpy.core.multiarray\n_reconstruct... b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Uddannelse b’\x80\x02cnumpy.core.multiarray\n_reconstruct... b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Kjole Uddannelse b”\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Uddannelse b’\x80\x02cnumpy.core.multiarray\n_reconstruct... b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

Brug af SQL-sætninger gør dataudforskningsprocessen nem. For eksempel viser SQL-sætningen nedenfor billedfordelingen efter billedetiket.

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)

Billedetiket Træningsbilleder Test af billeder
0 Ankelstøvle 6000 1000
1 Taske 6000 1000
2 Frakke 6000 1000
3 Kjole 6000 1000
4 trøje 6000 1000
5 Sandal 6000 1000
6 skjorte 6000 1000
7 Sneaker 6000 1000
8 T-shirt/top 6000 1000
9 Bukse 6000 1000

Der er 6.000 billeder for hver etiket i træningssættet og 1.000 billeder for hver etiket i testsættet. Der er 60.000 billeder i alt i træningssættet og 10.000 billeder i alt i testsættet.

Individuelle beklædningsgenstande opbevares som billeder i lav opløsning. Da databasen kan gemme disse billeder effektivt som binære store objekter (BLOB'er), er det meget nemt at hente et billede ved hjælp af SQL, som vist nedenfor:

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)

ovenfor:billede fra fashion_mnist-datasæt

Denne første del af blogserien har demonstreret, hvordan en relationsdatabase kan bruges til at gemme og udføre dataudforskning af billeder ved hjælp af simple SQL-sætninger. Del 2 vil vise, hvordan man formaterer dataene til de datastrukturer, der er nødvendige af TensorFlow, og hvordan man træner modellen, udfører forudsigelser (dvs. identificerer billeder) og gemmer disse forudsigelser tilbage i databasen til yderligere analyse eller brug.

MIT-licens

Fashion MNIST (fashion_mnist)-datasættet, der udnyttes af denne blog, er licenseret under MIT-licensen.

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

Tilladelse gives hermed gratis til enhver person, der får en kopi af denne software og tilhørende dokumentationsfiler ("Softwaren") til at handle med softwaren uden begrænsninger, herunder uden begrænsning rettighederne til at bruge, kopiere, ændre, fusionere, offentliggøre, distribuere, underlicensere og/eller sælge kopier af softwaren og til at tillade personer, som softwaren er leveret til, at gøre det på følgende betingelser:

Ovenstående copyright-meddelelse og denne tilladelsesmeddelelse skal være inkluderet i alle kopier eller væsentlige dele af softwaren.

SOFTWAREN LEVERES "SOM DEN ER", UDEN GARANTI AF NOGEN ART, UDTRYKKELIG ELLER UNDERFORSTÅET, HERUNDER MEN IKKE BEGRÆNSET TIL GARANTIERNE FOR SALGBARHED, EGNETHED TIL ET BESTEMT FORMÅL OG IKKE-KRÆNKELSE. UNDER INGEN OMSTÆNDIGHEDER KAN FORFATTERNE ELLER OPHAVSRETSHEDHEDERNE VÆRE ANSVARLIGE FOR NOGEN KRAV, SKADER ELLER ANDEN ANSVAR, HÆVENT I EN KONTRAKTHANDLING, TORT ELLER ANDEN MÅDE, OPSTÅET AF, UD AF ELLER I FORBINDELSE MED DET ANDET SOFTWARE. SOFTWARE.

Referencer

Konverter eget billede til MNISTs billede
matplotlib:Billedvejledning
5 måder, hvorpå AI transformerer kundeoplevelsen
Digitalisering genopfinder forretningen
Hvad er billedklassificering?
Introduktion til Python Deep Learning Library TensorFlow


  1. Sådan skifter du database ved hjælp af PostgreSQL

  2. SQLAlchemy ingen adgangskode angivet fejl

  3. Hvordan MAKE_SET()-funktionen virker i MySQL

  4. Hvordan vælger jeg effektivt den tidligere ikke-nul værdi?