Концепция
Я с детства безумно люблю ягоды. Но в последние годы я ем их очень редко. Во-первых, они стали стоить как-то совсем неразумно дорого. А во-вторых, даже если купить — они часто на вкус как вода или пластмасса. Ни сочности, ни аромата, одно разочарование. Так редко я их ем, что у меня началась некоторая тоска по ягодам. Когда я придумывала идею для этого проекта, очередная тоска по вкусу свежих ягод накрыла меня, и я решила посвятить этому проект.
Раз уж у меня нет возможности поесть действительно вкусных и свежих ягод, я решила хотя бы сделать максимально аппетитные изображения. Удовлетворить свой голод визуально, так сказать. Чтобы смотреть на них и чувствовать ту самую радость, которую раньше дарил настоящий вкус.
Да и, более того, как дизайнеру мне могут понадобится изображения сочных ягод, которые я смогу использовать в своей работе.
Датасет
Я собрала датасет из 100 фотографий. Однако все эти фотографии были разного разрешения и соотношения сторон. Поэтому сперва мне пришлось переработать датасет, чтобы каждая из 100 фотографий была сжата и обрезана до единого квадратного размера.
Этот код подготавливает изображения ягод для обучения. Функция crop_to_square обрезает каждое фото до квадрата — можно вырезать центр, случайную область или левый верхний угол. Вторая функция process_dataset проходит по всей папке с исходными фотография, применяет обрезку ко всем фото и при необходимости уменьшает их до нужного размера (в моём случае до 768×768 пикселей). В конце я получаю папку с аккуратными квадратными изображениями одинакового размера — такими удобно кормить нейросеть.
Обучение модели и генерация
Сначала код проверяет, есть ли готовые текстовые описания. Если нет — создаёт их с помощью нейросети BLIP, которая описывает каждое фото. К описанию добавляется префикс «a macro photo of fresh berries,» — чтобы модель понимала, что это крупный план свежих ягод.
Далее запускается обучение. Разрешение 768 пикселей — это сохраняет детали текстуры и сочности (мммм~). Обучение длится 500 шагов, чтобы модель хорошо проработала форму, цвет и блеск ягод. Learning rate чуть ниже стандартного, планировщик скорости — «косинус», это помогает плавно настраивать процесс. Модель учится по фотографиям и их подписям.
Здесь запускается финальная генерация. Код очищает память, чтобы всё работало стабильно, затем проходит по списку промтов и для каждого создаёт изображение. Генерация занимает 30 шагов, параметр guidance_scale отвечает за то, насколько строго модель следует описанию. Каждое готовое изображение сохраняется в папку с результатами, в названии файла есть номер и время создания, чтобы не перепутать.
Итоги генерации
Для начала я решила сгенерировать несколько простых картинок с кучей сочных ягод. В основном они получились достаточно правдоподобными и вкусными на вид. Если приглядеться, можно заметить некоторые дефекты: где-то ягоды сливаются между собой, зеленые листики ведут себя не совсем правильно. Однако общее впечатление остается достаточно хорошим.
Два экземпляра получились особенно милыми.
Дальше я решила сгенерировать несколько изображений ягодных десертов. В работе с фоном на изображениях этой серии появились достаточно заметные дефекты (вроде куска чего-то стеклянного на столе на первой картинке). Но в моем датасете не было фотографий подобного формата, так что ничего удивительного.
Однако общее впечатление все еще остается достаточно приятным и аппетитным, как мне кажется.
После я решила поэкспериментировать со стилем и создала эпичную серию. Эта серия вышла яркой, интересной, динамичной. Однако нейросеть в некоторых местах сильно перестаралась, сделав финальную картинку совсем уж неправдоподобной (в работе со льдом на первой картинке, например).
Устав от эпичности и искусственности, я захотела сделать маленькую серию, в которую вошли три изображения, как будто снятые на камеру телефона на даче в ясный летний день. Мне кажется, эта серия получилась самой атмосферной, самой теплой, хотя в некоторых местах ягодки тут выглядят не очень реалистично, и видны небольшие дефекты.
Вдохновившись предыдущей серией, я сделала еще одну, главной особенностью которой стал упор на уют. И в этот раз картинки с более сложной композицией получились сильно более «поломанными». Да и добиться такой же по уровню сильной атмосферности, как у предыдущей серии, не получилось. Наверное, это из-за отсутствия солнечных бликов и «студийности фотографий».
Последним моим экспериментом стала серия «нарисованных» изображений. Мне кажется, они получились достаточно колоритными, и из-за вольности художественного стиля особых дефектов на них не заметно.
*Для «фикса» некоторых моментов кода и для написания серий промтов по отдельным темам был использован chat deepseek




