MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Część 1:Klasyfikacja obrazów za pomocą MariaDB Server i TensorFlow — przegląd

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:

  1. IO zapewnia główne udogodnienia Pythona do obsługi różnych typów I/O.
  2. Matplotlib to biblioteka Pythona do kreślenia 2D do tworzenia różnych wykresów na różnych platformach.
  3. Pandy oferuje struktury danych i operacje do manipulowania tabelami liczbowymi i szeregami czasowymi.
  4. 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zainstaluj WordPress z Nginx, MariaDB 10 i PHP 7 na Debianie 9

  2. Wykorzystanie replikacji klastra MySQL Galera do utworzenia klastra rozproszonego geograficznie:część pierwsza

  3. Jak działa LTRIM_ORACLE() w MariaDB

  4. MariaDB JSON_SET() Objaśnienie

  5. Jak MariaDB osiąga globalną skalę dzięki Xpand