sql >> Databáze >  >> RDS >> MariaDB

Část 1:Klasifikace obrázků pomocí serveru MariaDB a TensorFlow – přehled

Špičkové společnosti se obracejí na umělou inteligenci a strojové učení, aby čelily výzvám nové éry digitální obchodní transformace.

Podle společnosti Gartner:„Osmdesát sedm procent vedoucích firem tvrdí, že digitalizace je prioritou společnosti a 79 % firemních stratégů říká, že znovuobjevuje jejich podnikání – vytváří nové zdroje příjmů novými způsoby “.

Zdroj :Gartner, zrychlete transformaci své digitální firmy, 15. ledna 2019

Doposud však byla digitální změna náročná. Složitost nástrojů, architektury a prostředí vytváří překážky pro používání strojového učení. Použití správy relačních dat na bázi SQL k ukládání a provádění průzkumu dat obrázků snižuje překážky a odemyká výhody strojového učení.

Tento blogový příspěvek ukazuje použití populárních open source nástrojů MariaDB Server, TensorFlow Python knihovny a Keras neuronové sítě ke zjednodušení složitosti implementace strojového učení. Použití těchto technologií vám může pomoci urychlit váš čas uvedení na trh efektivním přístupem, aktualizací, vkládáním, manipulací a úpravou dat.

Strojové učení na relačních databázích

V centru transformace digitálního podnikání, kterou umožňuje strojové učení, jsou technologie, jako jsou chatboti, doporučovací nástroje, personalizovaná komunikace, inteligentní cílení reklam a klasifikace obrázků.

Klasifikace obrázků má širokou škálu případů použití – od vymáhání práva a armády až po maloobchodní a samořídící auta. Při implementaci pomocí strojového učení může klasifikace obrázků poskytovat obchodní inteligenci v reálném čase. Cílem klasifikace obrázků je identifikovat a zobrazit, jako jedinečnou úroveň šedé (nebo barvy), rysy vyskytující se na obrázku. Nejběžnějšími nástroji pro klasifikaci obrázků jsou TensorFlow a Keras.

TensorFlow je knihovna Pythonu pro rychlé numerické výpočty vytvořená a vydaná společností Google. MariaDB Server je open source relační databáze s rozhraním SQL pro přístup a správu dat. Keras je open-source knihovna neuronových sítí napsaná v Pythonu.

V tomto příspěvku zjistíte, jak otestovat klasifikaci obrázků povolením interoperability mezi TensorFlow a MariaDB Server. Tento příspěvek používá datovou sadu Fashion MNIST, která obsahuje 70 000 obrázků ve stupních šedi v 10 kategoriích. Obrázky zobrazují jednotlivé kusy oblečení v nízkém rozlišení (28 x 28 pixelů).

Načítání a příprava dat na server MariaDB je mimo rozsah tohoto příspěvku. Následující tabulky byly vytvořeny a předem naplněny datovou sadou Fashion MNIST.

Obrázky Role obrázku Štítek obrázku
CREATE TABLE tf_images (
 img_label tinyint(4),
 img_vector blob,
 img_idx    int(10) bez znaménka NOT NULL,
 img_blob   blob,
 img_use )   brint> ) ENGINE=VÝCHOZÍ CHARSET 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,
 PRIMÁRNÍ KLÍČ (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

Průzkum dat

K provádění základního průzkumu dat se serverem MariaDB se používají následující knihovny:

  1. io modul poskytuje hlavní funkce Pythonu pro práci s různými typy I/O.
  2. Matplotlib je knihovna Pythonu pro 2D vykreslování pro vytváření různých grafů napříč platformami.
  3. Pandy nabízí datové struktury a operace pro manipulaci s číselnými tabulkami a časovými řadami.
  4. pymysql balíček obsahuje čistě Pythonovou klientskou knihovnu pro přístup k serveru MariaDB.

Začněme připojením k databázovému serveru přes 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()

Po připojení k serveru MariaDB lze snímky v databázi snadno přistupovat a spravovat. Všechny obrázky použité pro trénování a testování modelu jsou uloženy v jediné tabulce (tf_images). Jak bude obrázek použit, je definováno v tabulce použití obrázku (img_use). V tomto případě má tabulka pouze dvě n-tice, trénovací a testovací:

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

Role obrázku Popis
Školení Obrázek se používá pro trénování modelu
Testování Obrázek se používá pro testování modelu

Mapování cílových atributů na obrazové objekty v datové množině se nazývá označování. Definice štítku se liší od aplikace k aplikaci a stěží existuje univerzální definice toho, co je „správný“ štítek pro obrázek. Použití relační databáze zjednodušuje proces označování a poskytuje způsob přechodu od hrubých k jemnozrnným štítkům.

V tomto příkladu s použitím tabulky „kategorií“ má obrázek pouze jeden štítek (hrubý), jak je znázorněno níže:

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Název třídy
0 Tričko/top
1 Kalhoty
2 pulovr
3 Šaty
4 Kabát
5 Sandál
6 Košile
7 Tenisky
8 Taška
9 Kotíková obuv

Obrázky tabulka obsahuje všechny obrázky, které mají být použity pro školení a testování. Každý obrázek má jedinečný identifikátor, štítek a informaci o tom, zda se používá pro školení nebo testování modelu. Obrázky jsou uloženy v původním formátu PNG a jako předzpracované tenzory s pohyblivou řádovou čárkou. Jednoduché vnitřní spojení na této tabulce lze provést k zobrazení reprezentací obrázku (vektorový nebo png formát), jeho štítku a zamýšleného použití.

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

Název třídy Použití obrázku Vektorové znázornění Obrázek PNG
Kotníková obuv Školení b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Tričko/top Školení b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Tričko/top Školení b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Šaty Školení b”\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Tričko/top Školení b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

Použití příkazů SQL usnadňuje proces průzkumu dat. Například příkaz SQL níže ukazuje rozložení obrázku podle štítku obrázku.

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)

