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