Telegram Web Link
eDiffi: новая SOTA text-to-image диффузионная модель от Nvidia, которая также хорошо умеет в style transfer и генерацию картинок по скетчам (!)
#paper

Авторы eDiff пристально посмотрели на то, как происходит генерация картинок диффузионными моделями, и нашли две интересные особенности. Эти особенности они затем использовали для построения более эффективной архитектуры модели.
Вот что за особенности:

1️⃣ Как мы знаем, диффузия генерирует картинку шаг за шагом, на каждом шаге чуть уменьшая зашумленность картинки. Ребята из Nvidia внимательно посмотрели на этот процесс и заметили, что на первых шагах алгоритма (когда картинка представляет из себя практически гауссов шум), значения матрицы cross-attention между пикселями картинки и эмбеддингами текста довольно большие. Т.е. это значит, что на первых шагах алгоритм сильно опирается на текст, чтобы сгенерировать следующую картинку. А на последних шагах алгоритма, когда картинка уже почти готова и шума осталось мало, значения матрицы cross-attention малы. Это значит, что модель практически игнорирует текст на этом этапе.
Это звучит логично: на первых шагах входящая картинка — это просто случайный шум, и модель “смотрит” на текст, чтобы понять, что вообще генерировать. А на последних шагах все объекты на изображении уже расставлены, и задача модели — добиться визуальной красоты, убрать малый остаточный шум, причесать детали.

В связи с этим авторы предположили, что иметь лишь одну модель для всех стадий генерации картинки из шума не оптимально. Она ведь, по сути, разные задачи на разных этапах решает. Поэтому они педложили сделать три модели: одну для начальных этапов (когда нужно сильно смотреть на текст), вторую для середины процесса, третью — для финала (когда нужно “причесывать детали”).
Чтобы сильно не увеличивать время обучения (три модели обучать дороже), авторы сначала обучают одну модель, как обычно это и делается, и затем делят ее на три и немного дообучают их каждую для своей стадии.

Эта идея позволяет получить SOTA диффузию на датасете COCO 2014, и обойти Imagen, Parti, Stable Diffusion и другие модели.

2️⃣ Идея номер два связана с то, каким образом получаются эмбеддинги текста. Мы помним, что DALL-E 2 использует эмбеддинги предобученного CLIP, а Imagen и многие другие модели — эмбеддинги из языковой модели T5 (тоже предобученной). Переход от CLIP к T5, казалось бы, улучшил результаты: детали генерируемых картинок стали более четкими, на них даже начал появляться осмысленный текст.
Однако не все так однозначно (эта фраза вызвала нервную улыбку, простите)). Похоже, эмбеддинги CLIP и T5 каждый по-своему хороши. Диффузия с эмбеддингами CLIP позволяет получить более “цельно” выглядящую картинку, все детили которой хорошо согласуются между собой. Эмбеддинги T5 же делают детали картинки более проработанными.

Идея тогда проста: обучать сеть на обоих эмбедднгах сразу. И это помогает: картинки становятся в целом еще лучшего визуального качества. Метрика FID-CLIP для такой модели также выше, чем для моделей, обученных только с CLIP или только с T5.

Вот такая общая идея модели. Лакончично и практично. Но и это еще не все: авторы также придумали, как делать классный style transfer и генерацию изображений по скетчам. Об этом будут следующие посты⬇️

📃 Статья
🔥23👍7🤮2👎1
Style Transfer с помощью eDiff

Идея проста: давайте в качестве condition для модели будем использовать не только эмбеддинги текста из CLIP и T5, но еще и эмбеддинг картинки из CLIP. Берем картинку, стиль которой хотим перенести, получаем ее эмбеддинг из CLIP, подаем на вход модели в качестве еще одного condition. Обучаем модель таким способом.

Результаты крутые!

Надо сказать, что тдельную модель для style transfer обучать не нужно: это все еще та же модель из поста выше. Просто при ее обучении иногда использовали эмбеддинг картинки из CLIP’а в качестве condition, иногда — нет. В итоге модель умеет генерировать картинки как обычно, и еще делать style transfer.
🔥15👎1🤮1🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
Генерация картинки по скетчу с помощью eDiff

