00:00:00Рад видеть так много людей.
00:00:02Как я уже говорил во вступлении,
00:00:05я погружу вас в мир Flux – нашего семейства моделей для генерации и редактирования изображений.
00:00:13Я уже...
00:00:14работает.
00:00:14Я Энди, сооснователь Black Force Labs.
00:00:18Прежде чем перейти к модели,
00:00:20я хочу дать вам общий обзор нашей деятельности?
00:00:24В Black Force Labs мы верим,
00:00:27что в будущем визуальные медиа станут центральным интерфейсом для человеческого общения.
00:00:34Мы видим себя центральным поставщиком инфраструктуры,
00:00:39обеспечивающим все изображения и видео,
00:00:42которые люди будут использовать для взаимодействия друг с другом,
00:00:48и не только то,
00:00:49что могут запечатлеть камеры,
00:00:52но и гораздо больше.
00:00:53С этой целью мы основали компанию в августе 2024 года.
00:00:58С тех пор мы выросли до 45 сотрудников и имеем два головных офиса.
00:01:04Основной офис находится во Фрайбурге,
00:01:07в Шварцвальде,
00:01:08Германия,
00:01:09а также у нас есть офис здесь,
00:01:11в Сан-Франциско.
00:01:13С момента выпуска нашего семейства моделей для генерации изображений Flux в августе 2024 года,
00:01:21когда мы основали компанию,
00:01:23мы всегда структурировали релизы по трем различным уровням и постоянно развивали семейство моделей.
00:01:32Уровни следующие.
00:01:33У нас есть модели Pro.
00:01:35Они сверхмощные и самые быстрые из тех, что мы предлагаем.
00:01:40Они доступны только через API VFL,
00:01:43а также через нескольких партнеров по инференсу,
00:01:47таких как,
00:01:48например,
00:01:49File и Replicate.
00:01:50Думаю, вы их тоже знаете.
00:01:53Их очень легко интегрировать и масштабировать до огромных объемов практически мгновенно..
00:02:03Это первый уровень,
00:02:04но,
00:02:05как некоторые из вас,
00:02:06возможно,
00:02:07знают,
00:02:07у меня и моих сооснователей очень сильные корни в открытом исходном коде,
00:02:12как,
00:02:12я думаю,
00:02:13и у основателя,
00:02:14который пригласил нас сегодня.
00:02:15Мы также являемся оригинальными разработчиками Stable Diffusion.
00:02:19Мы по-прежнему придерживаемся этого.
00:02:22Мы любим сообщество открытого исходного кода,
00:02:24и поэтому мы также предлагаем модели с открытыми весами и открытым исходным кодом..
00:02:29У нас есть модели Flux Dev.
00:02:31Они общедоступны для скачивания и экспериментов.
00:02:35Они полностью настраиваемы и предлагают большую гибкость для всех,
00:02:40кто хочет их использовать.
00:02:42Наконец, у нас есть модели Flux Schnell.
00:02:45Они полностью с открытым исходным кодом и,
00:02:48в некотором смысле,
00:02:50являются идеальной точкой входа в экосистему Flux.
00:02:53Говоря об экосистеме,
00:02:55если вы посмотрите на Model Atlas на Hugging Face,
00:02:59который визуализирует,
00:03:00я думаю,
00:03:01наиболее используемые базовые модели с открытым исходным кодом в различных областях,
00:03:07мы можем увидеть,
00:03:09что самой крупной моделью на Hugging Face,
00:03:12к которой привязана самая большая экосистема,
00:03:15является наша модель Flux Dev.
00:03:18Это довольно убедительно показывает,
00:03:20что Flux уже стал стандартом для открытой генерации изображений.
00:03:25Очевидно,
00:03:26мы стремимся к дальнейшему развитию и расширению нашего распространения в будущем.
00:03:32Это все о компании.
00:03:33Позвольте проверить, все еще не работает.
00:03:36В любом случае.
00:03:38Теперь к основной части доклада..
00:03:41Я хотел погрузиться с вами в Flux,
00:03:44особенно в нашу новейшую модель Flux Context,
00:03:47которая объединяет генерацию изображений из текста и их редактирование.
00:03:52Сегодня я хочу рассказать о том, как это объединить..
00:03:56Пара слов перед этим.
00:03:58Я думаю,
00:03:58очень важно иметь эту объединенную модель,
00:04:01потому что,
00:04:02очевидно,
00:04:03генерация изображений имеет множество прекрасных применений,
00:04:07и мы видели это в прошлом году,
00:04:09но редактирование изображений до этого года не развивалось с такой же скоростью.
00:04:14Редактирование изображений — это на самом деле очень важный вариант использования.
00:04:20Оно позволяет нам итерировать существующие изображения и дает людям,
00:04:25я думаю,
00:04:25дополнительный уровень контроля для точного изменения изображений и тому подобного.
00:04:31Это очень важно.
00:04:32С Flux Context мы создали определяющий момент для редактирования изображений.
00:04:37Он был выпущен в июне 2025 года.
00:04:40Это модель,
00:04:40которая сочетает генерацию изображений с возможностями редактирования,
00:04:45такими как согласованность персонажей,
00:04:48ссылка на стиль,
00:04:49локальное редактирование и все это со скоростью,
00:04:52близкой к реальному времени.
00:04:54Мы увидим это позже..
00:04:57В качестве хорошего примера я привел вам этот ряд изображений.
00:05:01Слева направо: мы начинаем с исходного изображения.
00:05:04Затем мы можем дать модели команду удалить этот объект с ее лица,
00:05:09а затем поместить ее в совершенно новый контекст,
00:05:12сохраняя при этом согласованность персонажа.
00:05:15Это очень важно.
00:05:16В прошлом было проделано много работы по тонкой настройке,
00:05:19чтобы добиться такой согласованности персонажей в модели на основе общедоступных моделей преобразования текста в изображение,
00:05:27но это мгновенное редактирование изображений позволило нам избавиться от всей этой тонкой настройки,
00:05:34которая,
00:05:34я бы сказал,
00:05:35всегда требует некоторых усилий.
00:05:37На самом деле,
00:05:38это просто потрясающе,
00:05:39что теперь это занимает всего около четырех секунд.
00:05:43Наконец, мы можем просто изменить пейзаж.
00:05:45В данном случае,
00:05:46на самом правом изображении,
00:05:48мы меняем его на зимний пейзаж.
00:05:50Круто.
00:05:50Вот еще несколько примеров того, что он также может делать.
00:05:54Он хорош не только для редактирования с сохранением согласованности персонажей,
00:05:59но и отлично подходит для переноса стиля.
00:06:02Мы видим это слева.
00:06:03Мы берем стиль из входного изображения и применяем его к новому содержимому,
00:06:08или мы можем делать такие вещи,
00:06:10как редактирование текста,
00:06:12просто меняя Монреаль на Фрайбург,
00:06:14сохраняя при этом согласованность шрифта.
00:06:17Все это объединено в одной модели,
00:06:19и вы можете взаимодействовать с ней через очень простой текстовый интерфейс.
00:06:24Круто.
00:06:24Очень важно,
00:06:25что эта модель не только универсальна,
00:06:27но и очень хорошо решает конкретные важные и интересные бизнес-задачи.
00:06:32Например,
00:06:32здесь,
00:06:33в левом примере,
00:06:34мы можем извлечь эту юбку из обычного изображения и получить продуктовый снимок этой вещи и увеличение почти мгновенно,
00:06:42опять же,
00:06:42за считанные секунды.
00:06:43Раньше,
00:06:44до появления этих моделей редактирования,
00:06:47это занимало часы,
00:06:48дни или было вообще невозможно.
00:06:50Аналогично,
00:06:50справа,
00:06:51мы можем получить из эскиза полностью отрисованное изображение за пару секунд.
00:06:56Круто.
00:06:56Как я уже упоминал,
00:06:58Flux Context объединяет преобразование текста в изображение и редактирование изображений.
00:07:03Мы только что видели несколько примеров.
00:07:06Давайте кратко рассмотрим,
00:07:08что это на самом деле означает с точки зрения конвейера модели,
00:07:12который вам нужно использовать.
00:07:14Здесь мы видим классический конвейер преобразования текста в изображение.
00:07:18Довольно просто.
00:07:19Мы все это знаем.
00:07:20Мы используем текстовый запрос.
00:07:22Пропускаем его через модель.
00:07:24Модель затем творит некую магию.
00:07:26Я объясню вам, как создать такую модель, через секунду.
00:07:30Затем мы получаем изображение,
00:07:32которое,
00:07:32надеюсь,
00:07:33если модель хороша,
00:07:34соответствует нашему входному текстовому запросу.
00:07:37Если вы посмотрите на редактирование изображений,
00:07:40оно выглядит совсем иначе.
00:07:42Мы начинаем с изображения,
00:07:43которое мы как бы показываем модели,
00:07:46а затем мы добавляем не текстовую инструкцию,
00:07:49описывающую всю сцену,
00:07:50а только изменение к этому изображению.
00:07:53Здесь у нас два условия.
00:07:54В первой части у нас просто больше входных данных.
00:07:57В первом примере у нас был только один вход.
00:08:00Теперь мы описываем изменение,
00:08:02и модель должна затем изменить изображение в соответствии с этим изменением.
00:08:07Некоторые части,
00:08:08как,
00:08:08например,
00:08:09церковь здесь,
00:08:10должны остаться прежними после редактирования.
00:08:13Другие — нет.
00:08:14Вот что делают эти модели редактирования.
00:08:16Это совершенно другая задача.
00:08:18Объединение этого в одну модель на самом деле очень здорово,
00:08:22потому что вы можете делать все.
00:08:24Вы можете сгенерировать изображение,
00:08:26затем отредактировать его,
00:08:28и получить гораздо больше гибкости.
00:08:30Я уже упоминал,
00:08:31что до того,
00:08:32как мы выпустили эти модели редактирования,
00:08:35или до того,
00:08:35как мы увидели эти общие модели редактирования,
00:08:38было проделано много работы по тонкой настройке моделей преобразования текста в изображение,
00:08:44чтобы добиться такого уровня контроля в модели.
00:08:47Но теперь это больше не нужно.
00:08:49Мы можем делать это мгновенно.
00:08:51Это значительно сокращает время,
00:08:53необходимое для получения хороших результатов.
00:08:56Итак, это все, что касается конвейера.
00:08:58Теперь давайте посмотрим, как мы можем обучать эти модели.
00:09:02И есть очень важный алгоритм, о котором я хочу рассказать.
00:09:06Алгоритм,
00:09:06который позволяет нам обучать эти модели,
00:09:09называется Latent Flow Matching,
00:09:11который состоит из двух аспектов: Latent и Flow Matching,
00:09:15и я хочу немного пролить свет на оба из них..
00:09:24Начнем с латентного.
00:09:25Это происходит из латентного генеративного моделирования.
00:09:29Это алгоритм,
00:09:30который мы с моими сооснователями разработали почти пять лет назад.
00:09:34Чтобы объяснить,
00:09:35что это значит,
00:09:36давайте сначала рассмотрим следующий пример.
00:09:38То,
00:09:39что я здесь визуализирую,
00:09:41это,
00:09:41по сути,
00:09:42два изображения,
00:09:43и для нас они выглядят одинаково.
00:09:45Левое — это JPEG,
00:09:46а правое — то же изображение в формате PNG.
00:09:48То есть левое — это аппроксимация правого,
00:09:51но мы не видим никакой разницы..
00:09:53Или кто-нибудь видит разницу в этих двух изображениях?
00:09:57Я так не думаю.
00:09:58Хорошо,
00:09:59теперь давайте посмотрим на размер файлов этих изображений.
00:10:03Размер файла JPEG на самом деле почти на порядок меньше,
00:10:07чем размер файла PNG.
00:10:09Это довольно примечательно,
00:10:11и мы все знаем,
00:10:12как работает сжатие изображений,
00:10:14но просто осознание того,
00:10:16что мы можем удалить,
00:10:18по-видимому,
00:10:19много информации из изображения,
00:10:21не замечая этого,
00:10:23довольно примечательно,
00:10:24я бы сказал..
00:10:26Таким образом,
00:10:27очевидно,
00:10:28что в изображении много информации,
00:10:30которую мы не можем воспринимать человеческим глазом.
00:10:34Другой способ визуализировать это — построить график перцептивной схожести изображения (в последнем примере это PNG) и его аппроксимации (JPEG) относительно размера файла.
00:10:46При этом мы получаем такой график.
00:10:48Это концептуальный график,
00:10:50он не реальный,
00:10:51но концептуально выглядит так.
00:10:53Перцептивная схожесть быстро возрастает,
00:10:56а затем остается на постоянном уровне почти на протяжении всего размера файла.
00:11:02Именно это используют алгоритмы сжатия с потерями,
00:11:05такие как JPEG,
00:11:06и вы можете спросить,
00:11:08какое это имеет отношение к генеративному моделированию?
00:11:12Это показывает нам,
00:11:13что для перцептивного или естественного сигнала,
00:11:16такого как изображение (и для аудио это также верно),
00:11:20чтобы он выглядел или воспринимался как реальный,
00:11:24нам не нужно моделировать все высокочастотные детали,
00:11:27которые мы не можем воспринимать,
00:11:30и,
00:11:30следовательно,
00:11:31обучение генеративной модели в пиксельном пространстве на всех этих высокочастотных деталях было бы большой тратой вычислительных ресурсов и времени,
00:11:42потому что модель училась бы представлять аспекты,
00:11:45которые мы даже не воспринимаем,
00:11:47так что учить этому бессмысленно,
00:11:50верно?
00:11:50И это лежит в основе латентного генеративного моделирования.
00:11:54Таким образом,
00:11:55вместо обучения генеративной модели в пиксельном пространстве непосредственно на изображениях,
00:12:02мы обучаем модель сжатия,
00:12:04которая извлекает низкоразмерное так называемое латентное пространство.
00:12:09Это латентное пространство — то,
00:12:11что мы видим здесь в центре.
00:12:13Посмотрим, работает ли лазерная указка.
00:12:16О, да, вот этот.
00:12:17Как мы обучаем эту модель?
00:12:19На самом деле, это очень просто..
00:12:24Мы используем изображение здесь, слева.
00:12:26Мы пропускаем его через кодировщик,
00:12:28так что,
00:12:29по сути,
00:12:29это автокодировщик,
00:12:30мы пропускаем изображение через кодировщик,
00:12:33затем попадаем в это латентное пространство,
00:12:36а затем пропускаем это представление через операцию,
00:12:39которая называется регуляризацией..
00:12:42Это заставляет модель удалять информацию из этого латентного представления.
00:12:47Это может быть реализовано либо дискретно,
00:12:50либо непрерывно,
00:12:51а затем мы снова реконструируем изображение из этого латентного представления.
00:12:56Итак,
00:12:57классический автокодировщик,
00:12:59который мы обучаем для получения реконструкций,
00:13:02похожих на входные данные,
00:13:04и,
00:13:04что очень важно,
00:13:05мы добавляем эту функцию потерь дискриминатора.
00:13:08Это можно представить как априорное условие,
00:13:11чтобы убедиться,
00:13:13что только те детали,
00:13:14которые перцептивно важны для наших человеческих глаз,
00:13:18отражены в этом латентном представлении.
00:13:20Опять же,
00:13:21эта регуляризация заставляет модель уменьшать или удалять информацию,
00:13:26а дискриминатор гарантирует,
00:13:28что она удаляет правильную информацию,
00:13:30которую мы не можем воспринимать.
00:13:32Таким образом,
00:13:33после обучения этой модели мы получаем это латентное пространство,
00:13:38которое затем используется для обучения генеративной модели.
00:13:42Латентное пространство — это низкоразмерное представление входного изображения или изображения,
00:13:48которое перцептивно эквивалентно.
00:13:50Это,
00:13:51по сути,
00:13:51латентный аспект алгоритма латентного сопоставления потоков.
00:13:56Давайте поговорим о втором — сопоставлении потоков.
00:13:59Опять же,
00:14:00все,
00:14:00что я сейчас объясняю,
00:14:02происходит в этом латентном пространстве.
00:14:04Так что все, что мы делаем прямо сейчас, вы видите здесь.
00:14:08Слева каждое изображение,
00:14:10по сути,
00:14:11встраивается в это латентное пространство.
00:14:13Итак, да, давайте поговорим о сопоставлении потоков.
00:14:17Алгоритмы сопоставления потоков — это общее семейство алгоритмов,
00:14:21которые используются для преобразования из очень простого распределения,
00:14:26которое в нашем случае всегда является стандартным нормальным распределением,
00:14:31так что мы сейчас говорим о вероятностных распределениях.
00:14:35Я визуализировал это здесь.
00:14:37Это очень простое распределение.
00:14:39Алгоритмы сопоставления потоков преобразуют это или предоставляют нам средства для обучения векторного поля,
00:14:47представленного нейронной сетью (вот этот парень),
00:14:50для отображения между простым распределением и очень сложными распределениями,
00:14:55такими как распределение данных естественных изображений.
00:14:59Итак, это распределение данных.
00:15:01Что мы делаем, чтобы обучить это?
00:15:03Алгоритм сопоставления потоков предоставляет нам очень простой способ сделать это.
00:15:09Все,
00:15:10что нам нужно сделать во время обучения,
00:15:12это взять образец из этого стандартного нормального распределения здесь.
00:15:17Итак,
00:15:18у нас есть образец,
00:15:19и затем мы присваиваем его одному образцу из распределения данных,
00:15:23обучающему примеру,
00:15:25и мы связываем это,
00:15:26а затем мы можем построить такой вектор,
00:15:29который напрямую,
00:15:30линейно соединяет их..
00:15:34Если вы сделаете это для каждого примера в нашем обучающем наборе данных,
00:15:39то есть мы просто берем пример,
00:15:41случайным образом выбираем точку из стандартного нормального распределения и соединяем их,
00:15:47тогда мы получаем такое вот построенное векторное поле.
00:15:50Я мог бы сейчас много говорить о свойствах векторных полей.
00:15:54Одним важным свойством является то,
00:15:56что пути не могут пересекаться в векторных полях,
00:16:00и мы видим,
00:16:00что здесь происходит много пересечений,
00:16:03так что это,
00:16:04очевидно,
00:16:04не истинное векторное поле,
00:16:06которое преобразует каждую точку на этом распределении,
00:16:10или между этим распределением и тем..
00:16:13Удивительная особенность сопоставления потоков заключается в том,
00:16:17что если вы просто следуете этому правилу,
00:16:20то есть мы обучаем модель всегда предсказывать такие векторы между образцом данных и образцом из стандартного нормального распределения,
00:16:29мы приходим к истинному векторному полю,
00:16:32и оно выглядит вот так.
00:16:33Итак,
00:16:34здесь мы видим,
00:16:35что пути больше не пересекаются,
00:16:37и алгоритм сопоставления потоков просто гарантирует это.
00:16:40Это немного похоже на магию,
00:16:42но если записать это математически,
00:16:45мы на самом деле увидим,
00:16:46что это имеет смысл.
00:16:47И таким образом,
00:16:49мы можем фактически обучить модель представлять это истинное векторное поле,
00:16:54которое преобразует между стандартным нормальным и нашим распределением данных..
00:17:00И что важно,
00:17:01мы хотим иметь возможность создавать изображения на основе текстовых входных данных,
00:17:08поэтому мы всегда обусловливаем эту сеть текстовым вводом,
00:17:13по сути,
00:17:13для каждого примера изображения.
00:17:16Круто..
00:17:17Итак, что мы делаем, когда затем сэмплируем модель?
00:17:20У нас есть это векторное поле,
00:17:22которое представляет отображение между этими двумя распределениями.
00:17:26Затем мы начинаем с образца из стандартного нормального распределения.
00:17:31Мы можем сэмплировать из него с помощью компьютера, верно?
00:17:34Мы все это знаем.
00:17:35А затем мы интегрируем вдоль этих траекторий,
00:17:38представленных нейронной сетью.
00:17:40Мы можем сделать это с помощью простого алгоритма Эйлера вперед.
00:17:44Вероятно, многие из вас знают их.
00:17:46Итак,
00:17:47с помощью схемы численного интегрирования мы можем просто интегрировать вдоль этих траекторий и затем получить образец данных.
00:17:55Мы снова пропускаем его через декодер и получаем результат.
00:17:58Итак,
00:17:59опять же,
00:17:59это происходит в латентном пространстве,
00:18:02но здесь мы снова попадаем в пиксельное пространство.
00:18:05И вот как я затем могу создавать изображения на основе текстового запроса.
00:18:10Круто.
00:18:10Одно замечание: эти схемы численного интегрирования,
00:18:14я думаю,
00:18:14используют много шагов,
00:18:15поэтому они разбивают этот процесс здесь шаг за шагом на до 50 шагов.
00:18:20Таким образом,
00:18:21эти модели латентного сопоставления потоков изначально довольно медленные,
00:18:25и для генерации изображения требуется от 30 секунд до одной минуты,
00:18:29что немного долго..
00:18:32Я очень скоро расскажу, как сделать их быстрыми.
00:18:34Но это общий алгоритм латентного сопоставления потоков.
00:18:37Итак,
00:18:38латентный снова,
00:18:39соединяет или представляет это латентное пространство,
00:18:42или обозначает это латентное пространство,
00:18:44в котором мы обучаем модель.
00:18:45А алгоритм сопоставления потоков — это то,
00:18:48что мы только что обсуждали здесь.
00:18:49Хорошо,
00:18:50теперь я объяснил,
00:18:51как мы создаем изображения на основе текстовых запросов,
00:18:54но как это теперь применимо к контексту,
00:18:56который является моделью редактирования,
00:18:58верно?
00:18:59Это тоже очень просто.
00:19:00Итак, это базовая архитектура Flux Context.
00:19:02Это модель-трансформер.
00:19:03Мы все это знаем..
00:19:05Она немного особенная,
00:19:06но вся магия заключается во входных данных.
00:19:09Итак, здесь слева мы видим входные данные для модели.
00:19:13Сначала у нас есть текстовый ввод,
00:19:15который просто встраивается текстовым кодировщиком в набор текстовых токенов.
00:19:20А затем у нас есть кодировщик изображений,
00:19:23который мы уже видели на последнем слайде,
00:19:26верно?
00:19:26Вот этот парень.
00:19:27Это то, что мы сейчас видим здесь.
00:19:30Итак,
00:19:30у нас есть этот кодировщик изображений,
00:19:33и там у нас есть два набора визуальных токенов.
00:19:36Сначала у нас есть набор визуальных токенов,
00:19:39которые мы фактически используем для генерации.
00:19:42Это будет выходное изображение.
00:19:44А затем,
00:19:45если мы хотим редактировать изображение,
00:19:47у нас есть второй набор визуальных токенов,
00:19:50которые просто моделируют или просто представляют контекстное изображение.
00:19:55То есть,
00:19:56по сути,
00:19:56эталонное изображение,
00:19:58которое я показываю модели.
00:20:00И что мы затем делаем,
00:20:01это передаем это в модель-трансформер.
00:20:04Она особенная,
00:20:05потому что содержит так называемые блоки двойного потока.
00:20:08Это,
00:20:09я бы сказал,
00:20:10своего рода экспертные модели для каждой точности.
00:20:13Итак,
00:20:14здесь мы обрабатываем визуальные токены и текстовые токены отдельно..
00:20:20Для всего,
00:20:20кроме операции внимания,
00:20:22операция внимания затем происходит совместно для всех токенов.
00:20:27А затем у нас есть стандартные блоки,
00:20:30стандартные блоки трансформера,
00:20:32где мы,
00:20:32по сути,
00:20:33отображаем все входные и текстовые токены,
00:20:36а также визуальные токены с одинаковыми отображениями перед операцией внимания.
00:20:42И таким образом,
00:20:43мы можем просто перейти к редактированию изображений..
00:20:48Если вы предоставляете здесь входное изображение,
00:20:51а если вы генерируете изображение из текста,
00:20:54вы просто не предоставляете его,
00:20:57и тогда у нас есть только текстовый запрос в качестве входных данных,
00:21:01верно?
00:21:02Круто.
00:21:02Последний пункт.
00:21:03Почему модель такая быстрая?
00:21:05Итак, я не знаю, сколько из вас знакомы с моделями Flux.
00:21:09Может быть, поднимите руку, если вы знаете модели Flux?
00:21:13Или на самом деле несколько.
00:21:15Хорошо, круто.
00:21:16Итак, мы все знаем, что они довольно быстрые, верно?
00:21:19Что я имею в виду, когда говорю «быстрые»?
00:21:22Мы,
00:21:22по сути,
00:21:23чаще всего на порядки быстрее,
00:21:25чем сопоставимые модели.
00:21:26Итак,
00:21:27здесь,
00:21:27например,
00:21:28мы смотрим на,
00:21:29очевидно,
00:21:30очень медленную,
00:21:31но хорошую модель,
00:21:32GPD image one.
00:21:33Также здесь для редактирования модели Flux более чем в 10 раз быстрее,
00:21:37даже более чем в 20 раз.
00:21:39Так что это на самом деле безумно,
00:21:41насколько они быстры по сравнению с сопоставимо мощными моделями.
00:21:46И причина тому — алгоритм,
00:21:48который мы разработали два-три года назад.
00:21:50Он называется adversarial diffusion distillation (состязательная диффузионная дистилляция),
00:21:56и цель этого алгоритма — сократить количество шагов численного интегрирования.
00:22:02Я говорил вам ранее,
00:22:03что для стандартной модели сопоставления потоков их чаще всего 50,
00:22:07а цель здесь — сократить их до четырех.
00:22:10Каждый шаг численного интегрирования означает прямой проход через нейронную сеть,
00:22:16поэтому мы можем представить,
00:22:18что это занимает много времени,
00:22:20и мы хотим сократить его как можно больше.
00:22:22Как это работает?
00:22:24Мы инициализируем здесь две сети: учительскую и ученическую.
00:22:28Обе они инициализируются из обученной модели сопоставления потоков с помощью алгоритма,
00:22:33который я только что показал вам.
00:22:36И что мы затем делаем,
00:22:37это обучаем ученическую модель получать то же качество изображения на выходе за четыре шага,
00:22:43что и учительская модель за 50 шагов.
00:22:46Это цель, и вот как мы это делаем.
00:22:48Мы начинаем с изображения,
00:22:50снова кодируем его в латентное представление,
00:22:53а затем генерируем выходное изображение для ученической модели за четыре шага или за целевое количество шагов,
00:23:00которое мы хотим выполнить.
00:23:02А затем мы снова декодируем его в пиксели..
00:23:08В начале это изображение выглядит очень размытым и совсем нереалистичным.
00:23:13И цель, очевидно, состоит в том, чтобы улучшить это.
00:23:16Итак,
00:23:16что мы делаем,
00:23:17это снова используем это,
00:23:19снова кодируем в латентное представление,
00:23:21а затем делаем то же самое с учительской моделью,
00:23:24но за 50 шагов вместо четырех.
00:23:26Это затем приводит к высококачественному изображению,
00:23:29и мы затем используем эту потерю дистилляции,
00:23:32по сути,
00:23:33просто потерю,
00:23:34чтобы гарантировать,
00:23:35что распределения учителя или ученика соответствуют распределению учителя.
00:23:39Одно это,
00:23:40к сожалению,
00:23:41не позволило бы нам генерировать изображения,
00:23:43которые выглядят реальными.
00:23:45Поэтому мы добавляем еще одну потерю дискриминатора.
00:23:48Мы уже видели это для части автокодировщика в разделе латентного генеративного моделирования в начале доклада.
00:23:55Это, по сути, то же самое.
00:23:57Итак,
00:23:57мы обучаем дискриминатор отличать сгенерированные изображения от ученической модели от реальных изображений,
00:24:04которые мы вводим здесь.
00:24:05И это происходит в пространстве признаков dyno v2 или,
00:24:09в некотором смысле,
00:24:10в пространстве модели обученного представления изображения.
00:24:14И таким образом,
00:24:15мы можем фактически обучить модель в конечном итоге генерировать реалистичные изображения,
00:24:20используя всего четыре шага вместо 50.
00:24:23Это, очевидно, огромное ускорение.
00:24:25Однако, последний пункт здесь.
00:24:27Если мы посмотрим на эту вещь здесь,
00:24:29она выглядит довольно,
00:24:30я бы сказал,
00:24:31с большим количеством накладных расходов,
00:24:33верно?
00:24:34Потому что здесь нам приходится переходить в латентное пространство.
00:24:38Итак,
00:24:39мы начинаем в пространстве пикселей,
00:24:41переходим в латентное пространство,
00:24:43затем декодируем,
00:24:44потом снова кодируем и снова декодируем.
00:24:47А затем мы,
00:24:47этот также снова кодируется в другое пространство представления.
00:24:51Много накладных расходов,
00:24:53много затрат памяти,
00:24:54связанных с этим.
00:24:55И это просто очень...
00:24:56когда мы придумали это,
00:24:58мы были поражены,
00:24:59потому что это позволило нам обучать быстрые модели.
00:25:02Обучать это было так трудоемко.
00:25:04Поэтому мы подумали: хорошо, как мы можем это упростить.
00:25:08И ответ всегда один.
00:25:09Просто переместите это в латентное пространство,
00:25:12когда у вас есть пиксель?
00:25:13Итак,
00:25:14что мы сделали,
00:25:15это разработали подход латентной состязательной диффузионной дистилляции.
00:25:19Это,
00:25:20по сути,
00:25:20очень похоже на то,
00:25:21что мы делали для общего алгоритма латентного генеративного моделирования.
00:25:26Мы просто перемещаем все сюда в латентное пространство.
00:25:29То же самое,
00:25:30но вместо того,
00:25:31чтобы использовать эти кодировщики и декодировщики,
00:25:34мы можем просто избавиться от них.
00:25:36И что важно,
00:25:37в качестве дискриминатора мы больше не используем dyno..
00:25:44В этой модели представления изображения мы используем учительскую модель,
00:25:47потому что она и так уже находится в латентном пространстве,
00:25:51предоставляя нам очень хорошее представление изображения.
00:25:54Таким образом,
00:25:54мы также можем использовать учительскую модель в качестве дискриминатора.
00:25:58А остальное, по сути, почти то же самое.
00:26:00Мы также удаляем потерю дистилляции.
00:26:02Мы обнаружили, что она нам не нужна, что тоже круто..
00:26:06Таким образом, у нас меньше потерь, и все упрощается.
00:26:10И таким образом,
00:26:12мы можем фактически очень эффективно с точки зрения памяти сократить количество шагов интегрирования с пяти до четырех.
00:26:22Таким образом,
00:26:23мы получаем ускорение в 12,
00:26:265 раз,
00:26:26и это на самом деле то,
00:26:28что мы видим как этот порядок величины на графиках,
00:26:33которые я только что показывал вам в начале этого раздела.
00:26:38Итак,
00:26:38это,
00:26:39по сути,
00:26:39то,
00:26:40как мы получаем очень быструю модель из сопоставления потоков,
00:26:45из базовой модели сопоставления потоков.
00:26:49И теперь,
00:26:50прежде чем этот доклад закончится,
00:26:53я принес вам демонстрацию,
00:26:55чтобы показать Flux немного в действии.
00:26:58Давайте посмотрим.
00:27:00Итак,
00:27:00давайте используем его для редактирования изображений здесь.
00:27:06Позвольте мне что-нибудь загрузить потом.
00:27:09Что мы здесь делаем?
00:27:11Этот выглядит хорошо.
00:27:13Да.
00:27:13Окей.
00:27:14Да.
00:27:14Это хорошо.
00:27:15Итак,
00:27:16здесь я начинаю с логотипа моего любимого футбольного клуба,
00:27:21футбольного клуба СК Фрайбург.
00:27:23Я должен говорить «соккер», когда нахожусь в США.
00:27:28Хорошо.
00:27:28Это мой любимый клуб,
00:27:30и я хочу создать футболку с этим логотипом.
00:27:34Итак, давайте скажем: поместите этот логотип на футболку.
00:27:39Чувствую себя немного странно,
00:27:42потому что у меня нет экрана передо мной.
00:27:45Хорошо.
00:27:46Поехали.
00:27:46Генерируем.
00:27:47Позвольте мне сделать это немного меньше..
00:27:53Может быть, так.
00:27:55Хорошо.
00:27:56Отлично.
00:27:56Мы ждем пару секунд,
00:27:58и получаем этот красивый логотип на футболке.
00:28:03И теперь самое приятное, что мы можем продолжить, верно?
00:28:08Мы можем итерировать это.
00:28:10Итак, допустим, этот логотип немного великоват, я бы сказал.
00:28:16Сделайте логотип меньше и поместите его на оставшуюся часть.
00:28:22Снова.
00:28:22Подождите пару секунд.
00:28:24Хорошо.
00:28:25Круто.
00:28:26И мы получаем результат, который на самом деле очень хорош.
00:28:31Это именно то, что я хотел.
00:28:34Я хочу начать с этого снова.
00:28:37И теперь я хочу изменить цвет,
00:28:39потому что цвет СК Фрайбург не черный,
00:28:43а красный.
00:28:44Итак, сделайте футболку красной.
00:28:47Тоже очень просто.
00:28:49Теперь мы занимаемся локальным редактированием.
00:28:53Мы просто редактируем локальные части изображения, верно?
00:28:58В данном случае цвет.
00:29:00И что важно,
00:29:02мы сделали несколько правок и по-прежнему видим,
00:29:06что логотип представлен очень последовательно.
00:29:10Так что это согласованность персонажа или,
00:29:14в данном случае,
00:29:16объекта,
00:29:17которую мы видели.
00:29:18Это очень важно.
00:29:20Подумайте о маркетологе,
00:29:22у которого есть объект,
00:29:24и он хочет поместить его в определенный контекст,
00:29:29верно?
00:29:30С точки зрения бизнес-ценности,
00:29:33это здорово,
00:29:34это очень важно.
00:29:35И теперь, наконец, мы добавляем более сложную трансформацию.
00:29:41Мы можем сказать: наденьте футболку на мужчину,
00:29:45идущего в парке.
00:29:47Упс.
00:29:47Итак,
00:29:48это сложная трансформация,
00:29:50и вы могли бы сказать: хорошо,
00:29:53такие вещи,
00:29:54как изменение цвета,
00:29:56можно сделать в Photoshop,
00:29:59верно?
00:29:59Исторически,
00:30:00подобные вещи не могли делать стандартные или более ранние инструменты генерации изображений без ИИ.
00:30:10Это на самом деле очень здорово.
00:30:13Итак,
00:30:13здесь у нас теперь есть такой минимум,
00:30:17и,
00:30:17наконец,
00:30:18я думаю,
00:30:19мое время истекло,
00:30:21но давайте сделаем последнее,
00:30:23что покажет,
00:30:24насколько универсальна эта модель.
00:30:28Мы также можем делать перенос стиля, верно?
00:30:32Итак, давайте скажем: сделайте это акварельной картиной..
00:30:42Хорошо, последний.
00:30:44И до появления таких моделей вам, вероятно, пришлось бы...
00:30:48вы бы обучали отдельную тонкую настройку для каждой из этих задач,
00:30:54а теперь мы можем просто объединить это в одном,
00:30:57что довольно круто.
00:30:59Отлично.
00:30:59Так что теперь я мог бы распечатать это и повесить на стену или что-то в этом роде.
00:31:06В любом случае,
00:31:07да,
00:31:08я думаю,
00:31:08это показывает мощь этих моделей.
00:31:11О, что-то сломалось.
00:31:13Я хотел показать вам последний слайд,
00:31:15потому что я закончил,
00:31:17но мы нанимаем,
00:31:18и если вы хотите присоединиться к нам,
00:31:21пожалуйста,
00:31:22отсканируйте это здесь или посетите площадку,
00:31:26демонстрацию,
00:31:27которую я только что показал вам,
00:31:29она свободно доступна.
00:31:31Большое спасибо.
00:31:32Надеюсь, вы что-то узнали..