Versuch, GAN-Netzwerke in OpenVINO auszuführen

Das Open Model Zoo- Modellrepository der OpenVINO-Bibliothek enthält viele verschiedene Arten von tiefen neuronalen Netzen aus dem Bereich der Bildverarbeitung (und nicht nur). Wir haben jedoch noch keine GAN-Modelle kennengelernt, die aus Rauschen neue Daten generieren würden. In diesem Artikel erstellen wir ein solches Modell in Keras und führen es in OpenVINO aus.


Intro-Bild


Ein bisschen über GAN-Netzwerke


Generativ wettbewerbsfähige Netzwerke (GANs) mit guter Schulung ermöglichen es Ihnen, neue Bilder aus Rauschen oder Eingabebildern zu erstellen, die eher als real als als synthetisiert wahrgenommen werden. GAN-Netzwerke werden zunehmend für verschiedene Aufgaben eingesetzt:


  • Erstellung einer Bildbeschreibung;
  • Bilderzeugung durch Beschreibung;
  • Erstellen von Emoji aus der Fotografie;
  • Bildauflösung erhöhen;
  • Bildstilübertragung;
  • Verbesserung der Qualität medizinischer Bilder;
  • Gesichtsgenerierung und vieles mehr.

Aber zuerst üben wir weiter Katzen Zahlen, um sicherzustellen, dass OpenVINO GAN-Netzwerke unterstützt.


GAN-Bilderzeugung


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


Keras : . GAN Keras .


, OpenVINO, OpenVINO .
5 .


Ziffernmatrix


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