Интерфейс такой: вводите текстовый запрос и рисуете скетч: примерные расположения и формы объектов на картинке. Каждой нарисованной форме ставите в соответствие слово из своего текстового запроса. И модель сгенерирует по тексту картинку, на которой объекты будут в примерно нужных местах и примерно нужных форм.
Иллюстрация — на видео к посту.

Как это работает:
Снова очень просто. Авторы берут картинку, которую рисует юзер, переводят ее в бинарные маски для каждого слова. Маска размера самой картинки: 1 там, где пиксели должны соответствовать слову, 0 — в остальных местах. Эти маски затем подаются в слой cross-attention. Вычисление cross-attention при этом чуть меняется: к произведению QK добавляется wA, где A — маска, w — вес, с которым она входит в формулу. Авторы статьи меняют вес w в зависимости от стадии генерации картинки.
Подробнее — в разделе 4.3 статьи

На сайте проекта можно найти больше примеров style transfer и рисовалки по скетчу. Онлайн-демки пока не нашла, но, надеюсь, скоро завезут.
🔥42👍4🤯3👎1🤮1💩1🙏1🐳1
И снова: помните курс Mathshub по созданию ML-продуктов? Я на нем занятия по CV читала и вас туда приглашала, а еще рассказывала про его классную основательницу Айру и ее подкаст.

Так вот, ребята запускают новые программы в школе, и в связи с этим ищут в команду сильных преподавателей по Python. Ниже — краткая информация о школе и о вакансии, а также контакты для вопросов и подачи заявки.

Mathshub - международная школа программирования и Data Science. Создатели школы - практики и предприниматели, построившие карьеру в разработке и управлении продуктов с машинным обучением в Яндекс, Mail.Ru Group, Alfabank, Ozon, МВидео, Aitarget с опытом преподавания в ВШЭ, МФТИ, Y-DATA.

Требования к кандидатам:
- Отличное знание языка Python;
- Опыт преподавания более 3х лет(обсуждаемо);
- возможность быстро подключиться к программе.

Что нужно делать:
⁃ Проводить живые групповые уроки 2 раза в неделю (лекции и семинары);
⁃ Создание программы занятий и домашних заданий.

Вилка — ~5000р за 1.5-часовое занятие (обсуждаемо)

Как откликнуться:
⁃ Чтобы откликнуться на вакансию, заполните эту форму: https://forms.gle/K5LtwbZZ6tP2n6LY6
⁃ Если вам не придет ответ на почту, свяжитесь с Дианой в тг: @diswana

P.S. кажется, пора воодить тег #job
52🤮41👍14🔥9🤡3🤓3💩2🌚2👎1🤔1🕊1
Ребята, объясните мне, почему вы ставите блюющие и другие странные смайлики к посту выше. Это даже не реклама, тем более не реклама чего-то, в чем я не уверена. Очень интересно.
🤔30🤮18🤡63💩3👍2👌2🕊2😢1🐳1
Спасибо всем за диалог под постом выше!

Скажу пару слов ещё:
- я не переживаю из-за самого наличия странных смайлов на постах. Все, что я хотела — узнать, почему некоторые люди поставили их на пост. Эти смайлы — это обратная связь, которую я хотела расшифровать.

Обратная связь мне действительно важна, я к ней всегда открыта и благодарна за нее. Через нее я больше узнаю о мире и могу корректировать свою деятельность. Я ни в коем случае никогда не считаю, что я точно права, все знаю, и что моя позиция — самая правильная. К примеру, так бывает, что я могу считать классным что-то, что, по вашему мнению, таковым не является. Или сделать ошибку в посте про какую-нибудь нейронку. Так бывает. Даже было совсем недавно, когда я писала пост про нейронку в нейрофизиологии: в этой сфере я не являюсь экспертом, и люди в комментариях указали мне на проблемы и помогли мне больше про это понять.

В общем, ваша обратная связь помогает мне подправить мою картину мира и узнать что-то новое. Именно поэтому мне так важно понимать обратную связь и развиваться.

Спасибо тем, кто эту обратную связь конструктивно даёт :)

- ну и ещё раз о рекламе. Нативной рекламы здесь нет. Если я говорю, что мне что-то нравится, то это действительно так. Если я говорю, что что-то классное, то я действительно так считаю. Стараюсь быть как можно более открытой и прозрачной во всем.

