Intentando ejecutar redes GAN en OpenVINO

El repositorio del modelo Open Model Zoo de la biblioteca OpenVINO contiene muchos tipos diferentes de redes neuronales profundas desde el campo de la visión por computadora (y no solo). Pero aún no hemos cumplido con los modelos GAN que generarían nuevos datos a partir del ruido. En este artículo, crearemos dicho modelo en Keras y lo ejecutaremos en OpenVINO.


Imagen de introducción


Bastante sobre las redes GAN


Las redes generativamente competitivas (GAN) con buena capacitación le permiten crear nuevas imágenes a partir de ruido o imágenes de entrada que se percibirán como reales en lugar de sintetizadas. Las redes GAN se utilizan cada vez más en diversas tareas:


  • elaborar una descripción de la imagen;
  • generación de imágenes por descripción;
  • crear emoji a partir de la fotografía;
  • aumentar la resolución de la imagen;
  • transferencia de estilo de imagen;
  • mejorar la calidad de las imágenes médicas;
  • generación de caras y mucho, mucho más.

Pero primero, practiquemos en gatos números para asegurarse de que OpenVINO sea capaz de redes GAN.


Generación de imágenes 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