Najnowocześniejsze firmy zwracają się w stronę sztucznej inteligencji i uczenia maszynowego, aby sprostać wyzwaniom nowej ery cyfrowej transformacji biznesowej.
Według Gartnera:„Osiemdziesiąt siedem procent starszych liderów biznesu twierdzi, że cyfryzacja jest priorytetem firmy, a 79% strategów korporacyjnych twierdzi, że to zmienia ich biznes – tworząc nowe strumienie przychodów na nowe sposoby „.
Źródło :Gartner, Przyspiesz swoją cyfrową transformację biznesową, 15 stycznia 2019 r.
Ale jak dotąd zmiana cyfrowa była wyzwaniem. Złożoność narzędzi, architektury i środowiska stwarza bariery w korzystaniu z uczenia maszynowego. Korzystanie z opartego na SQL zarządzania danymi relacyjnymi do przechowywania i przeprowadzania eksploracji danych z obrazów zmniejsza bariery i odblokowuje korzyści płynące z uczenia maszynowego.
W tym poście na blogu przedstawiono wykorzystanie popularnych narzędzi typu open source MariaDB Server, biblioteki TensorFlow Python i biblioteki sieci neuronowej Keras w celu uproszczenia złożoności wdrażania uczenia maszynowego. Korzystanie z tych technologii może pomóc w skróceniu czasu wprowadzenia produktu na rynek dzięki wydajnemu dostępowi, aktualizowaniu, wstawianiu, manipulowaniu i modyfikowaniu danych.
Uczenie maszynowe na relacyjnych bazach danych
W centrum cyfrowej transformacji biznesowej możliwej dzięki uczeniu maszynowemu znajdują się technologie, takie jak chatboty, silniki rekomendacji, spersonalizowana komunikacja, inteligentne kierowanie reklam i klasyfikacja obrazów.
Klasyfikacja obrazów ma wiele różnych zastosowań — od organów ścigania i wojska po sprzedaż detaliczną i samochody do samodzielnego prowadzenia. Po wdrożeniu z uczeniem maszynowym klasyfikacja obrazów może zapewnić analizę biznesową w czasie rzeczywistym. Celem klasyfikacji obrazu jest identyfikacja i przedstawienie, w postaci unikalnego poziomu szarości (lub koloru), cech występujących na obrazie. Najpopularniejszymi narzędziami do klasyfikacji obrazów są TensorFlow i Keras.
TensorFlow to biblioteka Pythona do szybkich obliczeń numerycznych stworzona i wydana przez Google. MariaDB Server to relacyjna baza danych typu open source z interfejsem SQL do uzyskiwania dostępu do danych i zarządzania nimi. Keras to biblioteka sieci neuronowych typu open source napisana w Pythonie.
W tym poście dowiesz się, jak testować klasyfikację obrazów, włączając współdziałanie między TensorFlow i MariaDB Server. Ten post korzysta z zestawu danych Fashion MNIST, który zawiera 70 000 obrazów w skali szarości w 10 kategoriach. Zdjęcia przedstawiają poszczególne artykuły odzieżowe w niskiej rozdzielczości (28 na 28 pikseli).
Ładowanie i przygotowywanie danych do MariaDB Server wykracza poza zakres tego postu. Poniższe tabele zostały wcześniej utworzone i wypełnione zestawem danych Fashion MNIST.
| Obrazy | Rola obrazu | Etykieta obrazu |
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 DOMYŚLNY 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 |
Eksploracja danych
Następujące biblioteki są używane do wykonywania podstawowej eksploracji danych w MariaDB Server:
- IO zapewnia główne udogodnienia Pythona do obsługi różnych typów I/O.
- Matplotlib to biblioteka Pythona do kreślenia 2D do tworzenia różnych wykresów na różnych platformach.
- Pandy oferuje struktury danych i operacje do manipulowania tabelami liczbowymi i szeregami czasowymi.
- pymysql pakiet zawiera bibliotekę klienta pure-Python, aby uzyskać dostęp do MariaDB Server.
Zacznijmy od połączenia się z serwerem bazy danych przez Pythona:
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 połączeniu z serwerem MariaDB można łatwo uzyskać dostęp do obrazów w bazie danych i zarządzać nimi. Wszystkie obrazy używane do uczenia i testowania modelu są przechowywane w jednej tabeli (tf_images). Sposób wykorzystania obrazu jest określony w tabeli użycia obrazu (img_use). W tym przypadku tabela ma tylko dwie krotki, trenującą i testującą:
sql="SELECT use_name AS 'Image Role'
, use_desc AS 'Description'
FROM img_use"
display( pd.read_sql(sql,conn) )
| Rola obrazu | Opis |
| Szkolenie | Obraz służy do trenowania modelu |
| Testowanie | Obraz służy do testowania modelu |
Mapowanie atrybutów docelowych na obiekty obrazu w zestawie danych nazywa się etykietowaniem. Definicja etykiety różni się w zależności od zastosowania i nie ma uniwersalnej definicji tego, czym jest „prawidłowa” etykieta dla obrazu. Korzystanie z relacyjnej bazy danych upraszcza proces etykietowania i umożliwia przejście od etykiet gruboziarnistych do drobnoziarnistych.
W tym przykładzie, używając tabeli „kategorie”, obraz ma tylko jedną etykietę (grubą), jak pokazano poniżej:
sql="SELECT class_name AS 'Class Name' FROM categories" display( pd.read_sql(sql,conn) )
| Nazwa klasy | |
| 0 | koszulka/top |
| 1 | Spodnie |
| 2 | Sweter |
| 3 | Sukienka |
| 4 | Płaszcz |
| 5 | Sandały |
| 6 | Koszula |
| 7 | Tenisówki |
| 8 | Torba |
| 9 | Buty za kostkę |
obrazy tabela zawiera wszystkie obrazy, które mają być użyte do szkolenia i testowania. Każdy obraz ma unikalny identyfikator, etykietę oraz informację, czy jest używany do uczenia lub testowania modelu. Obrazy są przechowywane w oryginalnym formacie PNG i jako wstępnie przetworzone tensory zmiennoprzecinkowe. Proste sprzężenie wewnętrzne w tej tabeli może zostać wykonane w celu wyświetlenia reprezentacji obrazu (w formacie wektorowym lub png), jego etykiety i zamierzonego użycia.
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) )
| Nazwa klasy | Wykorzystanie obrazu | Reprezentacja wektorowa | Obraz PNG |
| Buty za kostkę | Szkolenie | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
| koszulka/top | Szkolenie | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
| koszulka/top | Szkolenie | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
| Sukienka | Szkolenie | b”\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
| koszulka/top | Szkolenie | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Korzystanie z instrukcji SQL ułatwia proces eksploracji danych. Na przykład poniższe polecenie SQL pokazuje dystrybucję obrazu według etykiety obrazu.
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)
| Etykieta obrazu | Obrazy szkoleniowe | Testowanie obrazów | |
| 0 | Buty za kostkę | 6000 | 1000 |
| 1 | Torba | 6000 | 1000 |
| 2 | Płaszcz | 6000 | 1000 |
| 3 | Sukienka | 6000 | 1000 |
| 4 | Sweter | 6000 | 1000 |
| 5 | Sandały | 6000 | 1000 |
| 6 | Koszula | 6000 | 1000 |
| 7 | Tenisówki | 6000 | 1000 |
| 8 | koszulka/top | 6000 | 1000 |
| 9 | Spodnie | 6000 | 1000 |

