Идея проекта для обучения ИИ
Для проекта я решил обучить нейросеть стилю Рембрандта, а именно сфокусировать его на контрастный драматичный стиль, свойственный картинам художника
Примеры картин для обучения нейросети:
Результат обучения:
Портрет ученых за работой
Промпт: portrait of a scientist in his study, oil painting in rembrandt style, dramatic lighting from window, warm colors
Музыкант играет на скрипке
Промпт: a musician playing violin in a dimly lit room, rembrandt style, chiaroscuro, golden light
Старик читает книгу у свечки
Промпт: old man reading a book by candlelight, rembrandt style, dramatic shadows, warm tones
Чему удалось обучить нейросеть:
Я хотел, чтобы нейросеть создала примерные изображения в стиле Рембрандта, в которых главная часть — работа с освещением и композицией, постановкой кадра, а также работа с цветами. В идеале, нужно было передать и влияние от инструментов и формата сохранения картин — мазки кистей и небольшие повреждения от засохшей краски, проверки времени. В плане контекста и наполнения я хотел обучить нейросеть глубоким и задумчивым взглядам, которые Рембрандт передаёт через лица и физиологию, или тёмное окружение пространства
Большую часть удалось передать, особенно цвета и стиль освещения. Но выделяются пробелы в детализации: лица могут теряться, если на них не идёт фокус, в них не хватает анатомической точности. Нейросети тяжело схватить равную степень детализации для всех картин, это особенно хорошо видно на портрете с музыкантом
Детали генерации:
Использовалась техника LoRA с рангом 16, чтобы уменьшить размер модели обучения с 5 гб до 10 мб.
Aspect ratio bucketing использовался для сохранения оригинальных пропорций изображения
Class prior preservation сохраняет способность модели генерировать объекты, не связанные со стилем
Промпты подбирались вручную для тестирования разных аспектов стиля
Stable Diffusion v1.5 из трёх основных компонентов: VAE, Text Encoder и UNet, первые два берут заготовленные файлы, а третий предсказывает шум для денойзинга и обучается через Low-Rank Adaptation
Learning rate отвечает за скорость, batch size за ограничение памяти, max train steps за количество шагов для обучения на основе 20 изображений, optimizer для стабильности, gradient checkpointing для экономии памяти
Каждые 50 шагов генерируются валидационные изображения по фиксированному промпту
Всё работает на основе GPU для использования accelerator’a
В качестве результата выдаются тестовые генерации по заготовленным промптам.
Помимо обученной нейросети использовался ChatGPT, GitHub Copilot и Hugging Face Diffusers