MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Част 1:Класификация на изображения с MariaDB сървър и TensorFlow – общ преглед

Авангардни компании се обръщат към изкуствен интелект и машинно обучение, за да отговорят на предизвикателствата на новата ера на дигитална бизнес трансформация.

Според Gartner:„Осемдесет и седем процента от висшите бизнес лидери казват, че дигитализацията е приоритет на компанията, а 79% от корпоративните стратези казват, че тя преоткрива бизнеса им – създава нови потоци от приходи по нови начини “.

Източник :Gartner, Ускорете дигиталната си бизнес трансформация, 15 януари 2019 г.

Но досега цифровата промяна беше предизвикателство. Сложността на инструментите, архитектурата и средата създават бариери пред използването на машинно обучение. Използването на базирано на SQL управление на релационни данни за съхраняване и извършване на изследване на данни на изображения намалява бариерите и отключва предимствата на машинното обучение.

Тази публикация в блог демонстрира използването на популярни инструменти с отворен код MariaDB Server, TensorFlow Python библиотека и Keras невронна мрежова библиотека за опростяване на сложността на внедряването на машинно обучение. Използването на тези технологии може да ви помогне да ускорите времето си за пускане на пазара чрез ефективен достъп, актуализиране, вмъкване, манипулиране и модифициране на данни.

Машинно обучение върху релационни бази данни

В центъра на дигиталната бизнес трансформация, активирана от машинното обучение, са технологии като чатботове, машини за препоръки, персонализирани комуникации, интелигентно насочване на реклами и класификация на изображения.

Класификацията на изображенията има голямо разнообразие от случаи на използване - от правоприлагащите органи и военните до колите за продажба на дребно и самостоятелно шофиране. Когато се прилага с машинно обучение, класификацията на изображения може да осигури бизнес интелигентност в реално време. Целта на класификацията на изображенията е да идентифицира и изобрази, като уникално ниво на сивото (или цвят), характеристиките, които се срещат в изображението. Най-често срещаните инструменти за класификация на изображения са TensorFlow и Keras.

TensorFlow е библиотека на Python за бързи числени изчисления, създадена и пусната от Google. MariaDB Server е релационна база данни с отворен код със SQL интерфейс за достъп и управление на данни. Keras е библиотека за невронни мрежи с отворен код, написана на Python.

В тази публикация ще откриете как да тествате класификацията на изображенията, като активирате оперативната съвместимост между TensorFlow и MariaDB Server. Тази публикация използва набора от данни Fashion MNIST, който съдържа 70 000 изображения в сиви скали в 10 категории. Изображенията показват отделни дрехи с ниска разделителна способност (28 на 28 пиксела).

Зареждането и подготовката на данните в MariaDB Server е извън обхвата на тази публикация. Следните таблици са създадени и попълнени предварително с набора от данни Fashion MNIST.

Изображения Роля на изображението Етикет на изображение
CREATE TABLE tf_images (
 img_label tinyint(4),
 img_vector blob,
 img_idx    int(10) unsigned NOT NULL,
 img_blob   blob,
 img_int(  )<> ) ENGINE=НАБОР ПО ПОДРАЗБИРАНЕ на InnoDB=utf8mb4
CREATE TABLE img_use (
 use_id tinyint(4) NOT NULL AUTO_INCREMENT,
 use_name varchar(10) NOT NULL,
 use_desc varchar(100) НЕ NULL,
 PRIMARY KEY (use_id)
) ENGINE=InnoDB AUTO_INCREMENT=3 CHARSET ПО ПОДРАЗБИРАНЕ=utf8mb4
CREATE TABLE categories (
 class_idx tinyint(4) НЕ НУЛЕВО,
 име_на клас char(20) ПО ПОДРАЗБИРАНЕ NULL,
 ПРАВИЛЕН КЛЮЧ (class_idx)
) ENGINE=InnoDB CHARSET ПО ПОДРАЗБИРАНЕ=utf8mb4

Проучване на данни

Следните библиотеки се използват за извършване на основно изследване на данни с MariaDB Server:

  1. Иото модулът предоставя основните средства на Python за работа с различни типове I/O.
  2. Matplotlib е библиотека за 2D чертежи на Python за създаване на различни графики на различни платформи.
  3. Панди предлага структури от данни и операции за манипулиране на числови таблици и времеви редове.
  4. pymysql пакетът съдържа клиентска библиотека на чисто Python за достъп до MariaDB Server.

Нека започнем със свързване към сървъра на базата данни чрез 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()

Веднъж свързани към сървъра на MariaDB, изображенията в базата данни могат да бъдат лесно достъпни и управлявани. Всички изображения, използвани за обучение и тестване на модела, се съхраняват в една таблица (tf_images). Как ще се използва изображението е дефинирано в таблицата за използване на изображението (img_use). В този случай таблицата има само два кортежа, обучение и тестване:

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

Роля на изображението Описание
Обучение Изображението се използва за обучение на модела
Тестване Изображението се използва за тестване на модела

Съпоставянето на целеви атрибути с изображения на обекти в набор от данни се нарича етикетиране. Дефиницията на етикета варира от приложение до приложение и едва ли има универсална дефиниция за това какво е „правилният“ етикет за изображение. Използването на релационна база данни опростява процеса на етикетиране и осигурява начин за преминаване от груби към финозърнести етикети.