Платная реклама всегда помечена тегом #промо. В этом случае текст рекламы чаще всего прислан рекламодателем, и там бывает реклама продуктов, которые я не знаю изнутри. Но даже в этом случае я часто правлю текст рекламы, чтобы там не было фраз, под которыми я не готова подписаться, и убеждаюсь, что этот продукт я готова рекламировать. Как писала выше, ошибки все равно бывают, но это нормально. Главное — учитывать их на будущее, что я стараюсь делать.

Ещё более подробно о своем отношении к рекламе я ещё писала тут

Всем хорошего вечера! ❤️
84🕊16👍6🤮6🥰3💩3🤡3👏2🐳1🌚1🏆1
Самый первый выпуск подкаста Deep Learning Stories был посвящен собеседованиям в AI Research. Гостем был Александр Петюшко — мой бывший тимлид и человек с богатым опытом собеседований.

Вообще, изначально никакого подкаста и в мыслях не было. Дело было так: в сентябре 2021 сразу пара человек за неделю спросили меня, как попасть на работу в DL Research. Кого берут, к чему готовиться. У меня опыт прохождения мной собеседований не такой обширный, а опыт собеседования других и вообще никакой. Поэтому я задала этот вопрос Александру, в то время он был моим тимлидом. И он сказал буквально следующее: “у меня накопился довольно обширный опыт, много мыслей на эту тему, а поделиться не с кем”. Так и родилась идея записать видео на тему собеседований, которая потом переросла в идею полноценного подкаста.

Так вот, к чему я. Тот выпуск был полностью посвящен собеседованиям. Но Александр — это человек, который имеет богатый опыт работы в RnD (например, с недавних пор работает в сфере создания беспилотных автомобилей), а также горячо любит и занимается (в меру возможностей) теоретическими основами и границами их применения в DL. Короче, тем для разговора с ним еще много.

Поэтому в эту среду мы планируем записать еще один выпуск подкаста Deep Learning Stories с Александром. Посвящен он будет математике и теории в Deep Learning. Примерные темы такие:
- нужна ли математика в ML/DL;
- математика и теория ML/DL - одно и то же или нет?
- где конкретно математика нужна (в какого рода исследованиях и компаниях);
- какие направления математики востребованы в индустрии;
- нужна ли математика для создания беспилотников.

И, как обычно перед записью выпусков, мне нужны ваши вопросы гостю. Что про математику в DL вам интересно узнать, какие вопросы задать Александру?

Пишите вопросы в комментарии к посту ⬇️

P.S. Этот выпуск будет посвящен в первую очередь математике, не беспилотникам. Если вам интересна тема беспилотников, мы можем поговорить на эту тему в следующих выпусках =)
Пока что можете посмотреть недавнее выступление Александра в UC Berkeley на тему проблем беспилотных автомобилей.
👍59🔥15❤‍🔥3💩32👏2
Набор ссылок для изучения диффузионных моделей
#learning

Я тут свой Ph.D. начала, и тема моего рисерча связана с диффузионными моделями. Ботать я их начинала еще намного раньше, где-то полгода назад, а сейчас я пытаюсь еще глубже понять математику внутри, advantages и limitations этих моделей. И у меня уже накопилось довольно много ссылок на матеарилы, которые помогут разботать диффузию: как на простом уровне, так и поглубже. В этом посте постараюсь их собрать.

Лонгрид про диффузионные модели в блоге Lilian Weng из OpenAI. В нем, с одной стороны, достаточно математики (без нее в диффузии уж вообще никак), с другой стороны — довольно понятно. Лонгрид еще и дополняется по мере развития области.
Вообще в ее блоге много статей и на другие темы. Например, последняя про математику в NTK — очень интеерсная тема. Как-то даже начинала ей заниматься, но потом жизнь повернулась чуть по-другому.

Несколько ссылок по intro to diffusion models чуть попроще:
- Diffusion Models Made Easy (towardsdatascience);
- How diffusion models work: the math from scratch;
- The annotated Diffusion Model (туториал на huggingface с кодом).

Если вы читаете один пост и после него вам осталось что-то непонятно, советую открыть другой: часто лучшее понимание в голове собирается за счет прочтения одной и той же темы в разных источниках, разных подачах.

