В этом примере показано, как создать CUDA ® MEX для обученной сети вариационного автокодера (VAE). Пример иллюстрирует:
В этом примере используется предварительно обученная сеть декодеров, основанная на вариационном автокодере поезда (VAE), для создания примера изображений из Toolbox™ глубокого обучения. Дополнительные сведения см. в разделе Настройка вариационного автокодера (VAE) для создания изображений (панель инструментов глубокого обучения).
Графический процессор NVIDIA ® с поддержкой CUDA и совместимый драйвер.
Для построений, отличных от MEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.
Инструментарий NVIDIA CUDA.
Библиотека NVIDIA cuDNN.
Переменные среды для компиляторов и библиотек. Дополнительные сведения см. в разделах Аппаратное обеспечение сторонних производителей и Настройка необходимых продуктов.
Чтобы убедиться, что компиляторы и библиотеки для выполнения этого примера настроены правильно, используйте coder.checkGpuInstall функция.
envCfg = coder.gpuEnvConfig('host'); envCfg.DeepLibTarget = 'cudnn'; envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
Автокодеры имеют две части: кодер и декодер. Кодер принимает входной сигнал изображения и выводит сжатое представление (кодирование), которое является вектором размера latent_dim, равное 20 в этом примере. Декодер принимает сжатое представление, декодирует его и воссоздает исходное изображение.
VAE отличаются от обычных автокодеров тем, что не используют процесс кодирования-декодирования для восстановления входного сигнала. Вместо этого они накладывают распределение вероятности на латентное пространство и изучают распределение так, чтобы распределение выходных сигналов декодера соответствовало распределению наблюдаемых данных. Затем они проводят выборку из этого распределения для создания новых данных.
В этом примере для создания изображений используется сеть декодеров, обученная в вариационном автокодере поезда (VAE). Чтобы обучить сеть самостоятельно, см. раздел Обучающий вариационный автокодировщик (VAE) для создания изображений (панель инструментов глубокого обучения).

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]))

Создание кода CUDA для generateVAE создание объекта конфигурации кода GPU для цели MEX и установка целевого языка на C++. Используйте coder.DeepLearningConfig для создания объекта конфигурации глубокого обучения CuDNN и назначения его DeepLearningConfig свойства объекта конфигурации кода графического процессора.
Env = 'gpu'; cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); args = {coder.Constant(matfile), coder.Constant(latentDim), coder.Constant(Env)}; codegen -config cfg -args args generateVAE -report
Code generation successful: View report
Чтобы создать код CUDA для цели TensorRT, создайте и используйте объект конфигурации глубокого обучения TensorRT вместо объекта конфигурации CuDNN.
Вызовите сгенерированный CUDA MEX и просмотрите результаты.
figure() title("Generated samples of digits - GPU") generatedImageGPU = generateVAE_mex(matfile, latentDim, Env); imshow(imtile(generatedImageGPU, "ThumbnailSize", [100,100]))

coder.CuDNNConfig | coder.gpuConfig | coder.gpuEnvConfig | coder.TensorRTConfig | dlarray (инструментарий для глубокого обучения) | dlnetwork (инструментарий для глубокого обучения)