Essayer d'exécuter des réseaux GAN dans OpenVINO

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.


Image d'introduction


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 .


Matrice de chiffres


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