Š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:
- io modul poskytuje hlavní funkce Pythonu pro práci s různými typy I/O.
- Matplotlib je knihovna Pythonu pro 2D vykreslování pro vytváření různých grafů napříč platformami.
- Pandy nabízí datové struktury a operace pro manipulaci s číselnými tabulkami a časovými řadami.
- 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