Tentando executar redes GAN no OpenVINO

O repositório de modelos do Open Model Zoo da biblioteca OpenVINO contém muitos tipos diferentes de redes neurais profundas do campo da visão computacional (e não apenas). Mas ainda não conhecemos os modelos GAN que gerariam novos dados a partir do ruído. Neste artigo, criaremos esse modelo no Keras e o executaremos no OpenVINO.


Imagem de introdução


Um pouco sobre redes GAN


As redes genericamente competitivas (GAN) com bom treinamento permitem criar novas imagens a partir de ruído ou imagens de entrada que serão percebidas como reais, não sintetizadas. As redes GAN são cada vez mais usadas em várias tarefas:


  • elaboração de uma descrição da imagem;
  • geração de imagens por descrição;
  • criando emoji a partir da fotografia;
  • aumentar a resolução da imagem;
  • transferência de estilo de imagem;
  • melhorar a qualidade das imagens médicas;
  • geração de rosto e muito, muito mais.

Mas primeiro, vamos praticar em gatos números para garantir que o OpenVINO seja capaz de criar redes GAN.


Geração de imagens GAN


Keras, , MNIST. OpenVINO , GAN . , NVIDIA .


Keras : . GAN Keras .


, OpenVINO, OpenVINO .
5 .


Matriz de dígitos


GAN , , Fashion MNIST — , — . , ?


OpenVINO


OpenVINO : Caffe, Tensorflow, ONNX .. Keras, ONNX, ONNX OpenVINO. , , Keras->ONNX->OpenVINO , Keras->TensorFlow->OpenVINO. , ONNX , Tensorflow, .


Python Keras ONNX:


import numpy as np
import argparse
import onnx
import keras2onnx
from keras.models import load_model

model = load_model('gan_digits.h5')
onnx_model = keras2onnx.convert_keras(model, model.name)
onnx.save_model(onnx_model, 'gan_digits.onnx')

ONNX OpenVINO ( Windows) Model Optimizer:


python "C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer\mo.py" --input_model gan_digits.onnx --input_shape [100,100]

, , OpenVINO. :


import numpy as np
import sys
import matplotlib.pyplot as plt
from openvino.inference_engine import IENetwork, IECore

#  OpenVINO   
ie = IECore()
net = IENetwork(model='gan_digits_R2020.1.xml', weights='gan_digits_R2020.1.bin')
exec_net = ie.load_network(net, 'CPU')
input_blob = next(iter(net.inputs))
out_blob = next(iter(net.outputs))

#      
noise = np.random.normal(loc=0, scale=1, size=[100, 100])
generated_images = exec_net.infer(inputs={input_blob: noise})

#  
generated_images = generated_images['Tanh']
generated_images = generated_images.reshape(100, 28, 28)
figsize = (10, 10)
dim = (10, 10)
plt.figure(figsize=figsize)
for i in range(generated_images.shape[0]):
    plt.subplot(dim[0], dim[1], i + 1)
    plt.imshow(generated_images[i], interpolation='nearest', cmap='gray_r')
    plt.axis('off')
plt.tight_layout()
plt.show()

, . , , 100%.



OpenVINO . , , OpenVINO , .


, , styleGAN. :


styleGAN


styleGAN NVIDIA , . GitHub , GPU. OpenVINO.


, PyTorch ONNX ( OpenVINO). , , !


, , .
.


All Articles