
Боб Росс (Роберт Норман Росс) — американский художник, преподаватель рисования и телеведущий, наиболее известный как ведущий популярной телевизионной программы «Радость живописи» (The Joy of Painting), которая выходила в эфир с 1983 по 1994 год.
В своих видеоуроках Боб Росс обучал живописи тех, кто не имел художественного опыта, и популяризировал технику «мокрый на мокром», которая предполагает наложение нового слоя краски на еще не высохший предыдущий. Такая техника позволяет быстро создавать законченные картины. Художник был известен своими пейзажами, часто изображал деревья, облака и горы.

ideogram.ai prompt: Landscape in a style of Bob Ross
Вот так с генерацией изображений в стиле картин художника справляется нейросеть Ideogram. По композиции получается похоже, однако совсем не видно текстуры красок и характерной спокойной цветовой гаммы художника, из-за чего стиль Боба Росса не считывается.
Цель проекта
Обучить генеративную нейросеть Stable Diffusion для создания изображений в стиле картин Боба Росса. Итоговые изображения должны не только включать в себя характерные элементы его пейзажей, но и передавать текстуру его картин.
Ход работы
Для обучения модели был собран датасет в объеме 10 квадратных изображений — картин художника Боба Росса.

Исходные изображения. Боб Росс
Шаг 1: импорт необходимых библиотек и модулей, которые будут использоваться для создания и обучения модели генерации изображений.
Основное: 1. библиотека PyTorch 2. from google.colab import files — для загрузки изображений, которые будут использоваться для обучения модели 3. класс StableDiffusionXLPipeline из библиотеки diffusers
Шаг 2: Загрузка файлов в Collab
В этой части кода обрабатываются загруженные файлы, сохраняются в текущей директории и создается список, содержащий пути к изображениям. Этот список будет использоваться для создания датасета, который затем будет использоваться для обучения модели.
Шаг 3: Преобразование изображений
transforms.Resize ((256, 256)) изменяет размер входного изображения, что поможет ускорить обучение модели.
Шаг 4: Настройка загрузчика данных для их подачи в модель
Создан датасет BobRossDataset и загрузчик данных (DataLoader) для датасета.
Шаг 5: загрузка модели Stable Diffusion XL Stable Diffusion XL из репозитория Hugging Face
Шаг 6: Проверка доступности GPU и перенос модели на него
Шаг 7: настройка метода LoRA для обучения под новую задачу
Шаг 8: Использование оптимизатора для обновления весов модели во время обучения, чтобы минимизировать функцию потерь
Шаг 9: Установка количества эпох обучения (проходов по датасету), значение — 2.
Шаг 10: Создание директории для организации и хранения сгенерированных изображений.
Шаг 11: Написание промпта и его повторение столько раз, сколько изображений в батче (len (images)). prompt = [«A serene landscape with in the style of Bob Ross».
Шаг 12: Генерация изображения с использованием модели Stable Diffusion XL, передача входных изображений модели, настройка силы влияния текстового описания на генерируемое изображение (guidance_scale=5.0).
Шаг 12: Сохранение сгенерированного изображения в файл.
Шаг 13: Удаление переменных, которые больше не нужны, чтобы предотвратить ошибку нехватки памяти
Результат
Результатом моей работы стала серия из 20 готовых изображений в стиле картин Боба Росса — наиболее удачные из них представлены ниже.
Удалось передать сюжеты и стилистические особенности художника: цветовую гамму его картин и текстуру «мокрой краски», которую можно заметить при ближайшем рассмотрении. Результат меня устроил, поэтому изображения дополнительно не обрабатывались.
Почти у всех изображений следующий сюжет: мягкие облака, деревья и горы. На некоторых сгенерированных изображениях также можно заметить хижины, они же присутствовали на оригинальных картинах художника, взятых для обучения. Таким образом, можно отметить способность модели генерировать уникальные работы в рамках заданного стиля.
Полная серия изображений доступна для просмотра по ссылке.
Описание применения генеративной модели
В работе также была использована нейросеть Merlin AI для следующих задач:
Импорт модуля gc для освобождения памяти, которая может быть занята неиспользуемыми объектами. Это помогло избежать ошибок нехватки памяти (OutOfMemoryError).
Уменьшение размера входных изображений и размер батча, чтобы снизить потребление памяти, так как ресурсы GPU были ограничены.
Перемещение модели и всех ее тензоров на GPU. Настройка параметров LoRA.
Использование autocast для смешанной точности torch.cuda.amp.autocast (): для автоматического приведения типов данных к float16, где это возможно, чтобы ускорить вычисления.
Запуск сборщика мусора, который освобождает память, занятую неиспользуемыми объектами (gc.collect ()).