Генеративный ИИ стал модным словом 2023 года. Будь то ChatGPT, генерирующий текст, или Midjourney, генерирующий изображения , инструменты генеративного ИИ изменили бизнес и доминировали в индустрии создания контента. Благодаря партнерству Microsoft с OpenAI и Google, создавшему собственного чат-бота на основе ИИ под названием Bard, он быстро превращается в одну из самых горячих областей в технической сфере.
Генеративный ИИ направлен на создание новых данных, подобных обучающему набору данных. Он использует алгоритмы машинного обучения, называемые генеративными моделями, для изучения шаблонов и распределений, лежащих в основе обучающих данных. Хотя доступны различные генеративные модели, которые создают текст, изображения, аудио, коды и видео, в этой статье мы подробно рассмотрим генеративные модели видео.
От создания видео с использованием текстовых описаний до создания новых сцен и персонажей и повышения качества видео — модели генеративного видео предлагают множество возможностей для создателей видеоконтента. Платформы генеративного видео часто основаны на сложных моделях, таких как GAN, VAE или CGAN, способных переводить человеческий язык для создания изображений и видео. В этой статье вы узнаете о генеративных видеомоделях, их преимуществах и принципах работы, а также пошаговое руководство по созданию собственной генеративной видеомодели.
Генеративные модели и их виды
Генеративные модели создают новые данные, аналогичные обучающим данным, с использованием алгоритмов машинного обучения. Для создания новых данных эти модели проходят серию тренировок, в ходе которых они подвергаются воздействию больших наборов данных. Они изучают основные закономерности и взаимосвязи в обучающих данных, чтобы создавать аналогичные синтетические данные на основе своих знаний, полученных в ходе обучения. После обучения эти модели принимают текстовые подсказки (иногда графические подсказки) для создания контента на основе текста.
Существует несколько различных типов генеративных моделей, в том числе:
Это одни из наиболее часто используемых генеративных моделей, но многие другие были разработаны для конкретных случаев использования. Выбор модели для использования будет зависеть от конкретных требований решаемой задачи.
Что такое генеративная видеомодель?
Генеративные модели видео — это алгоритмы машинного обучения, которые генерируют новые видеоданные на основе шаблонов и взаимосвязей, извлеченных из обучающих наборов данных. В этих моделях изучается базовая структура видеоданных, что позволяет использовать ее для создания синтетических видеоданных, подобных исходным. Доступны различные типы генеративных видеомоделей, такие как GAN, VAE, CGAN и другие, каждая из которых использует свой подход к обучению, основанный на его уникальной инфраструктуре.
В генеративных видеомоделях в основном используются подсказки преобразования текста в видео, когда пользователи могут вводить свои требования с помощью текста, а модель генерирует видео с использованием текстового описания. В зависимости от ваших инструментов, генеративные модели видео также используют эскизы или изображения для создания видео.
Какие задачи может выполнять генеративная видеомодель?
С помощью генеративных видеомоделей можно выполнять широкий спектр действий, в том числе:
Преимущества генеративных видеомоделей
По сравнению с более традиционными методами генеративные модели видео имеют ряд преимуществ:
Как работают генеративные видеомодели?
Как и любая другая модель ИИ, генеративные модели видео обучаются на больших наборах данных для создания новых видео. Однако процесс обучения варьируется от модели к модели в зависимости от архитектуры модели. Давайте разберемся, как это может работать, на примере двух разных моделей: VAE и GAN.
Вариационные автоэнкодеры (VAE)
Вариационный автоэнкодер (VAE) — это генеративная модель для создания видео и изображений. В VAE присутствуют два основных компонента: кодер и декодер. Кодер преобразует видео в низкоразмерное представление, называемое скрытым кодом, а декодер выполняет обратный процесс.
VAE использует кодировщики и декодеры для моделирования распределения видео в обучающих данных. В кодировщике каждое видео преобразуется в скрытый код, который становится параметром для параметризации распределения вероятностей (например, нормального распределения). Чтобы вычислить потери при реконструкции, декодер сопоставляет скрытый код обратно с видео, а затем сравнивает его с исходным видео.
Чтобы максимизировать разнообразие сгенерированных видео, VAE побуждает скрытые коды следовать предыдущему распределению, что сводит к минимуму потери при реконструкции. После обучения VAE его можно использовать для создания новых видео путем выборки скрытых кодов из предыдущего распространения и передачи их через декодер.
Генеративно-состязательные сети (GAN)
GAN — это модель глубокого обучения, которая генерирует изображения или видео при получении текстового приглашения. GAN состоит из двух основных компонентов: генератора и дискриминатора. И генератор, и дискриминатор, являясь нейронными сетями, обрабатывают входной видеосигнал для создания различных видов вывода. В то время как генератор генерирует поддельные видео, дискриминатор оценивает оригинальность этих видео, чтобы предоставить обратную связь генератору.
Используя случайный вектор шума в качестве входных данных, генератор в GAN генерирует видео. Дискриминаторы принимают видео в качестве входных данных и производят оценки вероятности, указывающие на то, что видео является реальным. Здесь генератор классифицирует видео как настоящее, если оно взято из обучающих данных, а видео, сгенерированное генератором, помечается как поддельное.
Генераторы и дискриминаторы тренировались враждебно во время обучения. Генераторы обучены создавать поддельные видео, которые дискриминаторы не могут обнаружить, в то время как дискриминаторы обучены идентифицировать поддельные видео, созданные генераторами. Генератор продолжает этот процесс до тех пор, пока не создаст видео, которые дискриминатор больше не сможет отличить от реальных видео.
После процесса обучения вектор шума может быть сэмплирован и пропущен через генератор для создания совершенно нового видео. Включая некоторую случайность и разнообразие, полученные видео должны отражать характеристики обучающих данных.
Как создать генеративную видеомодель?
Здесь мы обсудим, как создать генеративную модель видео, аналогичную фреймворку VToonify, которая сочетает в себе преимущества фреймворков StyleGAN и Toonify.
Настройка среды
Первым шагом к созданию генеративной видеомодели является настройка среды. Чтобы настроить среду для создания генеративной модели видео, вы должны выбрать правильный язык программирования для написания кода. Здесь мы продвигаемся вперед с Python. Затем вы должны установить несколько программных пакетов, в том числе платформу глубокого обучения, такую как TensorFlow или PyTorch, а также любые дополнительные библиотеки, которые вам понадобятся для предварительной обработки и визуализации ваших данных.
Установите следующие зависимости:
pip install torch torchvision
NumPy:
pip install numpy
OpenCV:
pip install opencv-python
Matplotlib:
pip install matplotlib
Другие необходимые зависимости можно найти здесь . Вам может потребоваться изменить файл vtoonify_env.yaml , чтобы установить PyTorch, который соответствует вашей собственной версии CUDA.
Дизайн архитектуры модели
Вы не можете создать генеративную видеомодель без разработки архитектуры модели. Он определяет качество и емкость генерируемых видеорядов. Учет последовательного характера видеоданных имеет решающее значение при разработке архитектуры генеративной модели, поскольку видеопоследовательности состоят из нескольких кадров, связанных по времени. Комбинация CNN с RNN или создание пользовательской архитектуры может быть вариантом.
Поскольку мы разрабатываем модель, аналогичную VToonify, необходимо глубокое понимание структуры. Итак, что такое VToonify?
VToonify — это фреймворк, разработанный MMLab@NTU для создания высококачественных художественных портретных видео. Он сочетает в себе преимущества двух существующих фреймворков: фреймворка перевода изображений и фреймворка на основе StyleGAN. Платформа перевода изображений поддерживает переменный размер входных данных, но достичь высокого разрешения и управляемой передачи стиля сложно. С другой стороны, фреймворк на основе StyleGAN хорош для передачи стилей с высоким разрешением и управляемостью, но он ограничен фиксированным размером изображения и может терять детали.
VToonify использует модель StyleGAN для обеспечения управляемой передачи стилей с высоким разрешением и устраняет ее ограничения, адаптируя архитектуру StyleGAN к полностью сверточной архитектуре кодировщик-генератор. Он использует кодировщик для извлечения многомасштабных функций содержимого входного кадра и объединяет их с моделью StyleGAN для сохранения деталей кадра и управления стилем. Фреймворк имеет два экземпляра, а именно VToonify-T и VToonify-D, причем первый использует Toonify, а второй следует за DualStyleGAN.
Основой VToonify-D является DualStyleGAN, разработанный MMLab@NTU. DualStyleGAN использует преимущества StyleGAN и может считаться его расширенной версией. В этой статье мы будем двигаться вперед с VToonify-D.
При разработке архитектуры модели необходимо учитывать следующие шаги:
Поскольку модель, которую мы разрабатываем, похожа на VToonify, последовательности человеческих лиц должны подаваться в качестве входных данных для генеративной модели, а последовательности лиц из аниме или мультфильмов должны быть выходными данными. Изображения, оптические потоки или карты объектов могут быть входными и выходными форматами данных.
Напишите следующие коды для сети энкодера:
num_styles = int(np.log2(out_size)) * 2 - 2
encoder_res = [2**i for i in range(int(np.log2(in_size)), 4, -1)]
self.encoder = nn.ModuleList()
self.encoder.append(
nn.Sequential(
nn.Conv2d(img_channels+19, 32, 3, 1, 1, bias=True),
nn.LeakyReLU(negative_slope=0.2, inplace=True),
nn.Conv2d(32, channels[in_size], 3, 1, 1, bias=True),
nn.LeakyReLU(negative_slope=0.2, inplace=True)))
for res in encoder_res:
in_channels = channels[res]
if res > 32:
out_channels = channels[res // 2]
block = nn.Sequential(
nn.Conv2d(in_channels, out_channels, 3, 2, 1, bias=True),
nn.LeakyReLU(negative_slope=0.2, inplace=True),
nn.Conv2d(out_channels, out_channels, 3, 1, 1, bias=True),
nn.LeakyReLU(negative_slope=0.2, inplace=True))
self.encoder.append(block)
else:
layers = []
for _ in range(num_res_layers):
layers.append(VToonifyResBlock(in_channels))
self.encoder.append(nn.Sequential(*layers))
block = nn.Conv2d(in_channels, img_channels, 1, 1, 0, bias=True)
self.encoder.append(block)
Вы можете обратиться к этой ссылке GitHub, чтобы добавить сеть генератора.
Обучение модели
Во-первых, вам нужно импортировать argparse, math и random, чтобы начать обучение модели. Для этого выполните следующие команды:
import argparse
import math
import random
После импорта всех пререквизитов укажите параметры для обучения. Он включает в себя общее количество итераций обучения, размер пакета для каждого графического процессора, локальный ранг для распределенного обучения, интервал сохранения контрольной точки, скорость обучения и многое другое. Вы можете обратиться к следующим командным строкам, чтобы понять.
self.parser = argparse.ArgumentParser(description="Train VToonify-D")
self.parser.add_argument("--iter", type=int, default=2500, help="total training iterations")
self.parser.add_argument("--batch", type=int, default=9, help="batch sizes for each gpus")
self.parser.add_argument("--lr", type=float, default=0.0001, help="learning rate")
self.parser.add_argument("--local_rank", type=int, default=0, help="local rank for distributed training")
self.parser.add_argument("--start_iter", type=int, default=0, help="start iteration")
self.parser.add_argument("--save_every", type=int, default=25000, help="interval of saving a checkpoint")
self.parser.add_argument("--save_begin", type=int, default=35000, help="when to start saving a checkpoint")
self.parser.add_argument("--log_every", type=int, default=300, help="interval of saving a checkpoint")
Затем мы должны предварительно обучить сеть кодировщика для модели.
def pretrain(args, generator, g_optim, g_ema, parsingpredictor, down, directions, styles, device):
pbar = range(args.iter)
if get_rank() == 0:
pbar = tqdm(pbar, initial=args.start_iter, dynamic_ncols=True, smoothing=0.01)
recon_loss = torch.tensor(0.0, device=device)
loss_dict = {}
if args.distributed:
g_module = generator.module
else:
g_module = generator
accum = 0.5 ** (32 / (10 * 1000))
requires_grad(g_module.encoder, True)
for idx in pbar:
i = idx + args.start_iter
if i > args.iter:
print("Done!")
break
Теперь обучите генератор и дискриминатор, используя парные данные.
def train(args, generator, discriminator, g_optim, d_optim, g_ema, percept, parsingpredictor, down, pspencoder, directions, styles, device):
pbar = range(args.iter)
if get_rank() == 0:
pbar = tqdm(pbar, initial=args.start_iter, smoothing=0.01, ncols=130, dynamic_ncols=False)
d_loss = torch.tensor(0.0, device=device)
g_loss = torch.tensor(0.0, device=device)
grec_loss = torch.tensor(0.0, device=device)
gfeat_loss = torch.tensor(0.0, device=device)
temporal_loss = torch.tensor(0.0, device=device)
gmask_loss = torch.tensor(0.0, device=device)
loss_dict = {}
surffix = '_s'
if args.fix_style:
surffix += '%03d'%(args.style_id)
surffix += '_d'
if args.fix_degree:
surffix += '%1.1f'%(args.style_degree)
if not args.fix_color:
surffix += '_c'
if args.distributed:
g_module = generator.module
d_module = discriminator.module
else:
g_module = generator
d_module = discriminator
В приведенном выше фрагменте кода функция train устанавливает различные тензоры потерь для генератора и дискриминатора и создает словарь значений потерь. Используя алгоритм обратного распространения ошибки, алгоритм повторяет указанное количество итераций, вычисляет и минимизирует потери.
Весь набор кодов для обучения модели вы можете найти здесь.
Оценка модели и тонкая настройка
Оценка модели включает в себя оценку качества, эффективности и действенности модели. Когда разработчики тщательно оценивают модель, они могут определить области для улучшения и точно настроить ее параметры для улучшения ее функциональности. Этот процесс включает в себя доступ к качеству сгенерированных видеопоследовательностей с использованием количественных показателей, таких как индекс структурного сходства (SSIM), среднеквадратическая ошибка (MSE) или пиковое отношение сигнал-шум (PSNR), а также визуальный осмотр сгенерированных видеопоследовательностей.
На основе результатов оценки настройте модель, изменив архитектуру, конфигурацию или процесс обучения, чтобы повысить ее производительность. Было бы лучше оптимизировать гиперпараметры, что включает в себя настройку функции потерь, тонкую настройку алгоритма оптимизации и настройку параметров модели для повышения производительности генеративной видеомодели.
Разработать веб-интерфейс
Создание веб-интерфейса пользователя (UI) необходимо, если вашему проекту нужно, чтобы конечные пользователи взаимодействовали с видеомоделью. Это позволяет пользователям вводить входные параметры, такие как эффекты, типы стилей, изменение масштаба изображения, степень стиля и т. д. Для этого вы должны разработать макет, топографию, цвета и другие визуальные элементы на основе заданных вами параметров.
Теперь разработайте переднюю часть в соответствии с дизайном. После разработки пользовательского интерфейса тщательно протестируйте его, чтобы исключить ошибки и оптимизировать функциональность. Вы также можете использовать Gradio UI для создания собственного пользовательского интерфейса для проекта без необходимости написания кода.
Развертывание
После обучения и тонкой настройки модели и создания пользовательского веб-интерфейса модель необходимо развернуть в производственной среде для создания новых видеороликов. Для развертывания модели в зависимости от требований может потребоваться интеграция с мобильным или веб-приложением, настройка конвейера обработки и потоковой передачи данных, а также настройка аппаратной и программной инфраструктуры.
Подведение итогов
Шаги, связанные с созданием генеративной видеомодели, сложны и состоят из предварительной обработки набора видеоданных и проектирования архитектуры модели, добавления слоев к базовой архитектуре, а также обучения и оценки модели. Генеративно-состязательные сети (GAN) или вариационные автоэнкодеры (VAE) часто используются в качестве базовой архитектуры, а емкость и сложность модели можно увеличить, включив в нее сверточные, объединенные в пул, рекуррентные или плотные слои.
Существует несколько приложений для генеративных видеомоделей, таких как синтез видео, тонификация видео и передача стилей видео. Существующие модели, ориентированные на изображения, можно научить создавать высококачественные художественные видеоролики с адаптируемыми настройками стиля. Область генеративных видеомоделей быстро развивается, и постоянно разрабатываются новые методы и модели для улучшения качества и гибкости генерируемых видео.
Вы очарованы возможностями генеративной видеомодели и хотите использовать ее возможности для повышения уровня своего бизнеса? Свяжитесь с neuroni.co сегодня, чтобы начать создавать собственную генеративную видеомодель и воплотить свое видение в реальность!