В този пример, използвайки таблицата „категории“, изображение има само един етикет (груб), както е показано по-долу:

sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Име на клас
0 Тениска/горнище
1 Паталон
2 Пуловер
3 Рокля
4 Палто
5 Сандал
6 Риза
7 Маратонки
8 Чанта
9 Обувка до глезена

Визображениятата таблицата съдържа всички изображения, които да се използват за обучение и тестване. Всяко изображение има уникален идентификатор, етикет и дали се използва за обучение или тестване на модела. Изображенията се съхраняват в оригиналния си PNG формат и като предварително обработени тензори с плаваща запетая. Може да се изпълни просто вътрешно свързване на тази таблица, за да се покажат изображенията (векторен или png формат), неговия етикет и предвидената употреба.

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

Име на клас Използване на изображение Векторно представяне Изображение PNG
Обувка до глезена Обучение b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Тениска/горнище Обучение b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Тениска/горнище Обучение b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Рокля Обучение b”\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Тениска/горнище Обучение b’\x80\x02cnumpy.core.multiarray\n_reconstruct… b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

Използването на SQL изрази прави процеса на изследване на данни лесен. Например SQL операторът по-долу показва разпределението на изображението по етикет на изображението.

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)

Етикет за изображение Изображения за обучение Тестване на изображения
0 Обувка до глезена 6000 1000
1 Чанта 6000 1000
2 Палто 6000 1000
3 Рокля 6000 1000
4 Пуловер 6000 1000
5 Сандал 6000 1000
6 Риза 6000 1000
7 Маратонки 6000 1000
8 Тениска/горнище 6000 1000
9 Панталон 6000 1000

Има 6000 изображения за всеки етикет в комплекта за обучение и 1000 изображения за всеки етикет в набора за тестване. Има общо 60 000 изображения в набора за обучение и общо 10 000 изображения в набора за тестване.

Отделни облекла се съхраняват като изображения с ниска разделителна способност. Тъй като базата данни може да съхранява тези изображения ефективно като двоични големи обекти (BLOB), е много лесно да се извлече изображение с помощта на SQL, както е показано по-долу:

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)

горе:изображение от набор от данни на fashion_mnist

Тази първа част от поредицата от блогове демонстрира как една релационна база данни може да се използва за съхраняване и извършване на изследване на данни на изображения с помощта на прости SQL изрази. Част 2 ще покаже как да форматирате данните в структурите от данни, необходими на TensorFlow, и след това как да обучите модела, да изпълнявате прогнози (т.е. идентифицирате изображения) и да съхранявате тези прогнози обратно в базата данни за по-нататъшен анализ или използване.

Лиценз на MIT

Наборът от данни Fashion MNIST (fashion_mnist), използван от този блог, е лицензиран под лиценза на MIT.

Лицензът на MIT (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com

С настоящото се предоставя безплатно разрешение на всяко лице, което получи копие от този софтуер и свързаните с него документи („Софтуерът“), да работи със Софтуера без ограничения, включително, без ограничение, правата за използване, копиране, модифициране, сливане, публикуване, разпространение, подлицензиране и/или продажба на копия на Софтуера и да разрешат на лицата, на които е предоставен Софтуерът, да правят това при следните условия:

Посоченото по-горе известие за авторски права и това известие за разрешение ще бъдат включени във всички копия или значителни части от Софтуера.

СОФТУЕРЪТ СЕ ПРЕДОСТАВЯ „КАКТО Е“, БЕЗ ГАРАНЦИЯ ОТ КАКВЪВ ВИД, ИЗРИЧНА ИЛИ ПОДРАЗНАЧАВАНА, ВКЛЮЧВАЩА, НО НЕ ОГРАНИЧЕНА ДО ГАРАНЦИИТЕ ЗА ПРОДАЖБА, ПРИГОДНОСТ ЗА КОНКРЕТНА ЦЕЛ И НЕНАРУШЕНИЕ. В НИКАКЪВ СЛУЧАЙ АВТОРИТЕ ИЛИ ПРИТЕЖАТЕЛИТЕ НА АВТОРСКИ ПРАВА НЕ НОСАТ ОТГОВОРНОСТ ЗА ВСЯКАКВИ ИСК, ЩЕТИ ИЛИ ДРУГА ОТГОВОРНОСТ, ДАЛИ ПРИ ДЕЙСТВИЕ НА ДОГОВОР, ДЕРЕКТ ИЛИ ПО ДРУГОЙ СТРАХ, ПРОИЗТИШАЩИ ОТ, ИЗВЪН ИЛИ ВЪВ СВЪРЗВАНЕТО НА ДРУГАТА СВЪРЗАНИЯ СОФТУЕР.

Препратки

Преобразувайте собствено изображение в изображение на MNIST
matplotlib:урок за изображения
5 начина, по които AI трансформира клиентското изживяване
Дигитализацията преоткрива бизнеса
Какво е класификация на изображения?
Въведение в Python Библиотека за дълбоко обучение 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. ClusterControl 1.5 - Автоматична проверка на архивиране, изграждане на подчинен от архивиране и интеграция в облак

  2. MariaDB POWER() Обяснено

  3. Надстройка на MariaDB 10.0 до 10.3.9 на Ubuntu 16.04

  4. Мигриране от MySQL Enterprise към MariaDB 10.3

  5. Как да настроите MariaDB да използва вертикален изход