Концепция
Туман, деревце, закат и максимум два персонажа в углу холста — формула сюжета большинства картин Каспара Давида Фридриха.
Его идеи будут актуальны всегда. Я очень люблю романтизм в целом, а Каспар Давид Фридрих — один из важнейших его представителей. Он был мастером пейзажа, но нельзя обойти стороной его подход к изображению людей и их месту в композиции: во-первых, герои кажутся крошечными по сравнению с окружающими их просторами; во-вторых, они чаще «отворачиваются», вглядываясь в необозримое, и тем притягивая к нему внимание зрителя. Сможет ли нейросеть считать эти приёмы? Это я выясню в результате своего проекта.
А ещё мне интересно попробовать воспроизвести свою любимую картину с помощью нейросети.
Исходные изображения
Для обучения я выбрала преимущественно те фрагменты картин, на которых есть наиболее характерные элементы стиля художника: величественные пейзажи и созерцающие их люди.
Каспар Давид Фридрих умер в 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
Упрощение промптов




