MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Parte 1:Classificação de imagens com MariaDB Server e TensorFlow – uma visão geral


Empresas de ponta estão recorrendo à inteligência artificial e ao aprendizado de máquina para enfrentar os desafios da nova era de transformação digital dos negócios.

De acordo com o Gartner:“Oitenta e sete por cento dos líderes empresariais seniores dizem que a digitalização é uma prioridade da empresa e 79% dos estrategistas corporativos dizem que está reinventando seus negócios, criando novos fluxos de receita de novas maneiras “.

Fonte :Gartner, Acelere sua transformação digital de negócios, 15 de janeiro de 2019

Mas até agora, a mudança digital tem sido um desafio. A complexidade das ferramentas, arquitetura e ambiente criam barreiras ao uso do aprendizado de máquina. Usar o gerenciamento de dados relacionais baseado em SQL para armazenar e realizar a exploração de dados de imagens reduz as barreiras e libera os benefícios do aprendizado de máquina.

Esta postagem de blog demonstra o uso de ferramentas populares de código aberto MariaDB Server, biblioteca TensorFlow Python e biblioteca de rede neural Keras para simplificar a complexidade da implementação do aprendizado de máquina. O uso dessas tecnologias pode ajudá-lo a acelerar seu time-to-market acessando, atualizando, inserindo, manipulando e modificando dados com eficiência.

Aprendizado de máquina em bancos de dados relacionais


No centro da transformação digital de negócios possibilitada pelo aprendizado de máquina estão tecnologias como chatbots, mecanismos de recomendação, comunicações personalizadas, segmentação inteligente de anúncios e classificação de imagens.

A classificação de imagens tem uma ampla variedade de casos de uso, desde policiais e militares até carros de varejo e autônomos. Quando implementada com aprendizado de máquina, a classificação de imagens pode fornecer inteligência de negócios em tempo real. O objetivo da classificação de imagens é identificar e retratar, como um único nível de cinza (ou cor), as características que ocorrem em uma imagem. As ferramentas mais comuns para classificação de imagens são TensorFlow e Keras.

TensorFlow é uma biblioteca Python para computação numérica rápida criada e lançada pelo Google. O MariaDB Server é um banco de dados relacional de código aberto com uma interface SQL para acessar e gerenciar dados. Keras é uma biblioteca de rede neural de código aberto escrita em Python.

Neste post, você descobrirá como testar a classificação de imagens habilitando a interoperabilidade entre o TensorFlow e o MariaDB Server. Esta postagem usa o conjunto de dados Fashion MNIST que contém 70.000 imagens em tons de cinza em 10 categorias. As imagens mostram peças de roupa individuais em baixa resolução (28 por 28 pixels).

Carregar e preparar os dados no MariaDB Server está fora do escopo deste post. As tabelas a seguir foram criadas e preenchidas antecipadamente com o conjunto de dados Fashion MNIST.


Imagens Função da imagem Rótulo da imagem
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 CHARSET PADRÃO=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 CHARSET PADRÃO=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

Exploração de dados


As seguintes bibliotecas são usadas para realizar a exploração básica de dados com o MariaDB Server:
  1. O io O módulo fornece as principais facilidades do Python para lidar com vários tipos de E/S.
  2. Matplotlib é uma biblioteca de plotagem 2D do Python para produzir uma variedade de gráficos entre plataformas.
  3. Pandas oferece estruturas de dados e operações para manipulação de tabelas numéricas e séries temporais.
  4. O pymysql O pacote contém uma biblioteca cliente Python pura para acessar o MariaDB Server.

Vamos começar conectando ao servidor de banco de dados através do 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()

Uma vez conectado ao servidor MariaDB, as imagens no banco de dados podem ser facilmente acessadas e gerenciadas. Todas as imagens usadas para treinar e testar o modelo são armazenadas em uma única tabela (tf_images). Como a imagem será usada é definida na tabela de uso de imagens (img_use). Nesse caso, a tabela possui apenas duas tuplas, treinamento e teste:
sql="SELECT use_name AS 'Image Role'
          , use_desc AS 'Description'
     FROM img_use"
