Сгенерируйте изображения цифр с помощью вариационного автоэнкодера на центральных процессорах Intel

В этом примере показано, как сгенерировать MEX-функцию для обученной вариационной сети автоэнкодера (VAE), которая работает на центральных процессорах Intel ®. Пример иллюстрирует:

  • Генерация изображений нарисованных вручную цифр в стиле набора данных MNIST.

  • Генерация кода для dlnetwork Объект (Deep Learning Toolbox), представляющий нейронную сеть для глубокого обучения с использованием библиотеки Intel MKL-DNN.

  • Использование dlarray (Deep Learning Toolbox) объекты в генерации кода.

Этот пример использует предварительно обученную сеть декодера, основанную на Train Variational Autoencoder (VAE), для генерации изображений из Deep Learning Toolbox™. Для получения дополнительной информации см. «Train вариационного автоэнкодера (VAE) для генерации изображений (Deep Learning Toolbox)».

Необходимые условия для третьих лиц

Необходимый

  • Процессор Intel с поддержкой инструкций Intel Advanced Vector Extensions 2 (Intel AVX2).

Дополнительный

Для сборок, не являющихся MEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.

Этот пример не поддерживается в MATLAB ® Online.

Предварительно обученная переменная сеть автоэнкодера

Автоэнкодеры имеют две части: энкодер и декодер. Энкодер принимает изображение на вход и выводит сжатое представление (кодирование), которое является вектором размера latent_dim, равное 20 в этом примере. Декодер принимает сжатое представление, декодирует его и воссоздает оригинальное изображение.

VAE отличаются от обычных автоэнкодеров тем, что они не используют процесс декодирования-кодирования для восстановления входа. Вместо этого они накладывают распределение вероятностей на скрытое пространство и изучают распределение так, чтобы распределение выходов от декодера совпадало с распределением наблюдаемых данных. Затем они получают выборку из этого распределения, чтобы сгенерировать новые данные.

Этот пример использует сеть декодера, обученную в примере Train Variational Autoencoder (VAE), для генерации изображений. Чтобы обучить сеть самостоятельно, смотрите Train Variational Autoencoder (VAE) для генерации изображений (Deep Learning Toolbox).

Функция точки входа generateVAE

The generateVAE функция точки входа загружает dlnetwork объект из MAT-файла trainedDecoderVAENet в постоянную переменную и повторно использует постоянный объект для последующих вызовов предсказания. Он инициализирует dlarray объект, содержащий 25 случайным образом сгенерированных кодировок, передает их через сеть декодера и извлекает числовые данные сгенерированного изображения из объекта глубокого обучения массива.

type('generateVAE.m')
function generatedImage =  generateVAE(decoderNetFileName,latentDim,Environment) %#codegen
% Copyright 2020-2021 The MathWorks, Inc.

persistent decoderNet;
if isempty(decoderNet)
    decoderNet = coder.loadDeepLearningNetwork(decoderNetFileName);
end

% Generate random noise
randomNoise = dlarray(randn(1,1,latentDim,25,'single'),'SSCB');

if coder.target('MATLAB') && strcmp(Environment,'gpu')
    randomNoise = gpuArray(randomNoise);
end

% Generate new image from noise
generatedImage = sigmoid(predict(decoderNet,randomNoise));

% Extract numeric data from dlarray
generatedImage = extractdata(generatedImage);

end

Вычислите функцию точки входа

Оцените generateVAE функция точки входа, чтобы сгенерировать изображения цифр и построить график результатов.

latentDim = 20;
matfile = 'trainedDecoderVAENet.mat';
Env = '';

figure()
title("Generated samples of digits - MATLAB")

generatedImageML = generateVAE(matfile, latentDim, Env);
imshow(imtile(generatedImageML, "ThumbnailSize", [100,100]))

Сгенерируйте MEX-функцию

Чтобы сгенерировать MEX-функцию для generateVAE функция точки входа, создайте объект строения кода для цели MEX и установите целевой язык на C++. Используйте coder.DeepLearningConfig функция для создания объекта строения глубокого обучения MKL-DNN и назначения его DeepLearningConfig свойство объекта строения кода.

cfg = coder.config('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');

args = {coder.Constant(matfile), coder.Constant(latentDim), coder.Constant(Env)};

codegen -config cfg -args args generateVAE -report
Code generation successful: View report

Запуск сгенерированного MEX

Вызовите сгенерированный MEX и отобразите результаты.

figure()
title("Generated samples of digits using MKL-DNN")

generatedImage = generateVAE_mex(matfile, latentDim, Env);
imshow(imtile(generatedImage, "ThumbnailSize", [100,100]))

См. также

| | | (Deep Learning Toolbox) | (Deep Learning Toolbox)

Похожие примеры

Подробнее о