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

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

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

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

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

Этот пример использует предварительно обученную сеть декодера на основе Обучения Вариационного Автоэнкодера (VAE), чтобы Сгенерировать пример Изображений от Deep Learning Toolbox™. Для получения дополнительной информации смотрите, Обучают Вариационный Автоэнкодер (VAE) Генерировать Изображения (Deep Learning Toolbox).

Сторонние необходимые условия

Необходимый

  • Процессор Intel с поддержкой Intel Усовершенствованные Векторные Расширения 2 (Intel AVX2) инструкции.

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

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

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

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

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

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

Этот пример использует сеть декодера, обученную в Обучении Вариационного Автоэнкодера (VAE), чтобы Сгенерировать пример Изображений. Чтобы обучить сеть самостоятельно, смотрите, Обучают Вариационный Автоэнкодер (VAE) Генерировать Изображения (Deep Learning Toolbox).

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

generateVAE функция точки входа загружает dlnetwork объект из trainedDecoderVAENet MAT-файла в персистентную переменную и повторные использования постоянный объект для последующих вызовов предсказания. Это инициализирует 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)

Связанные примеры

Больше о