Концепция
Туман, деревце, закат и максимум два персонажа в углу холста — формула сюжета большинства картин Каспара Давида Фридриха.
Его идеи будут актуальны всегда. Я очень люблю романтизм в целом, а Каспар Давид Фридрих — один из важнейших его представителей. Он был мастером пейзажа, но нельзя обойти стороной его подход к изображению людей и их месту в композиции: во-первых, герои кажутся крошечными по сравнению с окружающими их просторами; во-вторых, они чаще «отворачиваются», вглядываясь в необозримое, и тем притягивая к нему внимание зрителя. Сможет ли нейросеть считать эти приёмы? Это я выясню в результате своего проекта.
А ещё мне интересно попробовать воспроизвести свою любимую картину с помощью нейросети.
Исходные изображения
Для обучения я выбрала преимущественно те фрагменты картин, на которых есть наиболее характерные элементы стиля художника: величественные пейзажи и созерцающие их люди.
Каспар Давид Фридрих умер в 1840 году, его работы считаются общественным достоянием с 1940. 52 исходных изображения взяты из открытого источника Wikimedia и вручную скадрированы до 1024×1024.
https://commons.wikimedia.org/wiki/Paintings_by_Caspar_David_Friedrich

import glob
img_paths = «./CDF/*.jpg» imgs = [Image.open (path) for path in glob.glob (img_paths)]
num_imgs_to_preview = 5 image_grid (imgs[: num_imgs_to_preview], 1, num_imgs_to_preview)
Обучение модели

oil painting in FRIEDRICH style, urbanscape
Нейронка сразу, без дополнительных указаний в промптах, уловила любимые приёмы Фридриха: исчезающие в тумане дальние планы и рассеянный, сумеречный свет.
oil painting in FRIEDRICH style, a thick snowy conifer forest in winter
oil painting in FRIEDRICH style, still dark sea on a moonlit night
Отлично получилось уловить положение фигуры на «холсте» и позу героя, молчаливо наблюдающего за пустынной природой вокруг.
oil painting in FRIEDRICH style, person in countryside
Оптимизация работы
Я использовала довольно крупные изображения, поэтому, чтобы моей модели хватало памяти, периодически чистила кэш:
import torch torch.cuda.empty_cache () torch.cuda.reset_max_memory_allocated ()
import gc gc.collect () torch.cuda.empty_cache ()
Усложнение промптов
У Каспара Давида Фридриха бывали и ясные пейзажи, а у меня картинки норовят раствориться в дымке. Ещё и цвета запыляются так, что результат напоминает скорее работы Эндрю Уайета. Откат модели до чекпоинтов приводил к полной потере авторского стиля, поэтому я стала конкретнее прописывать в промптах желаемые цвета и погоду.
oil painting in FRIEDRICH style, a view of a peaceful, pastoral village in a green valley, surrounded by majestic cloudy mountains
Вот это уже другое дело. Усложнением промпта решаю проблему и на картинках с людьми.
oil painting in FRIEDRICH style, two men standing next to each other in the middle of a vast green field, admiring a bright sunrise over a forest far away
Здесь произошла заминка — я обнаружила, что модель попросту не умеет считать до двух. Мне очень хотелось с максимальной точностью воссоздать свою любимую картину: двое братьев любуются последними лучами солнца. К сожалению, в ответ на «2» и «two» модель с каждым разом выдавала всё больше и больше людей. Получается, эта цель проекта достигнута не была.
Но если очень хочется, можно представить, что на картинке выше запечатлены нужные мне герои и просто ещё один их брат — как ни странно, костюмы совпадают.
oil painting in FRIEDRICH style, 2 women look at the daytime sky next to a foggy river
Идеально воссоздана манера написания света, растений и скал, правдоподобны очертания вдали — корабли, руины или горы. Костюмы принадлежат нужной эпохе.
Героев на картинке в четыре раза больше, чем позволил бы себе написать Фридрих.
oil painting in FRIEDRICH style, men climbing rocks to see the sunset
oil painting in FRIEDRICH style, a man wearing a hoodie and a backpack sits at night, watching the moon over a dark, busy night-time modern city
Во времена, когда жил мой любимый художник, жизнь была совсем другой. Но я думаю, что он проникся бы способностью урбанистического пейзажа внушать чувство меланхолии. Человек, в одиночестве оказавшийся в современном городе, ощущает себя таким же маленьким, как и герои Фридриха в окружении бескрайних гор и пустошей.
Мне удалось убедить модель, знакомую только с модой, архитектурой и климатом XVIII века, изобразить персонажа в двух худи сразу и мегаполис в режиме чёрного неба.
На некоторых генерациях можно заметить контрастную полоску наверху — в некоторых исходниках на этом месте оставалась видна тень от рамы или незаписанный фрагмент холста.
oil painting in FRIEDRICH style, a woman with a bonfire in a dark forest at night
Персонажей среднего и крупного размера модель освоила с лёгкостью, их масштаб относительно ландшафта вполне сопоставим с оригинальными картинами.
oil painting in FRIEDRICH style, snowy steppe with a lonesone walker in the distance
Упрощение промптов
Я немного расстроилась, что мои любимые крохотные фигурки в отдалении модель не замечала и не воспроизводила, хоть изображения и были скадрированы с фокусом на них. Я решила, что на них просто не хватило разрешения, сдалась и начала создавать обычный пейзаж, как вдруг…
oil painting in FRIEDRICH style, lake
Приглядитесь к туманному озеру: через него на лодке переправляется путешественник! В промпте персонажа не было, но с некоторой долей вероятности маленькие человечки всё же появляются на генерациях.
oil painting in FRIEDRICH style, a rye field
Приятно удивлена, что по запросу «поле» я получила не только бескрайнюю рожь, но и мельницу в отдалении — по заветам Каспара Давида Фридриха, полуразрушенную. «Человек» тоже вышел характерным — правда, снова с намёком на Уайета.
oil painting in FRIEDRICH style, person
Ещё интересна в этой генерации подпись в левом нижнем углу, нехарактерная для моего художника и отсутствующая в примерах для обучения. Предполагаю, что она возникла из-за словосочетания «oil painting» в промптах и своеобразной его трактовки через установленную библиотеку datasets:
! pip install datasets -q
Моя любимая генерация
У этой картинки достаточно ординарный промпт, она не отличается от других по стилю — что же в ней особенного?
Чтобы понять это, нужно сравнить её с картиной Каспара Давида Фридриха «Меловые скалы на острове Рюген»: герой в той же позе смотрит вдаль и вниз, обрамлённый ветвями деревьев. При этом «Скалы» не вошли в мой датасет для обучения — там нет дымки, характерной для поздних полотен, и я не хотела сбивать с толку модель. Тем не менее композиция этой картины независимо проникла в мой проект. Поэтому можно с уверенностью сказать, что обучение удалось.
oil painting in FRIEDRICH style, a hiker in a forest clearing
Каспар Давид Фридрих, «Меловые скалы на острове Рюген», 1818
Этот результат — ещё и отрезвляющее напоминание: то, что ИИ может «придумать сам», вероятно, уже придумано автором оригинала. Даже если нейросеть об этом не подозревает.
Для создания изображений проекта я обучала генеративную нейросеть Stable Diffusion с DreamBooth и LoRA. Разрешение обложки повышено с помощью сервиса iLoveIMG.