display( pd.read_sql(sql,conn) )


Função da imagem Descrição
Treinamento A imagem é usada para treinar o modelo
Teste A imagem é usada para testar o modelo

O mapeamento de atributos de destino para objetos de imagem em um conjunto de dados é chamado de rotulagem. A definição do rótulo varia de aplicação para aplicação, e dificilmente existe uma definição universal do que é um rótulo “correto” para uma imagem. O uso de um banco de dados relacional simplifica o processo de rotulagem e fornece uma maneira de ir de rótulos grosseiros a rótulos finos.

Neste exemplo, usando a tabela “categorias”, uma imagem possui apenas um rótulo (grosseiro) conforme mostrado abaixo:
sql="SELECT class_name AS 'Class Name' FROM categories"
display( pd.read_sql(sql,conn) )
Nome da classe
0 camiseta/top
1 Calças
2 Suéter
3 Vestido
4 Casaco
5 Sandália
6 Camisa
7 Tênis
8 Bolsa
9 Bota de tornozelo

As imagens A tabela contém todas as imagens a serem usadas para treinamento e teste. Cada imagem tem um identificador exclusivo, um rótulo e se é usado para treinar ou testar o modelo. As imagens são armazenadas em seu formato PNG original e como tensores de ponto flutuante pré-processados. Uma junção interna simples nesta tabela pode ser executada para exibir as representações da imagem (formato vetorial ou png), seu rótulo e o uso pretendido.
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) )


Nome da classe Uso de imagem Representação vetorial Imagem PNG
Bota de tornozelo Treinamento b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Treinamento b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Treinamento b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
Vestido Treinamento b”\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…
T-shirt/top Treinamento b'\x80\x02cnumpy.core.multiarray\n_reconstruct… b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\…

O uso de instruções SQL facilita o processo de exploração de dados. Por exemplo, a instrução SQL abaixo mostra a distribuição da imagem por rótulo de imagem.
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)


Rótulo da imagem Imagens de treinamento Teste de imagens
0 Bota de tornozelo 6000 1000
1 Bolsa 6000 1000
2 Casaco 6000 1000
3 Vestido 6000 1000
4 Suéter 6000 1000
5 Sandália 6000 1000
6 Camisa 6000 1000
7 Tênis 6000 1000
8 camiseta/top 6000 1000
9 Calças 6000 1000



Existem 6.000 imagens para cada rótulo no conjunto de treinamento e 1.000 imagens para cada rótulo no conjunto de teste. Há 60.000 imagens totais no conjunto de treinamento e 10.000 imagens totais no conjunto de teste.

Artigos de vestuário individuais são armazenados como imagens de baixa resolução. Como o banco de dados pode armazenar essas imagens de forma eficiente como Binary Large OBjects (BLOBs), é muito fácil recuperar uma imagem usando SQL, conforme mostrado abaixo:
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)


acima:imagem do conjunto de dados fashion_mnist

Esta primeira parte da série de blogs demonstrou como um banco de dados relacional pode ser usado para armazenar e executar a exploração de dados de imagens usando instruções SQL simples. A Parte 2 mostrará como formatar os dados nas estruturas de dados necessárias ao TensorFlow e, em seguida, como treinar o modelo, realizar previsões (ou seja, identificar imagens) e armazenar essas previsões de volta no banco de dados para análise ou uso posterior.

Licença MIT


O conjunto de dados Fashion MNIST (fashion_mnist) aproveitado por este blog é licenciado sob a licença MIT.

A Licença MIT (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com

A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para lidar com o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software é fornecido o façam, sujeito às seguintes condições:

O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software.

O SOFTWARE É FORNECIDO “COMO ESTÁ”, SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO MAS NÃO LIMITADO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUMA CIRCUNSTÂNCIA OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, DE OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO PROGRAMAS.

Referências


Converter a própria imagem para a imagem do MNIST
matplotlib:tutorial de imagem
5 maneiras pelas quais a IA está transformando a experiência do cliente
A digitalização está reinventando os negócios
O que é classificação de imagens?
Introdução ao Python Biblioteca de Deep Learning TensorFlow