Если вам больше нравится видео:
- Туториал по диффузии с CVPR-2022 от Nvidia и Google Research. Изначально туториал проводился на конференции, но к нему было столько общего интереса, что ребята решили записать его еще раз для широкой аудитории. Теперь можно смотреть на ютубе.
UPD: этот туториал крутой: очень понятный (посмотрела пока первые 30 минут)

После того, как основы изучены (или вы сразу хотите по-хардкору), можно переходить к научным статьям. Вот ссылки на основные две:
- Denoising Diffusion Probabilistic Models. Это статья, с которой все началось в 2020 году, когда диффузию применили к генерации картинок и она отлично заработала.
- Denoising Diffusion Implicit Models. Эта статья предлагает модификацию стандартной диффузии (DDPM), которая обладает хорошими свойствами и часто используется.

И, напоследок: github-репо с огромным набором ссылок на статьи/видео/etc, связанных с диффузией. Есть разделение по темам: introductory posts/papers/videos, обзоры, диффузия применительно к текстам/картинкам/3D и т.д. Также дополняется.

Пост может дополняться по мере нахождения новых материалов. Если у вас есть ссылки на хорошие материалы по диффузии — welcome to комментарии =)
77🔥32👍7🤩3🐳2
Помните, были дипфейки раньше популярны? На их основе еще всякие мошенники делали картинки/видео с разными людьми и деньги вымогали.

Нас ждет новое поколение дипфейков, основанное на диффузионных моделях, способных изменять картикни. Например, на тех, о которых выше были посты. Подобные модели ужекачественно меняют детали изображений, а через пару месяцев-лет, верю, докрутят еще получше.

Встает вопрос: как от этого защититься? Как сделать так, чтобы из селфи из инстаграма не нагенерили дипфейков?

Исследователи из MIT занялись этой проблемой и сделали тулзу, которая добавляет к вашей картинке небольшой шум и делает так, что вашу картинку не получится изменить, используя диффузионную модель. Короче, они изобрели adversarial attack на диффузионные модели. Общая иллюстрация идеи — на картинке к посту.

Атака работает привычным нам способом. Модель для измнения картинок — это обычная text-to-image диффузия с condition’ом в виде картинки, которую нужно изменить. Есть два варианта атаки на такую модель: атака только на механизм condition и атака на всю систему целиком.

- Атака на condition mechanism. Идея: мы пытаемся так несильно изменить входящее изображение, чтобы его эмбеддинг был как можно ближе к эмбеддингу случайной картинки. Это заставляет tetx-to-image модель игнорировать детали входящей картинки и генерировать абсолютно новую картинку, основываясь только на тексте. Пример работы — 2 картинка к посту.
- Атака на всю сеть. Это обычная adversarial attack по типу FGSM с единственным нюансом: градиенты считаются только на последних четырех шагах диффузии. Но этого оказывается достаточно, чтобы сломать процесс изменения картинки. Пример работы этой атаки — на 3 картинке к посту.

Ограничения такого подхода такие же, что и у любых adversarial атак:
- работает для конкретной модели, т.е. white-box;
- требует довольно большого количества памяти (но работает при этом довольно быстро)


Ссылки:
- Блогпост от MIT.
Позащищать свои селфи перед загрузкой в запрещеннограм:
- Код на GitHub.
#paper
👍374🤮2🔥1
Наткнулась на вот такую статью: Sleep prevents catastrophic forgetting in spiking neural networks by forming joint synaptic weight representations
#paper

TL;DR такой:
Всем известно, что одна из функций сна — консолидация памяти. После хорошего сна отлично помнится все, что делал накануне, и даже если сегодня начинаешь учить что-то новое, выученное вчера не забывается.
У нейросетей же есть довольно важная проблема: catastrophic forgetting. Заключается она в том, что если обучать нейросеть на задаче А, а затем на задаче B, то нейросеть забудет задачу A.
Обычно эта проблема решается тем, что сеть тренируют одновременно на обеих задачах. Скажем, пару итераций на А, затем пару итераций на B. Проблема в том, что этот подход требует одновременной доступности данных для обеих задач и плохо скейлится.