Štítek obrázku Tréninkové obrázky Testovací obrázky
0 Kotíková obuv 6000 1000
1 Taška 6000 1000
2 Kabát 6000 1000
3 Šaty 6000 1000
4 pulovr 6000 1000
5 Sandál 6000 1000
6 Košile 6000 1000
7 Tenisky 6000 1000
8 Tričko/top 6000 1000
9 Kalhoty 6000 1000

Existuje 6 000 obrázků pro každý štítek v tréninkové sadě a 1 000 obrázků pro každý štítek v testovací sadě. V tréninkové sadě je celkem 60 000 obrázků a v testovací sadě celkem 10 000 obrázků.

Jednotlivé kusy oblečení jsou uloženy jako obrázky s nízkým rozlišením. Protože databáze dokáže tyto obrázky efektivně ukládat jako binární velké objekty (BLOB), je velmi snadné získat obrázek pomocí SQL, jak je znázorněno níže:

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)

nahoře:obrázek z datové sady fashion_mnist

Tato první část série blogů ukázala, jak lze použít relační databázi k ukládání a provádění průzkumu dat obrázků pomocí jednoduchých příkazů SQL. Část 2 ukáže, jak formátovat data do datových struktur potřebných pro TensorFlow, a jak potom trénovat model, provádět předpovědi (tj. identifikovat obrázky) a ukládat tyto předpovědi zpět do databáze pro další analýzu nebo použití.

Licence MIT

Datový soubor Fashion MNIST (fashion_mnist) využívaný tímto blogem je licencován pod licencí MIT.

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

Tímto se bezplatně uděluje oprávnění jakékoli osobě, která získá kopii tohoto softwaru a souvisejících souborů dokumentace (dále jen „Software“), nakládat se softwarem bez omezení, včetně, bez omezení, práv používat, kopírovat, upravovat, slučovat, publikovat, distribuovat, poskytovat sublicence a/nebo prodávat kopie Softwaru a umožnit osobám, kterým je Software poskytnut, aby tak činily, za následujících podmínek:

Výše uvedené oznámení o autorských právech a toto oznámení o povolení musí být součástí všech kopií nebo podstatných částí Softwaru.

SOFTWARE JE POSKYTOVÁN „TAK, JAK JE“, BEZ ZÁRUKY JAKÉHOKOLI DRUHU, VÝSLOVNÉ NEBO PŘEDPOKLÁDANÉ, VČETNĚ ZÁRUK PRODEJNOSTI, VHODNOSTI PRO KONKRÉTNÍ ÚČEL A NEPORUŠENÍ PRÁV. V ŽÁDNÉM PŘÍPADĚ NENESOU AUTOŘI NEBO NOSITELÉ AUTORSKÝCH PRÁV ODPOVĚDNÍ ZA JAKÉKOLI NÁROKY, ŠKODY NEBO JINÉ ODPOVĚDNOSTI, AŤ JIŽ PŘI SMLUVNÍ AKCI, DELIKTŮ ČI JINAK, VYPLÝVAJÍCÍCH Z TOHOTO POUŽÍVÁNÍ NEBO V SOUVISLOSTI S NÍM SOFTWARE.

Odkazy

Převeďte vlastní obrázek na obrázek MNIST
matplotlib:Výukový program pro obrázky
5 způsobů, jak umělá inteligence mění zákaznickou zkušenost
Digitalizace znovuobjevuje podnikání
Co je klasifikace obrázků?
Úvod do Pythonu Knihovna hlubokého učení TensorFlow


  1. Proč je přístup k poli PostgreSQL mnohem rychlejší v C než v PL/pgSQL?

  2. Opravy související s výkonem pro SQL Server 2012

  3. Jak mohu získat výpis postgres databáze ve formátu prostého textu na heroku?

  4. příkaz sqlplus z příkazového řádku