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.

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 .

GAN , , Fashion MNIST — , — . , ?
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
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 NVIDIA , . GitHub , GPU. OpenVINO.
, PyTorch ONNX ( OpenVINO). , , !
, , .
.