exponenta event banner

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

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

  • Формирование рукописных цифровых изображений в стиле набора данных MNIST.

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

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

В этом примере используется предварительно обученная сеть декодеров, основанная на вариационном автокодере поезда (VAE), для создания примера изображений из Toolbox™ глубокого обучения. Дополнительные сведения см. в разделе Настройка вариационного автокодера (VAE) для создания изображений (панель инструментов глубокого обучения).

Предварительные условия для сторонних производителей

Необходимый

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

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

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

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

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

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

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

В этом примере для создания изображений используется сеть декодеров, обученная в вариационном автокодере поезда (VAE). Чтобы обучить сеть самостоятельно, см. раздел Обучающий вариационный автокодировщик (VAE) для создания изображений (панель инструментов глубокого обучения).

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

generateVAE функция точки входа загружает dlnetwork объект из 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]))

См. также

| | | (инструментарий для глубокого обучения) | (инструментарий для глубокого обучения)

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

Подробнее