Дипломный проект на тему : « Проектирование и обучение нейронной сети для генерации изображений с TensorFlow » Дипломник : Свитнев А.С. Руководитель : Ладыгин Н.С. Мокшан 2025 МИНИСТЕРСТВО ОБРАЗОВАНИЯ ПЕНЗЕНСКОЙ ОБЛАСТИ Государственное бюджетное профессиональное образовательное учреждение Пензенской области «Мокшанский агротехнологический колледж»
Разработка и обучение нейронной сети для генерации изображений с использованием TensorFlow Цель дипломного проекта – разработка и обучение нейронной сети для генерации изображений с использованием TensorFlow. Данная цель определила следующие задачи: провести анализ существующих методов и архитектур генеративных нейронных сетей, спроектировать и реализовать архитектуру нейронной сети, реализовать процесс обучения модели и оценить качество генерируемых изображений. Объект исследования – модель нейронной сети, созданная для генерации изображений с использованием TensorFlow. Предмет исследования – процесс создания и обучения нейронной сети для генерации изображений с использованием TensorFlow.
Сравнение архитектур генеративных моделей Перед детальным подбором гиперпараметров VQGAN важно оценить её преимущества перед классическими подходами — Variational Autoencoder (VAE) и Generative Adversarial Network (GAN). Основные критерии сравнения включают FID (Fréchet Inception Distance), показывающий близость распределения синтезированных изображений к реальным, и SSIM (Structural Similarity Index), отражающий уровень структурного сходства. Как видно из сравнения, VAE обеспечивает быстрый тренинг, но даёт сглаженные результаты с низкой детализацией. GAN демонстрирует более высокое качество текстур, но страдает от тренировочной нестабильности. VQGAN предлагает лучший баланс между реализмом и стабильностью при разумных вычислительных ресурсах. Архитектура FID (↓) SSIM (↑) Скорость ( отн .) Память ( отн .) Краткий комментарий VAE 90–120 0.60–0.70 1.0 1.0 Быстрый тренинг, но сглаженные результаты, низкая детализация GAN 50–70 0.70–0.80 0.7 1.5 Более высокое качество текстур, но тренировочная нестабильность VQGAN 18–30 0.80–0.90 0.25 3.0 Лучший баланс «реализм ↔ стабильноcть » при разумных ресурсах
Что такое VQGAN? VQGAN представляет собой гибрид VQ-VAE и GAN, объединяющий дискретное квантование латентного пространства и состязательное обучение для фотореалистичной генерации изображений. Эта архитектура обеспечивает три ключевых преимущества: Дискретное представление: латентные векторы кодируются через фиксированный «кодбук», что устраняет размытость и сохраняет чёткие контуры. Adversarial-обучение: GAN-дискриминатор оценивает качество, стимулируя генератор к точной передаче текстур и деталей. Сбалансированная архитектура: связка encoder–quantizer–decoder–discriminator обеспечивает стабильность обучения и высокую выразительность при разумных вычислительных затратах. Иллюстрация конвейера VQGAN демонстрирует, как изображение проходит через энкодер, квантизатор, декодер и оценивается дискриминатором, что позволяет достичь высокого качества генерации при сохранении стабильности обучения.
Reconstruction Loss (MSE) и VQ Loss Reconstruction Loss Минимизирует среднеквадратичную ошибку между входным изображением и его реконструкцией. При λ_rec=1.0 достигается оптимальный баланс между чёткостью контуров и естественностью текстур. Codebook Loss Часть VQ Loss, которая обновляет «прототипы» в кодбуке. При β=1.0 обеспечиваются стабильные и разнообразные латентные коды. Commitment Loss Удерживает выходы энкодера рядом с выбранными «прототипами». Слишком высокие значения β приводят к слишком грубой квантизации и повышению FID. Эксперименты показали, что при фиксированных β=1.0 и λ_gan=0.1, оптимальное значение λ_rec составляет 1.0, обеспечивая SSIM=0.85 и FID=21.27. При более низких значениях наблюдается «мыльность» и размытые детали, а при более высоких – переобучение на шум и резкие скачки FID. Аналогично, при фиксированных λ_rec=1.0 и λ_gan=0.1, оптимальное значение β также составляет 1.0. При β=0.5 латенты «дрожат», а при β≥1.5 наблюдается слишком жёсткая дискретизация, приводящая к ухудшению метрик.
GAN Loss 1 Низкий λ_gan (0.05) Недостаточное влияние дискриминатора приводит к размытым текстурам и потере мелких деталей. 2 Оптимальный λ_gan (0.1) Баланс между реконструкцией и реализмом, обеспечивающий наилучшие метрики SSIM и FID. 3 Высокий λ_gan (0.2+) Чрезмерное влияние дискриминатора вызывает нестабильность обучения и появление артефактов. GAN Loss стимулирует генератор «обманывать» дискриминатор, что повышает детализацию и реализм генерируемых изображений. Эксперименты с различными значениями λ_gan при фиксированных λ_rec=1.0 и β=1.0 показали, что оптимальное значение составляет 0.1. При λ_gan=0.05 наблюдается недостаточное влияние дискриминатора, что приводит к размытым текстурам. При λ_gan≥0.2 возникает нестабильность обучения и появляются артефакты из-за чрезмерного влияния дискриминатора на процесс обучения.
Что такое TensorFlow? Архитектура и кастомизация Реализация encoder, decoder, discriminator и quantizer на базе tf.keras.Model/Layer с ручным обновлением кодбука и stop_gradient. Пайплайн данных tf.data.Dataset с .map(), .cache(), .prefetch() для быстрой загрузки и нормализация в [0, 1] с аугментациями. Обучение и оптимизация Отдельные оптимизаторы и функции потерь для генератора и дискриминатора, Gradient Clipping и Learning Rate Scheduler. Мониторинг и отладка TensorBoard для отслеживания reconstruction loss, VQ loss, GAN loss, SSIM, FID и обучение на Tesla T4 в Colab. TensorFlow стал ключевым инструментом для полного цикла VQGAN-проекта — от описания архитектуры до оценки результатов. Модульная структура TensorFlow позволила эффективно реализовать все компоненты системы и обеспечить их взаимодействие.
Роль TensorFlow в реализации генеративных нейросетей Реализация архитектуры Кастомные компоненты на базе tf.keras.Model и tf.keras.layers.Layer: энкодер, декодер, дискриминатор, квантующий слой. 1 Работа с данными Поток данных через tf.data.Dataset с оптимизациями .map(), .cache(), .prefetch() для быстрой загрузки изображений. Обучение и оптимизация Отдельные оптимизаторы для генератора и дискриминатора, Gradient Clipping и Learning Rate Scheduler. Мониторинг и отладка TensorBoard для отслеживания всех типов потерь и метрик: reconstruction loss, VQ loss, GAN loss, SSIM и FID. TensorFlow позволил эффективно реализовать все стадии жизненного цикла модели VQGAN — от описания архитектуры до финальной оценки и визуализации результатов. Это был не просто инструмент, а основа всего генеративного пайплайна. Благодаря гибкости TensorFlow удалось реализовать сложную архитектуру с кастомными компонентами, организовать эффективную работу с данными, настроить процесс обучения и оптимизации, а также обеспечить мониторинг и отладку всех аспектов работы модели.
Алгоритм анализа и подачи данных в приложение Загрузка и распаковка Скачивание датасета через библиотеку kagglehub и сохранение в рабочей директории для дальнейшей обработки. Формирование потоков данных Создание tf.data.Dataset с помощью image_dataset_from_directory() с параметрами: label_mode=None, batch_size=64, image_size=(128,128), interpolation='area'. Нормализация и аугментации Преобразование пикселей из [0,255] в [0.0,1.0] и применение случайных поворотов, отражений и шума при необходимости. Оптимизация потока данных Применение shuffle() для перемешивания выборки, cache() для кэширования обработанных изображений и prefetch() для предварительной загрузки следующего батча. Визуализация батчей позволяет отображать несколько примеров из каждого батча для проверки корректности ресайза и нормализации, что является важным этапом контроля и отладки процесса подготовки данных.
Используемый набор данных – Cat Dataset (Kaggle) Для обучения модели использовался публичный датасет "Cat Dataset" с Kaggle, содержащий 29 843 цветных изображения кошек различной породы, положения и условий съёмки. Изображения представлены в формате RGB с исходным разрешением 64×64 пикселя и средним размером файла около 9 КБ. Преимущества выбора данного датасета включают разнообразие образцов, что улучшает обобщаемость модели; высокое качество и чистоту данных; оптимальный объем, достаточный для обучения без чрезмерных затрат ресурсов; и отсутствие меток классов, что подходит для безусловного (unsupervised) обучения с фокусом на визуальных признаках.
Кастомный слой VectorQuantizer: принцип работы Назначение и структура Преобразует непрерывное латентное представление в дискретные коды, сопоставляя каждый вектор ближайшему «прототипу» из кодбука. Обеспечивает плотное, структурированное латентное пространство. Ключевые параметры num_embeddings = 255 — размер кодбука (число векторов-прототипов); embedding_dim = 4 — размерность каждого векторного кода; beta = 1.0 — вес commitment loss. Функции потерь Commitment loss (энкодер → коды), Codebook loss (коды → энкодер), VQ Loss = β·commitment + codebook. Применяется Straight-through estimator для прохождения градиента. Слой VectorQuantizer является фундаментальным компонентом архитектуры VQGAN. В процессе квантования происходит сжатие и дискретизация информации, что позволяет получить структурированное латентное пространство и эффективно управлять разнообразием генерируемых признаков.
Этапы работы слоя VectorQuantizer Flatten & Similarity Свертка входного тензора в матрицу (batch×h×w) × D и вычисление косинусного сходства с кодами из кодбука. Этот этап подготавливает данные для эффективного квантования в едином векторном пространстве. Квантование Выбор ближайших кодов путем минимизации евклидовых расстояний, формирование one-hot представления и восстановление квантованных векторов. На этом этапе происходит дискретизация непрерывного пространства. Расчёт потерь Вычисление Commitment loss и Codebook loss, объединение их в VQ Loss с коэффициентом β. Применение Straight-through estimator для корректного прохождения градиентов через недифференцируемое квантование. Реализация метода get_config() обеспечивает сохранение и загрузку слоя в формате H5, что важно для практического применения модели. Слой используется в архитектуре как vq_layer = VectorQuantizer(num_embeddings=255, embedding_dim=4, name="vector_quantizer").
Архитектура VQGAN: основные компоненты Энкодер Извлекает и сжимает информативные признаки из исходного изображения, формируя компактное латентное представление размером latent_size × latent_size × 4. VectorQuantizer Преобразует непрерывное латентное представление в дискретные коды из кодбука, создавая структурированное пространство. Декодер Восстанавливает изображение из дискретного латентного пространства, играя роль генератора в рамках GAN. Дискриминатор Определяет, является ли изображение подлинным или сгенерированным, выдавая скалярное значение для функции потерь GAN. Архитектура VQGAN объединяет преимущества вариационных автоэнкодеров и генеративно-состязательных сетей. Энкодер и декодер строятся на основе residual-блоков, что обеспечивает эффективное обучение глубоких сетей. Дискриминатор использует архитектуру PatchGAN для оценки реалистичности на уровне локальных участков изображения.
Реализация класса Model: интеграция компонентов Инициализация Объединение трёх подсистем: кодировщика, декодера и дискриминатора. Настройка трёх оптимизаторов Adam с единым шагом обучения и ограничением градиента. Прямой проход Кодировщик формирует латентное представление исходного изображения. Декодер восстанавливает изображение из латентного вектора. Оценка Дискриминатор проверяет "реальность" как исходного, так и восстановленного изображения. Вычисляются метрики качества и функции потерь. Обновление С учётом ошибок восстановления и оценок дискриминатора вычисляются три группы градиентов, которые обновляют параметры всех подсистем. Такой подход к реализации модели позволяет гибко настраивать скорость обучения отдельных компонентов и предотвращает резкие скачки в обновлении весов. Функция train_step объединяет все этапы в единый шаг обучения, что обеспечивает синхронное обновление всех частей системы.
Функция визуального тестирования и процесс обучения Визуальное тестирование Функция testing() предназначена для наглядной оценки качества восстановления изображений и убедительности генераций в глазах дискриминатора. Для выборки из нескольких примеров строится три ряда изображений: Исходное изображение с оценкой "реальности" Тепловая карта латентного слоя Восстановленное изображение с оценкой "фейковости" и SSIM Процесс обучения Обучение включает следующие этапы: Подготовка GPU с "динамической" памятью Инициализация модели с тремя оптимизаторами Adam Предварительный тест до начала обучения Основной цикл по эпохам (10) и батчам (64) Периодический мониторинг и визуализация Сохранение обученных компонентов Каждые 10 шагов вычисляется средняя потеря за интервал, выводится номер эпохи, avg_loss и SSIM, а также проводится визуальная проверка на 3 примерах через model.testing(3). Такой подход позволяет оперативно отслеживать прогресс обучения и качество генерации изображений.
Оценка качества генерации изображений 0.85 SSIM Структурное сходство между оригиналом и восстановленным изображением. Значение ≥ 0.85 указывает на хорошее сохранение ключевых деталей. 21.27 FID Fréchet Inception Distance — расстояние между распределениями признаков реальных и сгенерированных изображений. Низкий FID свидетельствует о высоком фотореализме. 16 Время обучения Минут на одну эпоху при использовании одного GPU Tesla T4, что является приемлемым показателем для модели данной сложности. 14 Видеопамять ГБ требуется для обучения модели, что соответствует ресурсам современных графических ускорителей среднего класса. Результаты оценки качества показывают, что разработанная модель достигает высоких показателей как по структурному сходству (SSIM), так и по перцептивному качеству (FID). Это свидетельствует об эффективности выбранной архитектуры и подхода к обучению, обеспечивающих баланс между точностью восстановления деталей и фотореалистичностью генерации.
Экономический анализ проекта Себестоимость разработки Основные затраты проекта приходятся на трудовые ресурсы: 15 рабочих дней при 8-часовом рабочем дне и ставке 200 ₽/час формируют базовую стоимость в 24 000 ₽. С учетом обязательных отчислений (30%) получаем 31 200 ₽ затрат на оплату труда. Электроэнергия и прочие ресурсы составляют незначительную часть: 30,53 ₽ за электроэнергию при использовании ноутбука. Важное преимущество — использование бесплатных облачных ресурсов и ПО. Формирование цены и эффективность При плановой прибыли 25% стоимость разработки достигает 39 038,16 ₽ без НДС. Конечная цена с учетом НДС (20%) составляет 46 845,79 ₽. Внедрение автоматизации снижает время генерации 1000 изображений с 50 до 5 часов, обеспечивая экономию 10 710 ₽ ежемесячно или 128 520 ₽ в год. При инвестициях в 96 845,79 ₽ (включая стоимость сервера 50 000 ₽) проект окупается примерно за 9 месяцев.
Заключение: достигнутые результаты и перспективы Проведённая работа Спроектирована гибридная модель VQ-VAE-GAN с дискретным латентным пространством Реализован слой VectorQuantizer с кодбуком K=255, размерностью D=4 Разработаны компоненты Encoder–Decoder на базе residual-блоков Создан Discriminator для adversarial-loss Настроен конвейер подготовки данных с аугментациями Достоинства решения Чёткое и структурированное латентное пространство, отсутствие «размытия» Высокое фотореалистичное качество изображений (FID ≈ 21.27) Устойчивое восстановление структурных деталей (SSIM ≈ 0.85) Масштабируемость и удобство отладки в TensorFlow Ограничения и перспективы Чувствительность к гиперпараметрам квантования (β, λ_gan) Значительные ресурсоёмкость при увеличении размера кодбука Возможности для дальнейшей оптимизации архитектуры Перспективы применения в более сложных задачах генерации Разработанная модель демонстрирует конкурентоспособные результаты по сравнению с современными генеративными архитектурами. Использование векторного квантования позволяет получить чёткое и структурированное латентное пространство, а интеграция с GAN обеспечивает высокое качество генерации. Дальнейшие исследования могут быть направлены на оптимизацию гиперпараметров и расширение применения модели для различных типов данных.