Концепция проекта
Голландский натюрморт для эпохи доставки, пауэрбанков и маркетплейсов: обучение Stable Diffusion XL на 96 картинах из Рейксмюсеума и вещи нашего времени
В 1602 году в Амстердаме появилась Голландская Ост-Индская компания, одна из первых в мире акционерных корпораций. Через несколько лет на столах бюргеров лежало то, что раньше видели только короли: китайский фарфор, лимоны, перец, турецкие ковры, венецианское стекло. Именно тогда в Харлеме, Лейдене и Амстердаме расцвёл жанр, который голландцы называли просто «stilleven», «неподвижная жизнь».Натюрморт Золотого века работает как реклама и проповедь одновременно. Художник любуется серебряным кубком и устрицами так, что хочется протянуть руку. Но кубок опрокинут, у лимона снята кожура (снаружи красиво, внутри горько), рядом догорает свеча, тикают часы, а иногда лежит и череп. Подпись к этому жанру давно известна из Екклесиаста: «Суета сует, всё суета», по-латыни «vanitas vanitatum».Четыреста лет спустя на нашем столе тоже полно вещей, приехавших с другого конца света. Только это не лимоны и фарфор, а стаканы навынос, роллы из доставки, наушники, пауэрбанки и энергетики. Они так же красивы в момент покупки и так же быстро превращаются в мусор. Я решила проверить, что получится, если посмотреть на них глазами Виллема Хеды и Виллема Кальфа.
Правило серии простое: новая вещь встаёт на место старого символа и сохраняет его смысл.

Источники картин
Датасет собран из открытой коллекции Рейксмюсеума в Амстердаме, главного музея голландского Золотого века. Музей отдаёт изображения картин в общественное достояние (Public Domain Mark 1.0), а описания под лицензией CC0. Скрипт tools/fetch_rijks.py нашёл через API музея 230 картин со словами «stilleven», «vanitas», «ontbijt», «bloemen» и подобными в названии.
Отбор
Я отобрала 96 картин 68 художников из 140 кандидатов. Исключила:— сцены с людьми (кухарки, дети, служанки), где натюрморт — только фон;— гирлянды, картуши и обманки в светлых каменных нишах: другая живопись, другой свет;— натюрморты на фоне пейзажа;— картины, где крупно написан текст (газеты, письма, подписи на парапете), чтобы модель не училась рисовать псевдобуквы;— изображения в раме.
Каждую картину я описала по-английски: триггер vnts, жанр и список предметов:vnts, a breakfast still life, an overturned silver tazza, a roemer, a gilded beer tankard, a half peeled lemon on a pewter plate, olives, a knife.
Обучение модели
Stable Diffusion XL base 1.0 я обучала с LoRA: веса самой модели заморожены, в слои внимания UNet добавлены маленькие обучаемые матрицы. Готовый скрипт не использовался.
Один раз я прогоняла все 96 картин через VAE и все подписи через два текстовых энкодера SDXL. Результат хранила в памяти, энкодеры выгружала: на T4 освобождалось несколько гигабайт для UNet.На каждом шаге брала по две картины, добавляла к их латентам шум случайной силы и просила UNet угадать этот шум, зная подпись.Ошибку (MSE между настоящим и угаданным шумом) взвешивала по Min-SNR и обновляла только LoRA.
Noise offset
Обычная диффузионная модель плохо рисует очень тёмные и очень светлые картинки: при обучении средняя яркость шума всегда около нуля, и модель привыкает, что средняя яркость картинки тоже «серединка». Голландский натюрморт наполовину состоит из почти чёрного фона, и без поправки модель высветляет его до коричнево-серого. Приём noise offset добавлял к шуму небольшой общий сдвиг по каждому цветовому каналу, и модель училась менять общую яркость кадра.
Процесс работы
Генерация шла на двух видеокартах: на первой работала SDXL base 1.0 с LoRA vnts, на второй — SDXL refiner 1.0. Силу LoRA я задавала равной 0,8, снижая её до 0,65 для банок, букета и пончиков и до 0,5 для смартфона и корзины из супермаркета. Base снимал первые 80% шкалы шума (таймстепы от 999 до 200) и передавал недорисованный латент refiner’у, который дорабатывал остаток. Я использовала планировщик DPM++ 2M SDE Karras с 32 шагами, guidance scale 7 и разрешение 1024×1024.Промпт выглядел так: vnts, a dutch golden age oil painting, <жанр>, <предметы>, dark background. Средняя часть повторяла структуру подписей датасета, а начало и конец пришлось добавить: без них современные вещи модель рисовала как предметное фото сверху. Современную вещь я ставила в промпте первой и «в центр», классических предметов рядом — один-два. Негативный промпт перечислял photograph, flat lay, product photography, 3d render, cartoon и подобное.На каждую работу я генерировала четыре варианта с общим seed’ом; в качестве seed’ов взяла даты: 1602, 1637, 1648 и 1672. Из четырёх вариантов CLIP выбирал наиболее близкий к тексту промпта, после чего я проверяла выбор и в нескольких случаях его корректировала.
Экспозиция. Результирующая серия изображений
Серия развешана в три зала, как в музее: завтраки и банкеты, цветы и трофеи, ванитас. Под каждой работой этикетка, как в Рейксмюсеуме, только техника иная.
Зал I. Завтраки и банкеты
Завтрак с доставкой
Голландский «ontbijtje», скромный завтрак: хлеб, сельдь, бокал. В кадре — бумажный стакан кофе навынос и круассан на оловянной тарелке, а рядом стопка оловянных стаканчиков, как в настоящем ontbijtje.Пакет из доставки и зарядный кабель, свисающий спиралью, как кожура лимона у Хеды, в промпте тоже были, но модель их опустила: стол остался строгим и пустым, как у голландцев.
Банкет с энергетиками
Опрокинутая серебряная тацца на банкетах Питера Класа означала, что пир окончен и богатство непрочно. У меня на белой скатерти среди устриц стоят две красные банки энергетика: тот же жест, только вместо вина — бессонная ночь.Я просила добавить смятые банки, лежащие на боку, но модель поставила их прямо, как парадные кубки.
Устрицы и роллы