Авторы этой статьи предлагают посмотреть на то, как это решается у людей (т.е. сном) и изобрести искусственный “аналог сна” для нейронок. Общая идея обучения сети со “сном” такая: учим нейросеть на задаче А, затем на задаче B, затем запускаем “сон”. “Сон” (кажется) состоит в том, что наиболее сильные связи между нейронам начинают искусственно симулироваться сигналами, распределенными по Пуассону ("hidden layer neurons were artificially stimulated by Poisson distributed spike trains in order to maintain spiking rates similar to that during task training”). Это, говорится в статье, напоминает активность нейронов в головном мозге во время REM-фазы сна, которая отвечает за консолидацию памяти.

Так вот, после такого обучения нейросеть начинает решать обе задачи на приемлемом одинаковом качестве.

Надо сказать, что в статье задачи A и B были суперпростыми, и ставились в парадигме RL. Поэтому далеко не факт, что метод будет применим для реальных нейросетей. Но в статье приведено много анализа работы нейросети в режиме сна и без, и это вселяет надежду. Поэтому идея мне показалась интересной.

Однако полностью механизм “сна” я понять не смогла. О том, как он устроен, в статье написана одна строчка (та, что приведена выше), и, кажется, чтобы понять все, нужно разботать Spike-timing-dependent plasticity (STDP, это что-то из нейробиологиии) и spike neural networks.

Поэтому: если тут есть люди, которые в этом понимают и могут описать идею статьи в небольшом тексте, я была бы очень рада ваш разбор прочитать и выложить в канал. Ну или просто разобраться в комментариях под постом.

Статья
34🔥17👍11😴8❤‍🔥1
Вспомнила благодаря статье из поста выше, что хотела заботать основы нейробиологии. В конце концов, кажется, скоро много новых идей в AI будут основаны на биологических нейропроцессах.

Мне рекомендовали вот этот курс по основам нейробиологии от университета Чикаго. Говорят, доступно и емко. А еще week 4 курса — про Perception and Vision. Суперполезно для лучшего понимания того, как работает зрение, и насколько разные модели AI на это похожи/далеки.

P.S. В комментариях еще релевантных ссылок кидают⬇️
👍34🔥114
В эти выходные проводим заключительный хакатон от проекта "Практики будущего". Собираем вместе аналитиков, дизайнеров, журналистов, чтобы делать проекты, которые изменят то, как мы видим будущее.
#промо

Вообще мы давно хотели собрать кейсы, которые нам кажутся важными. Формат супер-интенсивный, но чтобы успеть ещё отоспаться – с вечера пятницы до вечера субботы, 25-26 ноября. Хакатон заточен под создание небольших, но действительно работающих решений. Можно подключиться онлайн из любой точки мира, а можно прийти на площадку в Петербурге, на Мойке, и наконец познакомиться лично.

Регистрация: https://talent.kruzhok.org/events/3795

Описание кейсов и все подробности: https://practicingfutures.org/data

Кейсы мы получили у экспертов Медицинского центра ДВФУ, Новосибирского государственного университета, Института цитологии и генетики СО РАН, Института химической биологии и фундаментальной медицины СО РАН, проекта «Сетевые исследования» и издания MR7.ru.

Среди кейсов
:
– создание туристических маршрутов на основе данных,
– сбор данных для улучшения диагностики болезни Паркинсона,
– обработка данных о транскриптомном ответе на коронавирус у человека,
– визуализация данных об архитектурных памятниках, которым грозит уничтожение,
– исследование влияния рынка российского дизайна на мировой рынок,
– исследование рынка российских СМИ.

Приходите сделаем классное, научимся новому и пообщаемся!
👍6
⬆️Платную рекламу в канале я сейчас не делаю, так как (как видите) регулярно писать посты у меня пока не выходит. Морально сложный этап в жизни) А делать рекламу без достаточного количества постов между ними я не хочу.

Но пост выше — про хакатон, который делает моя подруга Тася. Она попросила меня рассказать вам о хаке. Тася делает образовательные проекты, и делает их очень хорошо. Так что приходите на хакатон — организация будет точно топ.
👍438👎1
DLStories
Самый первый выпуск подкаста Deep Learning Stories был посвящен собеседованиям в AI Research. Гостем был Александр Петюшко — мой бывший тимлид и человек с богатым опытом собеседований. Вообще, изначально никакого подкаста и в мыслях не было. Дело было так:…
Выпуск подкаста “S01E06: Математика и теория в deep learning” доступен на всех платформах!

