Le référentiel de modèles Open Model Zoo de la bibliothèque OpenVINO contient de nombreux types de réseaux de neurones profonds du domaine de la vision par ordinateur (et pas seulement). Mais nous n'avons pas encore rencontré de modèles GAN qui généreraient de nouvelles données à partir du bruit. Dans cet article, nous allons créer un tel modèle dans Keras et l'exécuter dans OpenVINO.

Un peu sur les réseaux GAN
Les réseaux génétiquement compétitifs (GAN) avec une bonne formation vous permettent de créer de nouvelles images à partir du bruit ou des images d'entrée qui seront perçues comme réelles plutôt que synthétisées. Les réseaux GAN sont de plus en plus utilisés dans diverses tâches:
- rédiger une description de l'image;
- génération d'images par description;
- créer des emoji à partir de la photographie;
- augmenter la résolution d'image;
- transfert de style d'image;
- l'amélioration de la qualité des images médicales;
- face à la génération et bien plus encore.
Mais d'abord, pratiquons sur chats pour vous assurer qu'OpenVINO est capable de mettre en réseau GAN.
GAN Image Generation
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). , , !
, , .
.