Istnieje 6000 obrazów dla każdej etykiety w zestawie uczącym i 1000 obrazów dla każdej etykiety w zestawie testowym. W zestawie uczącym znajduje się łącznie 60 000 obrazów, a w zestawie testowym 10 000 obrazów.
Poszczególne artykuły odzieżowe są przechowywane jako obrazy o niskiej rozdzielczości. Ponieważ baza danych może efektywnie przechowywać te obrazy jako Binary Large OBjects (BLOBs), bardzo łatwo jest pobrać obraz za pomocą SQL, jak pokazano poniżej:
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)

powyżej:obraz ze zbioru danych fashion_mnist
Ta pierwsza część serii blogów zademonstrowała, w jaki sposób relacyjna baza danych może być używana do przechowywania i przeprowadzania eksploracji danych obrazów przy użyciu prostych instrukcji SQL. Część 2 pokaże, jak sformatować dane w struktury danych potrzebne TensorFlow, a następnie jak trenować model, wykonywać prognozy (tj. identyfikować obrazy) i przechowywać te prognozy z powrotem w bazie danych w celu dalszej analizy lub wykorzystania.
Licencja MIT
Zbiór danych Fashion MNIST (fashion_mnist) wykorzystywany przez ten blog jest objęty licencją MIT.
Licencja MIT (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com
Niniejszym udziela się nieodpłatnego zezwolenia każdej osobie, która otrzyma kopię tego oprogramowania i powiązanych plików dokumentacji („Oprogramowanie”), na korzystanie z Oprogramowania bez ograniczeń, w tym między innymi prawa do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania sublicencji i/lub sprzedaży kopii Oprogramowania oraz zezwalania na to osobom, którym Oprogramowanie jest dostarczane, z zastrzeżeniem następujących warunków:/P>
Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu powinny być dołączone do wszystkich kopii lub istotnych części Oprogramowania.
OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI WARTOŚCI HANDLOWEJ, PRZYDATNOŚCI DO OKREŚLONEGO CELU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU AUTORZY LUB POSIADACZE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY W CZYNNOŚCI UMOWNEJ, CZYNNEJ LUB INNEJ, WYNIKAJĄCEJ Z OPROGRAMOWANIA LUB W ZWIĄZKU Z UŻYTKOWANIEM LUB INNYCH OPROGRAMOWANIE.
Referencje
Konwertuj własny obraz na obraz MNIST
matplotlib:samouczek dotyczący obrazów
5 sposobów, w jakie sztuczna inteligencja zmienia doświadczenia klientów
Cyfryzacja to nowe oblicze biznesu
Co to jest klasyfikacja obrazów?
Wprowadzenie do Pythona Biblioteka Deep Learning TensorFlow