Гость эпизода — Александр Петюшко, technical lead manager в компании Nuro и мой бывший тимлид. Поговорили с Александром о том, нужна ли математика в ML/DL, где конкретно она нужна и какая, какие еще навыки нужны рисерчеру, как их развивать и держать руку на пульсе современных исследований.

Ссылки:
Yandex Music
Apple Music
Google Music
Spotify
Anchor.fm
YouTube (тут с видео из zoom)

—————————————
Поддержать подкаст и канал можно тут
🔥45👍6
На всякий случай скажу: я понимаю, что в этом эпизоде звук тож не самый чистый. Я многое поняла о записи видео и аудио, пока мы делали разные эпизоды подкаста, и думаю, что в следующий раз смогу сделать уже намного лучше.

Будем считать, что этот эпизод завершает нулевой сезон (E0). Даже в подкасте, как и во всей моей жизни в последнее время, перейдем на следующий этап) Забавно, что и начинал сезон, и завершает его один гость — Александр =)
👍198
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет! Тут такое дело: оказывается, сегодня день рождения канала DLStories! 🎂

Ровно два года назад, 30.11.2020, я написала в канал первый пост. Он был про создание unsupervised эмбеддингов картинок. Также среди первых постов — тексты о Visual Transformer, первой версии DALL-E и мнения специалистов о том, что сферу ИИ ждет в 2021 году (эх, если б мы только знали, что нас ждет..)
Подумать только, прошло всего (и уже!) два года! Удивительно, насколько за это время продвинулась область, и сколько всего успело произойти.

Хочу сказать вам спасибо, что читаете канал. Я пишу посты потому что мне это нравится: нравится разбираться в статьях, а затем выражать свое понимание в текст. Но при этом мне приятно осознавать, что я, возможно, помогаю кому-то узнать что-то новое. Более того, вы помогаете мне: часто комментарии и обсуждения под постами открывают для меня что-то новое, и это очень-очень классно!

Если (ну вдруг) у вас возникло желание поздравить меня с днем рождения канала, сделать это можно очень просто:
- поставить смайлы на посты;
- рассказать о канале знакомым;
- можно скинуться мне на кофеек/винишко;
- можно просто порадоваться и улыбнуться =)

А у меня, в свою очередь, тоже есть для вас небольшой подарок ⬇️
🎉255🔥4337🍾11❤‍🔥6👍6
Помните, я летом говорила, что ездила на съемки лекций? Так вот, курс, который мы тогда записывали, наконец готов и выложен на Степик!
#learning

Это полностью бесплатный и довольно подробный курс по машинному обучению с самых азов и до продвинутых тем. Делали мы его частью команды DLS + несколько других отличных специалистов. Ориентирован он на школьников, так что изложение старались делать очень понятным языком. Но проходить, разумеется, могут все желающие.

Темы курса начинаются с введения в Python, знакомства с нужными библиотеками, математики для анализа данных и идеи машинного обучения. Затем переходим к изучению моделей, метрик и других аспектов прикладной машинки. Ну и дальше идут нейросети.
Подробную программу можно посмотреть тут. Она обширнее, чем программа DLS (в DLS мы учим в первую очередь глубокому обучению, и про классическое машинное обучение мы рассказываем не так подробно). Ну и, как обычно, мы постарались дать довольно много практики. В будущем к курсу еще выйдут дополнительные модули с новыми темами (сейчас идет монтаж записей).

Хочу сказать, что работы над курсом было проделано много: он отлично проработан методически. Тексты лекций были составлены заранее и записаны на профессиональное оборудование. Смотреть будет приятно!

К курсу прилагаются чатик для общения/помощи с учебой. В нем также будут ассистенты, которые будут отвечать на ваши вопросы. Ну и я там тоже буду =)

Приходите сами, а также зовите друзей!⬇️
Начать учиться тут
112🔥30👍20🙏1
Если интересно, в этом курсе (который выше) я делала модули:
- “аналитика данных с помощью Pandas и Matplotlib”;
- “линейная регрессия“;
- “производная, градиент и градиентная оптимизация”;
- “конкурсы на Kaggle”;
- ”сверточные нейросети”;
- “архитектуры CNN и Transfer Learning”;

И, пожалуйста, не пугайтесь моего вида в лекциях, меня убеждали, что нужен именно такой макияж 🌝🌝
70💋13😁9👍8🔥4
2025/07/13 09:28:24
Back to Top
HTML Embed Code: