<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Alexander Ploshkin</title><author><name>Alexander Ploshkin</name></author><id>https://teletype.in/atom/ploshkin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/ploshkin?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/ploshkin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-08-14T04:46:05.745Z</updated><entry><id>ploshkin:stylegan</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/stylegan?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>StyleGAN: A Style-Based Generator Architecture for Generative Adversarial Networks</title><published>2021-11-28T16:14:55.533Z</published><updated>2021-11-29T06:12:06.309Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/75/e7/75e72c9e-9c5c-43e7-a3e6-ef47dee852ba.png"></media:thumbnail><category term="image-generation" label="image generation"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/45/a7/45a7c3f6-00c6-49fe-9c01-5edd7ffe6452.png&quot;&gt;https://arxiv.org/abs/1812.04948</summary><content type="html">
  &lt;h2 id=&quot;NzkN&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;SXDz&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1812.04948&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/1812.04948&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;6JK8&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/stylegan&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/stylegan&lt;/a&gt; — осторожно, внутри TF1 🚩🚩🚩&lt;/p&gt;
  &lt;p id=&quot;zNN5&quot;&gt;&lt;a href=&quot;https://github.com/huangzh13/StyleGAN.pytorch&quot; target=&quot;_blank&quot;&gt;https://github.com/huangzh13/StyleGAN.pytorch&lt;/a&gt; — неофициальная реализация на PyTorch&lt;/p&gt;
  &lt;p id=&quot;yGa9&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/ffhq-dataset&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/ffhq-dataset&lt;/a&gt; — датасет FFHQ&lt;/p&gt;
  &lt;h2 id=&quot;MmO4&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;tJe5&quot;&gt;StyleGAN — одна из первых архитектур, в которой латентный вектор подаётся не напрямую в свёрточный генератор, а через AdaIN&amp;#x27;ы. Для того, чтобы это взлетело, авторам понадобилось реализовать несколько интересных идей:&lt;/p&gt;
  &lt;ul id=&quot;LSXe&quot;&gt;
    &lt;li id=&quot;9Zot&quot;&gt;Нелинейный маппинг (по сути MLP) &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;-&amp;gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; — это позволяет unsupervised развязывать признаки в латентном пространстве, что приводит к более гладкой интерполяции&lt;/li&gt;
    &lt;li id=&quot;xsAV&quot;&gt;Аддитивный шум перед AdaIN&amp;#x27;ами — чтобы обеспечить стохастичность деталей, в то время как общая суть картинки неизменна&lt;/li&gt;
    &lt;li id=&quot;Hqy0&quot;&gt;Style mixing — смешиваем 2 стиля при генерации, &amp;quot;this prevents the network from assuming that adjacent styles are correlated&amp;quot; &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;UX4f&quot;&gt;Помимо этого в статье предложены 2 автоматические метрики &lt;em&gt;хорошести&lt;/em&gt; латентных пространств:&lt;/p&gt;
  &lt;ol id=&quot;N50s&quot;&gt;
    &lt;li id=&quot;NyMK&quot;&gt;Perceptual Path Length — насколько сильно картинка меняется при незначительных изменениях латентного вектора&lt;/li&gt;
    &lt;li id=&quot;wR1s&quot;&gt;Linear Separability — насколько хорошо работает линейный классификатор (SVM), обученный на латентных векторах из &lt;strong&gt;W&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;Etl5&quot;&gt;В итоге, хотя авторы и не заявляют о SoTA в задаче генерации, они предложили принципиально новый рабочий фреймворк, который послужил фундаментом для дальнейшего развития области и в частности работ StyleGAN2 и StyleGAN3.&lt;/p&gt;
  &lt;figure id=&quot;4eD1&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/45/a7/45a7c3f6-00c6-49fe-9c01-5edd7ffe6452.png&quot; width=&quot;1962&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;Ri8v&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;MzyF&quot;&gt;Главное, что стоит понимать — StyleGAN решает задачу &lt;em&gt;генерации&lt;/em&gt; картинок, а не style-transfer&amp;#x27;а. То есть на входе нет ничего, а хочется получить реалистичную картинку из определённого домена: лицо (FFHQ), фотографию комнаты (LSUN), машину (LSUN Car), котика (LSUN Cat), etc.&lt;/p&gt;
  &lt;p id=&quot;RwDP&quot;&gt;В реальности же вводится латентное пространство &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt;, из которого сэмплируется вектор и подаётся на вход в генератор. Это нужно для разнообразия синтезируемых картинок — сеть обуславливается на вектор из &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; и генерирует разные детали.&lt;/p&gt;
  &lt;h2 id=&quot;gyEp&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;figure id=&quot;wIbY&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/26/8c/268cfa42-9b58-474a-b501-c4d2bedcd06e.png&quot; width=&quot;520.3333333333333&quot; /&gt;
    &lt;figcaption&gt;Progressive Growing of GANs&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qiv7&quot;&gt;Статья во многом опирается на &lt;a href=&quot;https://arxiv.org/abs/1710.10196&quot; target=&quot;_blank&quot;&gt;Progressive Growing of GANs&lt;/a&gt;, предыдущую статью того же автора, поэтому я тезисно повторю главные идеи оттуда:&lt;/p&gt;
  &lt;ol id=&quot;ZTCY&quot;&gt;
    &lt;li id=&quot;mpO9&quot;&gt;&lt;strong&gt;G&lt;/strong&gt; и &lt;strong&gt;D&lt;/strong&gt; зеркально противоположны&lt;/li&gt;
    &lt;li id=&quot;sX5m&quot;&gt;На вход в &lt;strong&gt;G&lt;/strong&gt; подаётся латентный вектор из &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;LcMM&quot;&gt;В процессе обучения сначала обучаются coarse-слои, затем по расписанию добавляются fine-слои, доходя до требуемого разрешения — 1024x1024&lt;/li&gt;
    &lt;li id=&quot;EQ9M&quot;&gt;Minibatch Discrimination — дискриминатор смотрит на статистики по батчу, чтобы добиваться вариативности генератора&lt;/li&gt;
    &lt;li id=&quot;bIqu&quot;&gt;Не используется BatchNorm, вместо него:&lt;/li&gt;
    &lt;ul id=&quot;SM13&quot;&gt;
      &lt;li id=&quot;zWEv&quot;&gt;PixelNorm — вектор в каждом пикселе имеет норму 1&lt;/li&gt;
      &lt;li id=&quot;a4EY&quot;&gt;Equalized LR — разные слои учатся с разным LR, реализовано &lt;a href=&quot;https://github.com/huangzh13/StyleGAN.pytorch/blob/master/models/CustomLayers.py#L79&quot; target=&quot;_blank&quot;&gt;вот так&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;iNBj&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;mP2t&quot;&gt;Теперь можно разобрать, что же изменили в StyleGAN&amp;#x27;е. &lt;/p&gt;
  &lt;figure id=&quot;pRL9&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1b/ee/1bee020a-8b97-47da-8c87-fdc40a489c75.png&quot; width=&quot;456.8331780055919&quot; /&gt;
    &lt;figcaption&gt;Архитектура StyleGAN в сравнении с традиционной.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;87WW&quot;&gt;1. Mapping Network&lt;/h3&gt;
  &lt;p id=&quot;HbtY&quot;&gt;Пространство &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; имеет стандартное нормальное распределение по каждой из компонент. Из него легко сэмплировать, но в то же время его структура не отражает структуру признаков в target-домене — оно &lt;em&gt;слишком&lt;/em&gt; равномерное.&lt;/p&gt;
  &lt;p id=&quot;e0Jw&quot;&gt;Поэтому авторы добавили нелинейный маппинг &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;-&amp;gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; в надежде, что полученное латентное пространство &lt;em&gt;&lt;strong&gt;W&lt;/strong&gt;&lt;/em&gt; будет иметь &lt;em&gt;хорошую&lt;/em&gt; структуру. По сути это просто 8-слойный MLP, все FC-слои которого имеют размерность 512.&lt;/p&gt;
  &lt;p id=&quot;0Auz&quot;&gt;Мотивационная картинка:&lt;/p&gt;
  &lt;figure id=&quot;RKr0&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ef/6e/ef6e9dde-185f-4f7a-bc5a-3f6af4c2f939.png&quot; width=&quot;575&quot; /&gt;
    &lt;figcaption&gt;Распределение 2 признаков — masculinity и длина волос. Предположим, что длинноволосые мужчины отсутствуют в обучающей выборке. Тогда пространство &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; будет искривлено и неравномерно (b), а &lt;strong&gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; будет приблизительно повторять структуру исходного пространства (c).&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;qrFu&quot;&gt;2. AdaIN&lt;/h3&gt;
  &lt;p id=&quot;HnHw&quot;&gt;AdaIN используется для передачи &lt;em&gt;стиля&lt;/em&gt; в генератор. В статье говорится о том, что пространственно-независимые статистики, такие как матрица Грэма или поканальное матожидание / дисперсия, характеризуют глобальное содержание (&lt;em&gt;стиль)&lt;/em&gt; изображения. А фичи, зависящие от координаты, кодируют локальные признаки [&lt;a href=&quot;https://arxiv.org/abs/1701.01036&quot; target=&quot;_blank&quot;&gt;Demystifying Neural Style Transfer&lt;/a&gt;].&lt;/p&gt;
  &lt;p id=&quot;eIzi&quot;&gt;Поэтому для каждого свёрточного слоя вектор из &lt;strong&gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; пропускается через свой FC-слой (на схеме: квадратики с буквой &lt;strong&gt;A&lt;/strong&gt; — affine), определяя параметры демодуляции каналов.&lt;/p&gt;
  &lt;h3 id=&quot;r0KE&quot;&gt;3. Noise&lt;/h3&gt;
  &lt;p id=&quot;2LaI&quot;&gt;Чтобы обеспечить стохастичность генерируемых картинок, а также регуляризовать генератор, авторы добавили аддитивный шум перед каждой нормализацией. Как было сказано в разделе выше, это позволяет синтезировать &lt;em&gt;немножко&lt;/em&gt; разные изображения, оставляя глобальное содержание нетронутым.&lt;/p&gt;
  &lt;figure id=&quot;VJFb&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/53/3b/533b6f3a-b16f-4762-8c0a-75df12930d53.png&quot; width=&quot;455.1261261261261&quot; /&gt;
    &lt;figcaption&gt;Как шум управляет волосами при генерации&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;m6d4&quot;&gt;Как это работает:&lt;/p&gt;
  &lt;ul id=&quot;b8X9&quot;&gt;
    &lt;li id=&quot;ST0t&quot;&gt;Для каждого свёрточного слоя сэмплируется 1-канальная картинка, каждый пиксель из стандартного нормального распределения&lt;/li&gt;
    &lt;li id=&quot;LVYc&quot;&gt;Обучаемый модуль (&lt;strong&gt;B &lt;/strong&gt;на схеме) домножает эту картинку на своё число для каждого канала фичемапы&lt;/li&gt;
    &lt;li id=&quot;5KTZ&quot;&gt;Полученный тензор добавляется к фичемапе&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;MkpF&quot;&gt;&lt;strong&gt;Зачем вообще нужен аддитивный шум?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;jiy7&quot;&gt;Многие части картинки могут быть стохастическими, не влияя на наше восприятие. Например, положение отдельных волос, текстура кожи, веснушки, родинки. Без добавочного шума сети пришлось бы изобретать способ, как генерировать случайные числа для каждого пикселя в каждой фичемапе. Это уменьшает capacity сети, и в то же время не удаётся избежать паттернов в генерируемом сигнале.&lt;/p&gt;
  &lt;p id=&quot;7gvJ&quot;&gt;&lt;strong&gt;Почему сеть не опирается на шум при генерации глобального содержания?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;GRB1&quot;&gt;Шум добавляется независимо для каждого пикселя, поэтому если сеть обусловится на шум при генерации, скажем, позы, это приведёт к пространственным коллизиям, которые оштрафует дискриминатор.&lt;/p&gt;
  &lt;p id=&quot;h6tS&quot;&gt;&lt;strong&gt;Локализация эффекта от добавления шума внутри сети&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;7tJ2&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2b/e9/2be92ee9-4f72-47d3-afdd-d72c2d10e1e2.png&quot; width=&quot;357.40832049306624&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6lFv&quot;&gt;Авторы предполагают, что сеть генерирует новый контент как только это представляется возможным. Наиболее простой способ добавить стохастичности — опереться на шум в текущем слое. Поскольку для каждого слоя добавляется новый шум, генератору нет нужды протаскивать стохастичность из предыдущих слоёв.&lt;/p&gt;
  &lt;h3 id=&quot;ZQLQ&quot;&gt;4. Style Mixing&lt;/h3&gt;
  &lt;p id=&quot;ec18&quot;&gt;Чтобы стабилизировать обучение, применяется смешение стилей:&lt;/p&gt;
  &lt;ol id=&quot;aMyS&quot;&gt;
    &lt;li id=&quot;9IkA&quot;&gt;Сэмплируются 2 латентных вектора&lt;/li&gt;
    &lt;li id=&quot;sBhs&quot;&gt;В генераторе выбирается точка скрещивания&lt;/li&gt;
    &lt;li id=&quot;PliR&quot;&gt;До этой точки через AdaIN прокидывается один стиль, а после — другой&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;ldXQ&quot;&gt;Это позволяет сети избавиться от скоррелированности признаков. Например, если в датасете у смуглых людей всегда есть родинки, то сеть может обучиться на то, что смуглость обязательно влечёт наличие родинок. А благодаря смешению стилей можно зафорсить генерацию смуглого человека без родинок, которое будет реалистичным.&lt;/p&gt;
  &lt;p id=&quot;og1J&quot;&gt;Style mixing применяется к определённой доле генерируемых сэмплов, в статье сравнивались разные варианты — 0%, 50% и 90%. &lt;/p&gt;
  &lt;p id=&quot;IjJG&quot;&gt;&lt;strong&gt;Зависимость стиля от точки скрещивания&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;8eDO&quot;&gt;Если скрещивание происходит на coarse-слоях, то от первого латентного вектора прокидываются высокоуровневые признаки — пол, возраст, наличие очков. Если же на fine-слоях, то прокидываются текстурные признаки — цвет волос, кожи, фона.&lt;/p&gt;
  &lt;figure id=&quot;Gk6M&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6d/ec/6decb5e9-af2b-47ec-af11-588b169b2802.png&quot; width=&quot;1188&quot; /&gt;
    &lt;figcaption&gt;Смешивание стилей на разных слоях генератора. Важно осознать, что исходные картинки A и B сгенерированы из &lt;strong&gt;&lt;em&gt;случайных&lt;/em&gt;&lt;/strong&gt; латентных векторов, то есть нельзя применить стиль от одной входной картинки к другой.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;14up&quot;&gt; 5. Truncation Trick in &lt;em&gt;W&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;MUfW&quot;&gt;Для визуализаций GAN‘ов часто используется не сэмплированный вектор из &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt;, а его приближенная к центру масс версия:&lt;/p&gt;
  &lt;figure id=&quot;7Gqz&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c1/f3/c1f3d823-5663-43b1-b04a-4df579ace89d.png&quot; width=&quot;234.00000000000003&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Af8b&quot;&gt;Если ψ в интервале (0, 1), можно получить более качественные изображения, т.к. вблизи центра масс латентное пространство обучено лучше. Или можно получить анти-картинку, если положить ψ = -1. Этот подход отлично работает для нормального распределения, т.к. его центр масс в нуле.&lt;/p&gt;
  &lt;p id=&quot;rGml&quot;&gt;Чтобы пользоваться этим приёмом в хорошем пространстве &lt;strong&gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt;, нужно знать центр масс распределения. К счастью его легко оценить по Монте-Карло:&lt;/p&gt;
  &lt;figure id=&quot;SeDm&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8e/b1/8eb160bd-1a3f-46c8-a496-b3d6dafccf83.png&quot; width=&quot;224&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IN4V&quot;&gt;После этого можно делать клёвые интерполяции:&lt;/p&gt;
  &lt;figure id=&quot;K950&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/92/a292d964-ae9b-491b-a3e1-0f4876fe819b.png&quot; width=&quot;1934&quot; /&gt;
    &lt;figcaption&gt;Интересный факт: анти-лицо часто имеет противоположные черты в общечеловеческом понимании — &lt;br /&gt;другой пол, цвет кожи, противоположную позу, длину волос, цвет волос, кудрявость, наличие очков.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;EESF&quot;&gt;6. Обучение&lt;/h3&gt;
  &lt;p id=&quot;SUhG&quot;&gt;Слои обучаются последовательно, так же как в Progressive Growing of GANs. Используется такая же архитектура дискриминатора и параметры оптимизаторов.&lt;/p&gt;
  &lt;p id=&quot;um7M&quot;&gt;Для FFHQ авторы используют &lt;a href=&quot;https://machinelearningmastery.com/generative-adversarial-network-loss-functions/&quot; target=&quot;_blank&quot;&gt;non-saturating loss&lt;/a&gt; + &lt;a href=&quot;https://paperswithcode.com/method/r1-regularization&quot; target=&quot;_blank&quot;&gt;R1 regularization&lt;/a&gt; вместо &lt;a href=&quot;https://paperswithcode.com/method/wgan-gp-loss&quot; target=&quot;_blank&quot;&gt;WGAN-GP&lt;/a&gt;, который использовался во всех других случаях. Они заметили, что с R1 метрика FID падает дольше, поэтому количество обучающих картинок увеличили 12M-&amp;gt;25M.&lt;/p&gt;
  &lt;p id=&quot;Xrc9&quot;&gt;Для обучения сети потребовалась 1 неделя на 8xV100.&lt;/p&gt;
  &lt;h2 id=&quot;S18v&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;p id=&quot;6opv&quot;&gt;Авторы посвятили большую часть исследований теме disentanglement — &lt;em&gt;развязанности&lt;/em&gt; (не знаю, как это нормально перевести) латентного пространства.&lt;/p&gt;
  &lt;p id=&quot;SPXL&quot;&gt;&lt;em&gt;Развязанное&lt;/em&gt; латентное пространство состоит из линейных подпространств, каждое из которых контролирует изменение &lt;em&gt;одного&lt;/em&gt; определённого признака у генерируемого объекта.&lt;/p&gt;
  &lt;p id=&quot;p22m&quot;&gt;В статье предполагается, что из развязанного пространства проще синтезировать реалистичные изображения. Именно поэтому в архитектуру добавили нелинейный маппинг &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;-&amp;gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; — чтобы линеаризировать латентное пространство относительно признаков.&lt;/p&gt;
  &lt;p id=&quot;5hBZ&quot;&gt;Чтобы понять, действительно ли их сеть выучивает достаточно линеаризованное латентное пространство, авторы предложили 2 метрики, для которых не требуется наличие энкодера.&lt;/p&gt;
  &lt;h3 id=&quot;R35t&quot;&gt;1. Perceptual Path Length&lt;/h3&gt;
  &lt;p id=&quot;JmBo&quot;&gt;Представим ситуацию: есть 2 латентных вектора &lt;strong&gt;z1&lt;/strong&gt; и &lt;strong&gt;z2&lt;/strong&gt;. Им соответствуют синтезированные изображения &lt;strong&gt;G(z1)&lt;/strong&gt; и &lt;strong&gt;G(z2)&lt;/strong&gt;. Если пространство &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; достаточно линейно, то при интерполяции между векторами полученная картинка будет меняться плавно. И наоборот, если в какой-то промежуточной точке появляются признаки, которых нет на концах отрезка — это говорит об &lt;em&gt;entangled&lt;/em&gt;-пространстве.&lt;/p&gt;
  &lt;figure id=&quot;HM5O&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f1/bc/f1bca791-9720-4a4c-bbec-89d6139f3e6e.png&quot; width=&quot;436.62937062937067&quot; /&gt;
    &lt;figcaption&gt;Типа между окружностью и выпуклым многоугольником должна быть какая-то выпуклая фигура.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;39S1&quot;&gt;Предлагается измерить, насколько значительно изменяется синтезируемая картинка при интерполяции между &lt;strong&gt;z1&lt;/strong&gt; и &lt;strong&gt;z2&lt;/strong&gt;. В качестве метрики &lt;em&gt;d&lt;/em&gt; — VGG Loss:&lt;/p&gt;
  &lt;figure id=&quot;ePyw&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e0/c2/e0c2ade3-690e-4753-a5fb-17de7d4d2eaa.png&quot; width=&quot;374.6576576576577&quot; /&gt;
    &lt;figcaption&gt;slerp — сферическая интерполяция, которая лучше подходит для нормального распределения;&lt;br /&gt;&lt;em&gt;d &lt;/em&gt;— квадратичная метрика, поэтому деление на eps^2;&lt;br /&gt;матожидание берётся по &lt;strong&gt;z1&lt;/strong&gt;, &lt;strong&gt;z2 &lt;/strong&gt;из &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt;, 100k пар для вычисления.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Jm7j&quot;&gt;Для W используется линейная интерполяция, т.к. предполагается, что оно должно быть линейным:&lt;/p&gt;
  &lt;figure id=&quot;Zdgi&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/da/01/da01d988-d2c7-4ca3-a80e-a3f0b603ed73.png&quot; width=&quot;402.87542087542084&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;v0yZ&quot;&gt;2. Linear Separability&lt;/h3&gt;
  &lt;p id=&quot;MxQ1&quot;&gt;Если латентное пространство достаточно линейно, то для бинарных признаков (пол, тёмный цвет кожи, наличие серёжек, наличие очков и т.д.) латентные коды должны хорошо разделяться гиперплоскостью.&lt;/p&gt;
  &lt;p id=&quot;BEAc&quot;&gt;Датасет CelebA-HQ содержит 40 бинарных атрибутов, поэтому авторы обучили на нём 40 бинарных классификаторов. Дальше алгоритм следующий:&lt;/p&gt;
  &lt;ol id=&quot;r01K&quot;&gt;
    &lt;li id=&quot;rHlK&quot;&gt;Сгенерировать 200k изображений генератором&lt;/li&gt;
    &lt;li id=&quot;GcRT&quot;&gt;Отобрать 100k с наибольшим confidence по каждому признаку (сеть уверена в наличии или отсутствии признака на изображении)&lt;/li&gt;
    &lt;li id=&quot;pBib&quot;&gt;Зафитить SVM на этой выборке&lt;/li&gt;
    &lt;li id=&quot;Vojj&quot;&gt;Вычислить условную энтропию &lt;em&gt;H(Y|X)&lt;/em&gt;, &lt;em&gt;Y&lt;/em&gt; — метка класса, полученная от классификатора (аналог GT), &lt;em&gt;X&lt;/em&gt; — предикт от SVM&lt;/li&gt;
    &lt;li id=&quot;y3fx&quot;&gt;Linear Separability score:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;VHJN&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/58/05/58050778-f7e2-4ced-930f-087cc1d68ee4.png&quot; width=&quot;208&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;48F6&quot;&gt;Физический смысл — сколько доп. информации необходимо, чтобы определить истинную метку класса, зная, с какой стороны от гиперплоскости находится латентный вектор. Чем ниже значение, тем более консистентным является направление изменения конкретного признака.&lt;/p&gt;
  &lt;h3 id=&quot;gR2R&quot;&gt;Результаты&lt;/h3&gt;
  &lt;figure id=&quot;RzvG&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6c/0c/6c0ce216-fa8e-4426-85f4-ef4e80563e0d.png&quot; width=&quot;618&quot; /&gt;
    &lt;figcaption&gt;Ablation study: можно заметить, что маппинг &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;-&amp;gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; хорошо докидывает в Separability,&lt;br /&gt;а аддитивный шум даёт скачок по Perceptual Path Length. &lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;4Ls5&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/56/66/5666d896-d10b-4054-a3f0-796eb59864f5.png&quot; width=&quot;617&quot; /&gt;
    &lt;figcaption&gt;В этой таблице сравнивается линейность &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; — в &lt;strong&gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; метрики сильно лучше;&lt;br /&gt;дополнительно тут показано, почему в сетке-маппере 8 слоёв.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;04G2&quot;&gt;🐈 Картинки с котами (по ржать)&lt;/h2&gt;
  &lt;figure id=&quot;D2kG&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/08/d3/08d30847-f1a5-422d-9a0f-8aeee67041fe.png&quot; width=&quot;1536&quot; /&gt;
    &lt;figcaption&gt;Это не настоящие котьики, это всего лиш симуляция (обман)&lt;/figcaption&gt;
  &lt;/figure&gt;

</content></entry><entry><id>ploshkin:munit</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/munit?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>MUNIT: Multimodal Unsupervised Image-to-Image Translation</title><published>2021-11-09T21:31:48.685Z</published><updated>2021-11-09T21:31:48.685Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/10/f6/10f685fd-439a-4cea-9f64-3693fb9a8b77.png"></media:thumbnail><category term="im-2-im" label="im2im"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/f8/2b/f82bf329-46f8-49f3-b55b-9a6e9f0971d5.png&quot;&gt;https://arxiv.org/abs/1804.04732</summary><content type="html">
  &lt;h2 id=&quot;e5LO&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;FLxd&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1804.04732&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/1804.04732&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;bzHQ&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/imaginaire/tree/master/projects/munit&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/imaginaire/tree/master/projects/munit&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;8Mkm&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;v117&quot;&gt;В конце статьи &lt;a href=&quot;https://arxiv.org/abs/1703.00848&quot; target=&quot;_blank&quot;&gt;UNIT&lt;/a&gt; (&lt;a href=&quot;http://чhttps://teletype.in/@ploshkin/unit&quot; target=&quot;_blank&quot;&gt;разбор&lt;/a&gt;) авторы сказали, что одним из ограничений их модели является &lt;em&gt;унимодальность&lt;/em&gt; — то есть по входной картинке можно синтезировать только &lt;em&gt;очень похожие&lt;/em&gt; друг на друга изображения. В общем же случае домен может быть мультимодальным, как например породы собак или снимки со спутника. Поэтому здесь предложен подход для unsupervised-обучения &lt;em&gt;мультимодальной&lt;/em&gt; модели image-to-image translation.&lt;/p&gt;
  &lt;figure id=&quot;GLxQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f8/2b/f82bf329-46f8-49f3-b55b-9a6e9f0971d5.png&quot; width=&quot;2419&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8uyf&quot;&gt;В этой работе предполагается более слабое условие о существовании &lt;em&gt;partially shared-latent space&lt;/em&gt;. Общее латентное пространство может быть декомпозировано на 2 подпространства — &lt;strong&gt;&lt;em&gt;C &lt;/em&gt;&lt;/strong&gt;(&lt;em&gt;content&lt;/em&gt;)и &lt;strong&gt;&lt;em&gt;S&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;style&lt;/em&gt;):&lt;/p&gt;
  &lt;ul id=&quot;gTHV&quot;&gt;
    &lt;li id=&quot;gNsh&quot;&gt; &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt; — общее для доменов&lt;/li&gt;
    &lt;li id=&quot;5RYV&quot;&gt;&lt;strong&gt;&lt;em&gt;S_i&lt;/em&gt;&lt;/strong&gt; — своё для каждого домена&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;v3rs&quot;&gt;Мультимодальность обеспечивается сэмплированием &lt;em&gt;эмбеддинга&lt;/em&gt; &lt;em&gt;стиля&lt;/em&gt; из &lt;strong&gt;&lt;em&gt;S_i&lt;/em&gt;&lt;/strong&gt; при генерации изображения из &lt;em&gt;i&lt;/em&gt;-го домена.&lt;/p&gt;
  &lt;figure id=&quot;YjQf&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4a/a4/4aa41e0c-5cd4-45a3-b5f1-5baed262865b.png&quot; width=&quot;1344&quot; /&gt;
    &lt;figcaption&gt;Схема мультимодального перевода изображения из одного домена в другой.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;p50x&quot;&gt;В работе есть несколько теоретических результатов, наиболее важным из которых является доказательство, что&lt;/p&gt;
  &lt;blockquote id=&quot;vUnF&quot;&gt;Использование &lt;em&gt;cycle-consistency&lt;/em&gt; приводит к унимодальной функции условного распределения, и как следствие — к унимодальности синтезируемых картинок.&lt;/blockquote&gt;
  &lt;h2 id=&quot;PW6Z&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;nw1c&quot;&gt;Задача формулируется аналогично UNIT: имея 2 частных распределения &lt;em&gt;p(x)&lt;/em&gt; и &lt;em&gt;p(y)&lt;/em&gt; нужно выучить совместное распределение &lt;em&gt;p(x, y)&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;uMZs&quot;&gt;&lt;strong&gt;Пояснение:&lt;/strong&gt; вообще говоря, для image translation нам нужно выучить условное распределение &lt;em&gt;p(y|x)&lt;/em&gt; и/или &lt;em&gt;p(x|y)&lt;/em&gt; (обычно &amp;quot;и&amp;quot;). Но вспомнив формулу Байеса можно понять, что имея частное и условное распределения мы на самом деле имеем совместное:&lt;/p&gt;
  &lt;p id=&quot;tNFe&quot; data-align=&quot;center&quot;&gt;&lt;em&gt;p(x, y) = p(x)p(y|x) = p(y)p(x|y)&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;r3qe&quot;&gt;Задача некорректно поставлена, т.к. имеет бесконечно много решений. Поэтому предполагается дополнительное условие — &lt;em&gt;partially shared-latent space&lt;/em&gt;:&lt;/p&gt;
  &lt;figure id=&quot;jdJo&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f8/35/f835af55-5ad5-467f-819f-20e5f9c6c008.png&quot; width=&quot;450.53478260869565&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt; — общее латентное пространство, кодирующее &lt;em&gt;контент&lt;/em&gt;;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;S_i&lt;/em&gt;&lt;/strong&gt; — подпространства, кодирующие &lt;em&gt;стиль&lt;/em&gt; для каждого домена.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;CQhe&quot;&gt;Также предполагается существование всех функций, которые позволяют переводить картинки в латентные вектора и наоборот:&lt;/p&gt;
  &lt;figure id=&quot;kBN4&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2b/8c/2b8c7f65-5c36-475e-b821-d32567f9bc8f.png&quot; width=&quot;165&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;0i9s&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/32/4c/324c0ea8-11a8-4763-b711-430d81f3439d.png&quot; width=&quot;128&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;J5R9&quot;&gt;Тогда для image translation &lt;strong&gt;&lt;em&gt;1-&amp;gt;2&lt;/em&gt;&lt;/strong&gt; нужно смоделировать &lt;em&gt;&lt;strong&gt;E_1&lt;/strong&gt;,&lt;strong&gt; G_2 &lt;/strong&gt;&lt;/em&gt;и распределения &lt;strong&gt;&lt;em&gt;p(c)&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;p(s_2)&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;
  &lt;figure id=&quot;ae0C&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/9c/9a9cd313-f440-4cab-b3fb-b1c0f415b3bf.png&quot; width=&quot;238.99999999999997&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;aA6z&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;figure id=&quot;vgF7&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2d/1e/2d1ee0e9-d667-4793-be2f-6c61f7d8a488.png&quot; width=&quot;2420&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WBrD&quot;&gt;Главная идея работы — это разделение контента и стиля изображений, но при этом нет чётких определений, что есть что. Авторы говорят, что контент — это структура изображения, а стиль — это рендеринг.&lt;/p&gt;
  &lt;h3 id=&quot;ZeHp&quot;&gt;Архитектура&lt;/h3&gt;
  &lt;p id=&quot;zvQy&quot;&gt;&lt;em&gt;Content&lt;/em&gt;-энкодер состоит из &lt;em&gt;residual&lt;/em&gt;-блоков 3x3; после свёрточных слоёв стоит IN.&lt;/p&gt;
  &lt;p id=&quot;KtNs&quot;&gt;&lt;em&gt;Style&lt;/em&gt;-энкодер, наоборот, не содержит IN, т.к. убиваются исходные (&lt;em&gt;μ&lt;/em&gt;,&lt;em&gt; σ&lt;/em&gt;), несущие информацию о стиле. Используются свёртки 4x4, как в PatchGAN-дискриминаторе.&lt;/p&gt;
  &lt;p id=&quot;EdPV&quot;&gt;Для прокидывания стиля в генератор используется AdaIN:&lt;/p&gt;
  &lt;figure id=&quot;1pDP&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/92/8a924eb5-c7fe-47d6-9ad7-24c4b1b3ee45.png&quot; width=&quot;346.00000000000006&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;X0eS&quot;&gt;Интересно, что из контентного пространства &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt; вектора не сэмплируются, а просто берутся полученные из энкодера. Это логично, т.к. мультимодальность теперь кроется в &lt;em&gt;style&lt;/em&gt;-пространствах.&lt;/p&gt;
  &lt;p id=&quot;HioH&quot;&gt;Для &lt;strong&gt;&lt;em&gt;S_i&lt;/em&gt;&lt;/strong&gt; энкодер оценивает вектор мат. ожиданий нормального распределения, из которого потом сэмплируются &lt;em&gt;style&lt;/em&gt;-эмбеддинги. Prior — стандартное нормальное распределение.&lt;/p&gt;
  &lt;p id=&quot;0gus&quot;&gt;Размерности: dim(&lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt;) = 256, dim(&lt;strong&gt;&lt;em&gt;S_i&lt;/em&gt;&lt;/strong&gt;) = 8&lt;/p&gt;
  &lt;p id=&quot;v1x7&quot;&gt;В отличие от UNIT в этом фреймворке сэмплирование происходит только из &lt;em&gt;&lt;strong&gt;S_i&lt;/strong&gt;&lt;/em&gt;, а для обучения &lt;em&gt;content&lt;/em&gt;-эмбеддингов архитектура представляет собой обычный автоэнкодер.&lt;/p&gt;
  &lt;h3 id=&quot;8tXn&quot;&gt;Лоссы&lt;/h3&gt;
  &lt;figure id=&quot;OemB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/99/91/9991d898-3311-458f-840b-24f532570bb8.png&quot; width=&quot;1950&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;uZ7M&quot;&gt;&lt;strong&gt;1. Bidirectional Reconstruction Loss:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;y9f8&quot;&gt;
    &lt;li id=&quot;xPxN&quot;&gt;Image reconstruction — L1 между картинками&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;2jeI&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/14/ad14bccf-f4f9-4ecd-9a8a-c02f0cfce621.png&quot; width=&quot;497&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;2YFT&quot;&gt;
    &lt;li id=&quot;IEgj&quot;&gt;Latent reconstruction — L1 между латентными векторами (для &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt; и для &lt;strong&gt;&lt;em&gt;S_i&lt;/em&gt;&lt;/strong&gt;)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;WW4M&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/69/81/698103b3-7339-4cbc-beaa-1fede015786d.png&quot; width=&quot;495&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6Kfb&quot;&gt;&lt;strong&gt;2. Adversarial Loss:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Mid9&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/56/b2/56b2bb51-c6e5-4f68-8474-3f01e18056a3.png&quot; width=&quot;2022&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9zMm&quot;&gt;Дискриминатор — Multiscale PatchGAN (как в &lt;a href=&quot;https://teletype.in/@ploshkin/pix2pixhd&quot; target=&quot;_blank&quot;&gt;pix2pixHD&lt;/a&gt;), лосс — LSGAN&lt;/p&gt;
  &lt;p id=&quot;FeQa&quot;&gt;&lt;strong&gt;3. Style-augmented Cycle Consistency:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;57Qf&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e9/ea/e9eaee94-6f4f-48fd-a8e8-80d41f67f565.png&quot; width=&quot;1498&quot; /&gt;
    &lt;figcaption&gt;X1-&amp;gt;C-&amp;gt;X2-&amp;gt;C-&amp;gt;X1, но с исходным вектором стиля&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dYvX&quot;&gt;Поскольку &lt;em&gt;cycle-consistency&lt;/em&gt; для мультимодального синтеза не работает, предложена его ослабленная версия: условие затрагивает только часть латентного пространства, а именно {&lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt;,&lt;strong&gt;&lt;em&gt; S_1&lt;/em&gt;&lt;/strong&gt;}. Для генерации во домене №2 используется &lt;em&gt;style&lt;/em&gt;-эмбеддинг, сэмплированный напрямую из &lt;strong&gt;&lt;em&gt;S_2&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;83iX&quot;&gt;Логично не накладывать ограничение на стиль картинки во втором домене, иначе получится, что он однозначно определяется картинкой из первого домена. Это подтверждается теор. доказательством.&lt;/p&gt;
  &lt;p id=&quot;NbJR&quot;&gt;&lt;strong&gt;4. Domain-invariant Perceptual Loss:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;uNkF&quot;&gt;Чтобы избавиться от domain-specific информации в обычном Perceptual Loss&amp;#x27;е вставили IN-слои без денормализации — &lt;em&gt;μ &lt;/em&gt;= 0,&lt;em&gt; σ &lt;/em&gt;= I. Это помогает для обучения на больших картинках ≥512x512.&lt;/p&gt;
  &lt;figure id=&quot;ot7J&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7b/92/7b92bebb-36c0-4ae9-b052-4f4d0c17128f.png&quot; width=&quot;1382&quot; /&gt;
    &lt;figcaption&gt;Гистограммы распределения активаций VGG: same scene — одинаковая &lt;em&gt;структура&lt;/em&gt;, но разный &lt;em&gt;стиль&lt;/em&gt;; same domain — наоборот. Пример: фото одной улицы днём и ночью (same scene) vs. разные улицы ночью (same domain).&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;6FDV&quot;&gt;Теоретический анализ&lt;/h3&gt;
  &lt;p id=&quot;cpob&quot;&gt;Лосс (*) для доказательств:&lt;/p&gt;
  &lt;figure id=&quot;3XeJ&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/08/95/08952e0e-785e-4fd1-b9e2-608511e6ffff.png&quot; width=&quot;584&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2SuO&quot;&gt;&lt;strong&gt;Утв. 1&lt;/strong&gt;: &lt;strong&gt;&lt;em&gt;E*&lt;/em&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;em&gt;G*&lt;/em&gt;&lt;/strong&gt; минимизируют лосс (*).&lt;/p&gt;
  &lt;p id=&quot;Wn0b&quot;&gt;&lt;strong&gt;Утв. 2&lt;/strong&gt;: в точке оптимума (*) распределения латентных векторов равны их &lt;em&gt;prior&lt;/em&gt;&amp;#x27;ам.&lt;/p&gt;
  &lt;p id=&quot;zRoH&quot;&gt;&lt;strong&gt;Утв. 3&lt;/strong&gt;: в точке оптимума (*) совместные распределения равны:&lt;/p&gt;
  &lt;figure id=&quot;9Dft&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/50/2c/502ccb14-f209-42ab-ba1a-e22b569709da.png&quot; width=&quot;329.69230769230774&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;h6xk&quot;&gt;&lt;strong&gt;Утв. 4&lt;/strong&gt;: в точке оптимума (*) выполняется &lt;em&gt;style-augmented cycle&lt;/em&gt; &lt;em&gt;consistency.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;Dizb&quot;&gt;&lt;strong&gt;Утв. 5&lt;/strong&gt;: &lt;em&gt;cycle-consistency&lt;/em&gt; приводит к унимодальным дельта-функциям распределений, что означает слабое отличие результатов генерации.&lt;/p&gt;
  &lt;h2 id=&quot;QF5C&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;h3 id=&quot;t2JC&quot;&gt;Метрики&lt;/h3&gt;
  &lt;ul id=&quot;9nis&quot;&gt;
    &lt;li id=&quot;f4gv&quot;&gt;Human Preference Score&lt;/li&gt;
    &lt;li id=&quot;hxfL&quot;&gt;&lt;a href=&quot;https://wiki.spencerwoo.com/perceptual-similarity.html&quot; target=&quot;_blank&quot;&gt;LPIPS&lt;/a&gt; — оценка того, насколько реалистично выглядит картинка, с помощью дистанции между активациями предобученной сети (в данном случае, AlexNet)&lt;/li&gt;
    &lt;li id=&quot;VVrD&quot;&gt;&lt;a href=&quot;https://medium.com/octavian-ai/a-simple-explanation-of-the-inception-score-372dff6a8c7a&quot; target=&quot;_blank&quot;&gt;Conditional Inception Score&lt;/a&gt; (CIS) — замеряет реалистичность каждой отдельной картинки и разнообразия картинок в целом, основываясь на уверенности классификатора (в данном случае, Inception-v3). Усреднение по 100 входных картинок и 100 картинок на каждую входную (итого 10 000 синтезированных).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;E77s&quot;&gt;&amp;lt;To be continued 🤡&amp;gt;&lt;/p&gt;

</content></entry><entry><id>ploshkin:unit</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/unit?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>UNIT: Unsupervised Image-to-Image Translation Networks</title><published>2021-11-07T12:47:42.400Z</published><updated>2021-11-09T10:29:02.534Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b7/d2/b7d23191-2754-4db9-acd3-96cc03ecfc0f.png"></media:thumbnail><category term="im-2-im" label="im2im"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/11/7a/117a3721-a7cf-4a63-a812-6e0525b598a4.png&quot;&gt;https://arxiv.org/abs/1703.00848</summary><content type="html">
  &lt;h2 id=&quot;Zglx&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;7CmY&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1703.00848&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/1703.00848&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;rU6k&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/imaginaire/tree/master/projects/unit&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/imaginaire/tree/master/projects/unit&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;vZHD&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;32Hl&quot;&gt;В этой статье предложен фреймворк для &lt;em&gt;unsupervised&lt;/em&gt; image-to-image translation. Благодаря нему можно имея 2 разных домена изображений &lt;strong&gt;&lt;em&gt;X&lt;/em&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;em&gt;Y&lt;/em&gt;&lt;/strong&gt; смоделировать функцию, которая переводит элемент из &lt;strong&gt;&lt;em&gt;X&lt;/em&gt;&lt;/strong&gt; в элемент из &lt;strong&gt;&lt;em&gt;Y&lt;/em&gt;&lt;/strong&gt;. Например, можно научиться превращать самоедов в корги, или более продуктовый пример: фотографии со спутника в карты местности.&lt;/p&gt;
  &lt;p id=&quot;ulSN&quot;&gt;&lt;em&gt;Unsupervised&lt;/em&gt;-подход имеет смысл использовать, когда собрать обучающую выборку невозможно (например, для превращений пород собак и видов кошек), или очень дорого (например, для дневной и ночной съёмки).&lt;/p&gt;
  &lt;figure id=&quot;LkIb&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/7a/117a3721-a7cf-4a63-a812-6e0525b598a4.png&quot; width=&quot;1460&quot; /&gt;
    &lt;figcaption&gt;Превращение собак. Для каждой пары пород учится своя сеть.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KjHm&quot;&gt;Для этого авторы усилили &lt;em&gt;cycle-consistency constraint&lt;/em&gt;, которое используется для маппинга между доменами, до &lt;em&gt;shared-latent space constraint&lt;/em&gt;: существует общее латентное пространство &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt;, такое, что любая пара соответствующих изображений &lt;strong&gt;&lt;em&gt;(x, y)&lt;/em&gt;&lt;/strong&gt; маппится в одну и ту же точку из &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt;; и любая точка из &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; обязательно маппится в пару соответствующих изображений &lt;strong&gt;&lt;em&gt;(x, y)&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;RL37&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;x1Oz&quot;&gt;Будем говорить, что пара изображений &lt;strong&gt;&lt;em&gt;(x, y)&lt;/em&gt;&lt;/strong&gt; из множеств &lt;strong&gt;&lt;em&gt;X&lt;/em&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;em&gt;Y&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;соответствует&lt;/em&gt; друг другу, если&lt;strong&gt;&lt;em&gt; y&lt;/em&gt;&lt;/strong&gt; получено из &lt;strong&gt;&lt;em&gt;x&lt;/em&gt;&lt;/strong&gt; некоторым преобразованием &lt;strong&gt;&lt;em&gt;f&lt;/em&gt;&lt;/strong&gt;. Предполагается, что хотя бы одно такое &lt;strong&gt;&lt;em&gt;f&lt;/em&gt;&lt;/strong&gt; существует. Пример: дневные и ночные фотографии.&lt;/p&gt;
  &lt;p id=&quot;qdqF&quot;&gt;Отличие &lt;em&gt;unsupervised&lt;/em&gt;-подхода от привычного &lt;em&gt;supervised&lt;/em&gt; в том, какие данные доступны во время обучения:&lt;/p&gt;
  &lt;ul id=&quot;NTF3&quot;&gt;
    &lt;li id=&quot;Yg0w&quot;&gt;&lt;strong&gt;Supervised&lt;/strong&gt;: &lt;em&gt;соответствующие&lt;/em&gt; пары &lt;strong&gt;&lt;em&gt;(x, y)&lt;/em&gt;&lt;/strong&gt;. Можно говорить, что даны примеры из совместного распределения &lt;strong&gt;П(&lt;em&gt;P_X&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;P_Y&lt;/em&gt;)&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;99Bp&quot;&gt;&lt;strong&gt;Unsupervised&lt;/strong&gt;: 2 &lt;em&gt;независимых&lt;/em&gt; множества изображений &lt;strong&gt;&lt;em&gt;X&lt;/em&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;em&gt;Y&lt;/em&gt;&lt;/strong&gt;. Если переформулировать на языке статистики, то доступны примеры из частных распределений &lt;em&gt;&lt;strong&gt;P_X &lt;/strong&gt;&lt;/em&gt;и &lt;em&gt;&lt;strong&gt;P_Y&lt;/strong&gt;&lt;/em&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xfNw&quot;&gt;В обоих случаях стоит задача выучить совместное распределение, чтобы по изображению из одного домена можно было сэмплировать соответствующие изображения из другого.&lt;/p&gt;
  &lt;p id=&quot;FiIH&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Coupling_(probability)&quot; target=&quot;_blank&quot;&gt;Coupling theory&lt;/a&gt; говорит о том, что для данных частных распределений существует бесконечное множество совместных. Мотивационный пример: если даны 2 одномерных нормальных распределения, то чтобы получить сколь угодно много совместных, можно двигать одномерные вдоль осей.&lt;/p&gt;
  &lt;figure id=&quot;gbdl&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Multivariate_normal_sample.svg/2560px-Multivariate_normal_sample.svg.png&quot; width=&quot;337&quot; /&gt;
    &lt;figcaption&gt;Возможное совместное распределение двух гауссиан.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;52WO&quot;&gt;Поэтому задача: &amp;quot;Выучить совместное распределение по частным распределениям&amp;quot;, — является некорректно поставленной. Для конкретизации нужны дополнительные предположения о структуре совместного распределения. В случае &lt;em&gt;supervised&lt;/em&gt;-обучения ими выступают сами сэмплы &lt;strong&gt;&lt;em&gt;(x, y)&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;q770&quot;&gt;При &lt;em&gt;unsupervised&lt;/em&gt;-обучении для задачи image-to-image translation часто используется &lt;strong&gt;&lt;em&gt;cycle-consistency &lt;/em&gt;&lt;/strong&gt;constraint, говорящее о том, что при переводе изображения в другой домен и обратно, оно должно быть таким же, как исходное.&lt;/p&gt;
  &lt;figure id=&quot;imagepreview&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://production-media.paperswithcode.com/methods/Screen_Shot_2020-07-05_at_3.54.24_PM_d9gQdLL.png&quot; width=&quot;1494&quot; /&gt;
    &lt;figcaption&gt;Пояснение cycle-consistency из статьи про CycleGAN.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;xzTM&quot;&gt;В этой статье авторы предлагают &lt;strong&gt;&lt;em&gt;shared-latent space&lt;/em&gt;&lt;/strong&gt; constraint, более сильное условие, т.к. из него можно вывести &lt;strong&gt;&lt;em&gt;cycle-consistency &lt;/em&gt;&lt;/strong&gt;(скомбинировав нужным образом эмбеддеры и генераторы):&lt;/p&gt;
  &lt;figure id=&quot;ekwu&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/aa/e7/aae704d0-46b9-4353-84d0-dab8b51c789f.png&quot; width=&quot;269&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; — общее латентное пространство, точки которого маппятся в &lt;em&gt;соотвествующие&lt;/em&gt; пары изображений, и наоборот.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;O4u9&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;figure id=&quot;82pW&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bd/20/bd205af8-a7dc-4aa6-ac4e-62b895452a80.png&quot; width=&quot;1506&quot; /&gt;
    &lt;figcaption&gt;Схема архитектуры. Пунктиром отмечены возможные общие веса, нотация 1-&amp;gt;2 означает, что изображение преобразовано из домена 1 в домен 2; 1-&amp;gt;1 — из домена 1 в латентное пространство и обратно в домен 1.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;kYVO&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/95/7f/957f6314-8887-4953-a825-a34ba120f157.png&quot; width=&quot;2388&quot; /&gt;
    &lt;figcaption&gt;CoGAN = Coupled GAN, аналогичная архитектура, использующая условие &lt;em&gt;shared-latent space&lt;/em&gt;.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;l3qo&quot;&gt;После обучения для &lt;em&gt;image-translation&lt;/em&gt; 1-&amp;gt;2 нужно использовать композицию&lt;/p&gt;
  &lt;p id=&quot;Wim2&quot; data-align=&quot;center&quot;&gt;&lt;em&gt;&lt;strong&gt;F = G2 • E1&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;h3 id=&quot;0hgs&quot;&gt;1. VAE&lt;/h3&gt;
  &lt;p id=&quot;uIIh&quot;&gt;Энкодер и генератор рассматриваются как VAE. Энкодер выучивает распределение векторов в латентном пространстве, из которого дальше сэмплирует генератор и синтезирует изображение. Для каждого домена свой энкодер и генератор. Размерность латентного пространства в работе — &lt;em&gt;dim = 512&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;UcnH&quot;&gt;В качестве &lt;em&gt;prior&lt;/em&gt; — стандартное нормальное распределение в каждой из компонент латентного вектора; энкодер оценивает только вектор мат. ожиданий, а &lt;em&gt;σ = 1&lt;/em&gt;.&lt;/p&gt;
  &lt;figure id=&quot;Y5zy&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e8/06/e806fb94-58e3-4fd2-865e-aa614af702bd.png&quot; width=&quot;305.0810810810811&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;ctPY&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ea/5a/ea5a1091-650a-4a18-bf57-f6ca733abe73.png&quot; width=&quot;275.53846153846155&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gZfN&quot;&gt;Для обучения используется &lt;a href=&quot;https://gregorygundersen.com/blog/2018/04/29/reparameterization/&quot; target=&quot;_blank&quot;&gt;reparametrization trick&lt;/a&gt;:&lt;/p&gt;
  &lt;figure id=&quot;5wiz&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b0/30/b03036a6-d6a0-4667-800d-75ab828770f3.png&quot; width=&quot;206&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IbDY&quot;&gt;а в качестве лосса — variational upper bound*:&lt;/p&gt;
  &lt;figure id=&quot;QIGS&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6b/b7/6bb7113e-7b1f-4a23-ba92-60720ded6338.png&quot; width=&quot;1866&quot; /&gt;
    &lt;figcaption&gt;Второе слагаемое по сути регуляризатор того, что сгенерированное изображение будет таким же, как исходное.&lt;br /&gt;Поэтому &lt;strong&gt;pG1&lt;/strong&gt; — &lt;a href=&quot;https://en.wikipedia.org/wiki/Laplace_distribution&quot; target=&quot;_blank&quot;&gt;распределение Лапласа&lt;/a&gt;, и &lt;em&gt;likelihood -&amp;gt; max&lt;/em&gt; — то же самое, что и &lt;em&gt;L1 -&amp;gt; min&lt;/em&gt; между картинками.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WbNS&quot;&gt;* Это выражение очень похоже на &lt;a href=&quot;https://en.wikipedia.org/wiki/Evidence_lower_bound&quot; target=&quot;_blank&quot;&gt;ELBO&lt;/a&gt;, и я не очень понимаю, в чём отличие (а если оно есть, то не понимаю мотивацию использовать именно upper bound, когда все используют ELBO).&lt;/p&gt;
  &lt;h3 id=&quot;LV1H&quot;&gt;2. Weight-sharing&lt;/h3&gt;
  &lt;p id=&quot;OHMV&quot;&gt;Дополнительно предполагается наличие &lt;em&gt;низкоуровнего&lt;/em&gt; общего латентного пространства &lt;strong&gt;&lt;em&gt;H&lt;/em&gt;&lt;/strong&gt;. Авторы объясняют это так: &lt;strong&gt;&lt;em&gt;Z&lt;/em&gt;&lt;/strong&gt; отвечает за &lt;em&gt;высокоуровневое&lt;/em&gt; описание содержание, а &lt;strong&gt;&lt;em&gt;H&lt;/em&gt;&lt;/strong&gt; определяет то, какие пиксели будут отвечать за конкретные объекты на изображении.&lt;/p&gt;
  &lt;figure id=&quot;0hn8&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/73/77732b8f-0230-4781-98e2-66b2f4a8fd45.png&quot; width=&quot;159&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;LgWF&quot;&gt;Эта идея реализуется как несколько общих слоёв в энкодерах и генераторах. Причём если в конце энкодеров &lt;em&gt;k&lt;/em&gt; общих слоёв, то и у генераторов в начале должно быть &lt;em&gt;k&lt;/em&gt; общих слоёв. На практике авторы экспериментировали с 1–4 общими слоями.&lt;/p&gt;
  &lt;p id=&quot;4plp&quot;&gt;Однако использование только этого механизма не гарантирует, что s&lt;em&gt;&lt;u&gt;hared-latent space constraint&lt;/u&gt;&lt;/em&gt; будет выполнено. Но даже если латентные коды соответствующих картинок будут совпадать, то элементы векторов могут означать семантически разное!&lt;/p&gt;
  &lt;h3 id=&quot;o8AZ&quot;&gt;3. GANs&lt;/h3&gt;
  &lt;p id=&quot;dIZD&quot;&gt;GANы в этом фреймворке могут обучаться на двух типах сгенерированных изображений:&lt;/p&gt;
  &lt;ol id=&quot;IPkK&quot;&gt;
    &lt;li id=&quot;KUYK&quot;&gt;Из &lt;em&gt;image-reconstruction stream&lt;/em&gt;: X-&amp;gt;Z-&amp;gt;X&lt;/li&gt;
    &lt;li id=&quot;XnUE&quot;&gt;Из &lt;em&gt;image-translation stream&lt;/em&gt;: Y-&amp;gt;Z-&amp;gt;X&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;mjch&quot;&gt;Авторы подчёркивают, что adversarial learning применяется только для (2), т.к. (1) может обучаться supervised (именно это и происходит при обучении VAE).&lt;/p&gt;
  &lt;h3 id=&quot;s1Zc&quot;&gt;4. Cycle-consistency&lt;/h3&gt;
  &lt;p id=&quot;dQiS&quot;&gt;Выше было сказано, что &lt;em&gt;shared-latent space&lt;/em&gt; — более сильное условие, чем &lt;em&gt;cycle-consistency&lt;/em&gt;. А значит, &lt;em&gt;cycle-consistency&lt;/em&gt; является необходимым условием для &lt;em&gt;shared-latent space&lt;/em&gt;, поэтому в процессе обучения требуется его соблюдение:&lt;/p&gt;
  &lt;figure id=&quot;Qhgz&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/71/57/71570f0f-189d-4f89-9e57-df7984dc87b4.png&quot; width=&quot;2014&quot; /&gt;
    &lt;figcaption&gt;Третье слагаемое отвечает за близость (L1) исходной картинки и картинки, полученной из X-&amp;gt;Z-&amp;gt;Y-&amp;gt;Z-&amp;gt;X,&lt;br /&gt;а первые два — за то, чтобы распределения латентных кодов мало отличались от &lt;em&gt;prior&lt;/em&gt;.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;lZDD&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;h3 id=&quot;NJlE&quot;&gt;Объективные измерения&lt;/h3&gt;
  &lt;p id=&quot;cRn6&quot;&gt;Для объективных экспериментов использовался датасет из фотографий со спутника и соответствующих им кусочков навигационных карт — 1096 и 1098 картинок размером 512x512 (датасет предложен в работе &lt;a href=&quot;https://arxiv.org/abs/1611.07004&quot; target=&quot;_blank&quot;&gt;pix2pix&lt;/a&gt;). Обучение происходило в unsupervised-режиме на кропах 256x256 в течение 100K итераций.&lt;/p&gt;
  &lt;p id=&quot;re02&quot;&gt;Качество image-translation измерялось только для задачи &lt;em&gt;&lt;strong&gt;Image-&amp;gt;Map&lt;/strong&gt;&lt;/em&gt;, поскольку кусочки карт из унимодального распределения (для мультимодального можно использовать &lt;a href=&quot;https://arxiv.org/abs/1706.08500&quot; target=&quot;_blank&quot;&gt;FID&lt;/a&gt;, но его придумали спустя 3 месяца после публикации этой статьи).&lt;/p&gt;
  &lt;p id=&quot;0R9d&quot;&gt;Метрика — &lt;em&gt;Accuracy&lt;/em&gt; по пикселям. Пиксель считается корректным, если его цвет отличается на ≤16 от GT.&lt;/p&gt;
  &lt;figure id=&quot;R1Mr&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3f/78/3f78083d-d294-42b5-b531-3bce86645b9f.png&quot; width=&quot;1392&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gVxw&quot;&gt;&lt;strong&gt;Выводы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;iLIy&quot;&gt;
    &lt;li id=&quot;IuxW&quot;&gt;Качество генерации не зависит от количества общих слоёв &lt;em&gt;(b)&lt;/em&gt;, но их отсутствие ведёт к деградации качества &lt;em&gt;(d)&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;wE74&quot;&gt;&lt;em&gt;Reconstruction term&lt;/em&gt; важен при обучении &lt;em&gt;(c)&lt;/em&gt;, поэтому его вес должен быть достаточно большим(в экспериментах&lt;em&gt; λ_2 = λ_4&lt;/em&gt; — это коэффициенты при reconstruction-лоссах)&lt;/li&gt;
    &lt;li id=&quot;yc7K&quot;&gt;Отсутствие лосса для cycle-consistency также приводит к ухудшению качества &lt;em&gt;(d)&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;2h8Q&quot;&gt;Визуальное сравнение&lt;/h3&gt;
  &lt;p id=&quot;5dQh&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;qjWo&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/76/e7/76e7123e-d59c-435b-8aca-5aa2d6e4a55e.png&quot; width=&quot;1346&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;RaRj&quot;&gt;Авторы говорят, что модель плохо справляется со случаями, когда в &lt;em&gt;source&lt;/em&gt;-домене не хватает информации для адекватного перевода в &lt;em&gt;target&lt;/em&gt;-домен. Например, для задачи &lt;em&gt;&lt;strong&gt;Night-&amp;gt;Day&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
  &lt;figure id=&quot;t41U&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/41/05/41050d76-0890-4ae3-9112-96948ee07fae.png&quot; width=&quot;1348&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;huIE&quot;&gt;Domain Adaptation&lt;/h3&gt;
  &lt;figure id=&quot;y2OT&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e8/44/e8447347-6968-48b7-bbf3-9e5655a3f1be.png&quot; width=&quot;1358&quot; /&gt;
    &lt;figcaption&gt;Наиболее важный результат — sota для &lt;em&gt;&lt;strong&gt;SVHN-&amp;gt;MNIST&lt;/strong&gt;&lt;/em&gt;, т.к. датасеты совсем из разных доменов&lt;br /&gt;(SVHN — фотографии номеров домов).&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;t2hV&quot;&gt;&lt;strong&gt;Задача:&lt;/strong&gt; имея размеченные картинки в &lt;em&gt;source&lt;/em&gt;-домене, обучить классификатор для &lt;em&gt;target&lt;/em&gt;-домена, в котором разметка отсутствует.&lt;/p&gt;
  &lt;p id=&quot;QYHX&quot;&gt;&lt;strong&gt;Решение:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;d0pJ&quot;&gt;
    &lt;li id=&quot;Autb&quot;&gt;Обучить UNIT для задачи &lt;strong&gt;&lt;em&gt;Source-&amp;gt;Target&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;Ac92&quot;&gt;Одновременно с этим учить классификатор &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt;, использующий верхнеуровневые фичи дискриминатора для &lt;em&gt;source&lt;/em&gt;-домена&lt;/li&gt;
    &lt;li id=&quot;kjV1&quot;&gt;Последние слои дискриминаторов — общие&lt;/li&gt;
    &lt;li id=&quot;8gPr&quot;&gt;Накинуть L1-регуляризацию на фичи с последнего слоя дискриминаторов для &lt;em&gt;соответствующих&lt;/em&gt; картинок&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;kC5G&quot;&gt;Таким образом оба дискриминатора переводят картинки из обоих доменов в одно семантическое пространство, а значит для классификации можно пользоваться уже обученным классификатором &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;X5VF&quot;&gt;Ограничения подхода&lt;/h3&gt;
  &lt;ol id=&quot;5bC4&quot;&gt;
    &lt;li id=&quot;tU71&quot;&gt;Поскольку в качестве &lt;em&gt;prior&lt;/em&gt;&amp;#x27;а в латентном пространстве выступает нормальное распределение, функция &lt;em&gt;image-translation&lt;/em&gt; унимодальна&lt;/li&gt;
    &lt;li id=&quot;Q1Ih&quot;&gt;Нестабильный алгоритм поиска оптимальной седловой точки&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;FctQ&quot;&gt;В следующей работе — &lt;a href=&quot;https://arxiv.org/abs/1804.04732&quot; target=&quot;_blank&quot;&gt;MUNIT&lt;/a&gt; — предлагается фреймворк для мультимодального синтеза.&lt;/p&gt;

</content></entry><entry><id>ploshkin:spade</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/spade?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>SPADE: Semantic Image Synthesis with Spatially-Adaptive Normalization</title><published>2021-11-05T20:59:38.997Z</published><updated>2021-11-09T10:28:38.372Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/5b/0f/5b0ff635-550c-4622-8118-e94c453e1bc0.png"></media:thumbnail><category term="im-2-im" label="im2im"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/f0/56/f056a4a9-5861-4a81-adda-8c90c2772e3f.png&quot;&gt;https://arxiv.org/abs/1903.07291</summary><content type="html">
  &lt;h2 id=&quot;oMYb&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;FTRs&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1903.07291&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/1903.07291&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;Eo1q&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/imaginaire/tree/master/projects/spade&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/imaginaire/tree/master/projects/spade&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;39HX&quot;&gt;&lt;a href=&quot;http://nvidia-research-mingyuliu.com/gaugan/&quot; target=&quot;_blank&quot;&gt;http://nvidia-research-mingyuliu.com/gaugan/&lt;/a&gt; — демка&lt;/p&gt;
  &lt;h2 id=&quot;4284&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;Xlla&quot;&gt;Наконец-то продакшн-качество в генерации картинок! Можно даже потыкаться в &lt;a href=&quot;http://nvidia-research-mingyuliu.com/gaugan&quot; target=&quot;_blank&quot;&gt;демку&lt;/a&gt; и нарисовать члены в ландшафте (спойлер: это непросто)&lt;/p&gt;
  &lt;figure id=&quot;gOhp&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f0/56/f056a4a9-5861-4a81-adda-8c90c2772e3f.png&quot; width=&quot;2454&quot; /&gt;
    &lt;figcaption&gt;10 попыток скрестить разные материалы, и у меня получилось!&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;hW0r&quot;&gt;Ну а если серьёзно: авторы говорят, что пропускать семантические карты через &lt;em&gt;InstanceNorm&lt;/em&gt; неправильно, потому что существенная часть информации &amp;quot;вымывается&amp;quot;. Это справедливо для однородных карт, коими являются карты сегментации (много однородных областей). В разделе 🔎 &lt;strong&gt;Детали&lt;/strong&gt; есть мотивационный пример, поясняющий этот эффект.&lt;/p&gt;
  &lt;p id=&quot;VjMW&quot;&gt;Вместо этого предлагается использовать слой SPatially-Adaptive (DE)normalization (SPADE):&lt;/p&gt;
  &lt;ol id=&quot;hjPS&quot;&gt;
    &lt;li id=&quot;Sw5W&quot;&gt;Семантические карты пропускаются через лёгкую CNN &lt;strong&gt;без&lt;/strong&gt; нормализаций&lt;/li&gt;
    &lt;li id=&quot;rNPN&quot;&gt;На выходе получаются параметры денормализации, разные для каждого канала и пространственной координаты пикселя (в отличие от BN и IN)&lt;/li&gt;
    &lt;li id=&quot;9P8n&quot;&gt;Текущие фичемапы денормализуются с этими параметрами после BN&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2 id=&quot;2bqQ&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;ypbe&quot;&gt;Авторы сосредоточились на генерации картинок по картам сегментации. Так что всё как обычно:&lt;/p&gt;
  &lt;ul id=&quot;OOiY&quot;&gt;
    &lt;li id=&quot;B7Ht&quot;&gt;&lt;strong&gt;Вход&lt;/strong&gt;: карта сегментации&lt;/li&gt;
    &lt;li id=&quot;Xlzy&quot;&gt;&lt;strong&gt;Выход&lt;/strong&gt;: реалистичное изображение, соответствующее карте сегментации&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5L2q&quot;&gt;Основной целью было обеспечить хорошее соответствие GT-карте сегментации при достижении &lt;em&gt;достаточного&lt;/em&gt; реализма.&lt;/p&gt;
  &lt;h2 id=&quot;qSw9&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;h3 id=&quot;GwiW&quot;&gt;SPADE-layer&lt;/h3&gt;
  &lt;p id=&quot;MJsf&quot;&gt;Все нормализационные слои можно разделить на 2 типа: &lt;em&gt;unconditional&lt;/em&gt; и &lt;em&gt;conditional&lt;/em&gt;. К первому типу относятся, например:&lt;/p&gt;
  &lt;ul id=&quot;3ICc&quot;&gt;
    &lt;li id=&quot;8fIe&quot;&gt;(Sync-) BatchNorm&lt;/li&gt;
    &lt;li id=&quot;XTcO&quot;&gt;GroupNorm&lt;/li&gt;
    &lt;li id=&quot;mmNu&quot;&gt;InstanceNorm&lt;/li&gt;
    &lt;li id=&quot;aWET&quot;&gt;LayerNorm&lt;/li&gt;
    &lt;li id=&quot;MRM6&quot;&gt;WeightNorm&lt;/li&gt;
    &lt;li id=&quot;y62e&quot;&gt;SpectralNorm&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;rmBO&quot;&gt;То есть это слои,&lt;em&gt; не зависящие&lt;/em&gt; от содержания картинок.&lt;/p&gt;
  &lt;p id=&quot;ayH8&quot;&gt;К &lt;em&gt;conditional&lt;/em&gt;-нормализациям, когда параметры нормализации вычисляются по некоторой входной информации, относятся:&lt;/p&gt;
  &lt;ul id=&quot;9xXc&quot;&gt;
    &lt;li id=&quot;8ece&quot;&gt;Conditional BatchNorm (на основе класса изображения)&lt;/li&gt;
    &lt;li id=&quot;BeEe&quot;&gt;AdaIN (на основе эмбеддинга изображения)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;no0p&quot;&gt;&lt;strong&gt;Утверждение&lt;/strong&gt;: типичные нормализационные слои &amp;quot;вымывают&amp;quot; пространственную информацию&lt;/p&gt;
  &lt;figure id=&quot;XGtz&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/26/15/2615e903-817f-4110-bd9d-adedfd93d42f.png&quot; width=&quot;517&quot; /&gt;
    &lt;figcaption&gt;На входе однотонная карта с одним классом (sky / grass). pix2pixHD генерирует серую картинку,&lt;br /&gt;т.к. InstanceNorm зануляет фичемапу; а предложенный SPADE хорошо отрисовывает текстуру.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dRfV&quot;&gt;Следовательно, использовать энкодер, на вход которому приходит карта сегментации, — как минимум неоптимально (цитата из статьи), т.к. она точно будет подвергаться нормализации.&lt;/p&gt;
  &lt;p id=&quot;bliF&quot;&gt;Вместо этого предлагается прокидывать информацию об объектах через &lt;em&gt;conditional&lt;/em&gt;-нормализацию:&lt;/p&gt;
  &lt;figure id=&quot;8Mjy&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/21/24/2124e3cd-150c-4416-a214-6456dc237c29.png&quot; width=&quot;343.3285714285714&quot; /&gt;
    &lt;figcaption&gt;SPADE-layer&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;AauT&quot;&gt;Для генерации &lt;em&gt;разнородных&lt;/em&gt; текстур помогают 2 фактора:&lt;/p&gt;
  &lt;ul id=&quot;LgQH&quot;&gt;
    &lt;li id=&quot;vHRh&quot;&gt;Карта сегментации &lt;strong&gt;не&lt;/strong&gt; подвергается нормализации&lt;/li&gt;
    &lt;li id=&quot;8s0c&quot;&gt;Сохранение spatial-информации: теперь у каждого пикселя свои параметры денормализации&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;rhpa&quot;&gt;SPADE-генератор&lt;/h3&gt;
  &lt;figure id=&quot;SYg2&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/55/22/552278f5-5468-4a1f-86d6-9ed49ec54ff6.png&quot; width=&quot;1946&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8DEk&quot;&gt;В каждый SPADE-слой подаются ресайзнутые до нужного размера карты сегментации.&lt;/p&gt;
  &lt;p id=&quot;WJQL&quot;&gt;&lt;strong&gt;NB&lt;/strong&gt;: в случае, когда число каналов на входе и выходе SPADE-ResBlk разные, внутри skip-connection также вставляется SPADE-слой. &lt;/p&gt;
  &lt;p id=&quot;3A3K&quot;&gt;Поскольку теперь нет нужды в энкодере, который бы извлекал семантику из карт сегментации, входом в генератор является случайный вектор (&lt;em&gt;dim&lt;/em&gt; = 256, каждый элемент из стандартного нормального распределения — &lt;strong&gt;не как на картинке&lt;/strong&gt;). Это значительно ускоряет время инференса.&lt;/p&gt;
  &lt;h3 id=&quot;zrh4&quot;&gt;Multi-modal synthesis&lt;/h3&gt;
  &lt;figure id=&quot;bt3d&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ee/62/ee626bc0-349f-40a2-b0c1-22cf7bcc44fd.png&quot; width=&quot;234.71967654986517&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qiLb&quot;&gt;Совместно с генератором обучается энкодер, который генерирует случайный вектор по входному изображению. Таким образом, энкодер и генератор формируют VAE, и для обучения энкодера к общему лоссу добавляется KL-div.&lt;/p&gt;
  &lt;p id=&quot;B0ES&quot;&gt;Это позволяет синтезировать изображения с определённым стилем:&lt;/p&gt;
  &lt;figure id=&quot;4xwp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b4/25/b4250d60-431a-40f5-bf79-609cbabc6133.png&quot; width=&quot;1458&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QyPU&quot;&gt;Для инференса можно предпосчитать несколько векторов стиля, чтобы не прогонять энкодер каждый раз.&lt;/p&gt;
  &lt;h2 id=&quot;nfeQ&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;p id=&quot;be7B&quot;&gt;Здесь происходит нечто интересное. Во-первых, только из &lt;em&gt;Appendix A&lt;/em&gt; становится понятно, что сравнивались картинки маленького разрешения — 256x256 (или 512x256 для Cityscapes). Во-вторых, все сравнения сфокусированы на соответствии карте сегментации, а не на реалистичности. То есть из объективных метрик — mIoU и Accuracy (FID тоже есть, но по нему SPADE проигрывает).&lt;/p&gt;
  &lt;figure id=&quot;WvYl&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/53/0b/530b330d-d56a-4bd0-a65e-1b246178d185.png&quot; width=&quot;2124&quot; /&gt;
    &lt;figcaption&gt;Объективное сравнение (accu = pixel accuracy).&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;CdUV&quot;&gt;В субъективном сравнении авторы показывали карту сегментации + 2 синтезированные картинки и задавали вопрос: &amp;quot;Какое изображение &lt;em&gt;лучше подходит&lt;/em&gt; карте сегментации&amp;quot;.&lt;/p&gt;
  &lt;figure id=&quot;pd6p&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/90/21/90218717-41a5-4f62-b84a-d2318ec07603.png&quot; width=&quot;483.7659574468085&quot; /&gt;
    &lt;figcaption&gt;В ячейках — human preference score.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XxPF&quot;&gt;Ещё у авторов можно поучиться тактично сливать компетиторов. Например, метод SIMS, который основан на склеивании картинок из базы, оказался ближе по FID на датасете Cityscapes. Авторы пишут, что это логично, т.к. по сути берутся куски из &amp;quot;реального&amp;quot; распределения. Но поскольку не всегда удаётся подобрать изображения в базе так, чтобы точно соответствовать карте сегментации, на субъективном сравнении этот метод оказывается сильно хуже предложенного.&lt;/p&gt;
  &lt;figure id=&quot;OSfp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/b4/34b49b35-1bf0-4f71-97f7-bfd9794fb1d3.png&quot; width=&quot;2376&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QPjL&quot;&gt;&lt;strong&gt;Датасеты&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;MKiV&quot;&gt;
    &lt;li id=&quot;lyqE&quot;&gt;COCO-Stuff — 118 000 / 5 000 (train / val), 182 класса (подмножество COCO, содержит разнообразные сцены)&lt;/li&gt;
    &lt;li id=&quot;VLCT&quot;&gt;ADE20K — 20 210 / 2 000, 150 классов&lt;/li&gt;
    &lt;li id=&quot;GMsv&quot;&gt;ADE20K-outdoor — подмножество со сценами вне помещений&lt;/li&gt;
    &lt;li id=&quot;F9WZ&quot;&gt;Cityscapes — 3 000 / 500&lt;/li&gt;
    &lt;li id=&quot;24bQ&quot;&gt;Flickr Landscapes — 41 000 / 1 000 (нет аннотаций, для этого использовался DeepLabV2)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;fn7p&quot;&gt;Сравнение с pix2pixHD + ablation study&lt;/h3&gt;
  &lt;p id=&quot;FlB9&quot;&gt;Для сравнений предложен бейзлайн &lt;strong&gt;pix2pixHD++&lt;/strong&gt; — это сеть pix2pixHD с улучшениями за 2017–2019 гг.:&lt;/p&gt;
  &lt;ul id=&quot;bCTR&quot;&gt;
    &lt;li id=&quot;qFcz&quot;&gt;&lt;a href=&quot;https://paperswithcode.com/method/gan-hinge-loss&quot; target=&quot;_blank&quot;&gt;hinge GAN-loss&lt;/a&gt; (вместо LSGAN)&lt;/li&gt;
    &lt;li id=&quot;GC5X&quot;&gt;&lt;a href=&quot;https://paperswithcode.com/method/spectral-normalization&quot; target=&quot;_blank&quot;&gt;SpectralNorm&lt;/a&gt; для свёрток&lt;/li&gt;
    &lt;li id=&quot;mz2T&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1706.08500&quot; target=&quot;_blank&quot;&gt;TTUR&lt;/a&gt; при обучении&lt;/li&gt;
    &lt;li id=&quot;yCIG&quot;&gt;Sync-BN (вместо BN)&lt;/li&gt;
    &lt;li id=&quot;ESbQ&quot;&gt;б&lt;strong&gt;о&lt;/strong&gt;льший batch size (32 вместо 8)&lt;/li&gt;
    &lt;li id=&quot;sCLa&quot;&gt;Glorot init (вместо нормального распределения)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;a31S&quot;&gt;И модификации:&lt;/p&gt;
  &lt;ul id=&quot;AuBD&quot;&gt;
    &lt;li id=&quot;jgkZ&quot;&gt;w/ Concat — на каждом промежуточном слое подклеивается карта сегментации соответствующего размера&lt;/li&gt;
    &lt;li id=&quot;lINO&quot;&gt;w/ SPADE — комбинация со SPADE-слоями&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;jAA0&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/97/91/9791ce89-f568-4a9c-bdb2-462811e5a317.png&quot; width=&quot;437.00000000000006&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;F0Lm&quot;&gt;Во-первых, авторы исследовали важность SPADE-модуля. По таблице видно, что все бейзлайны без SPADE (в том числе логичная моификация w/ Concat) показывают худшие результаты, чем со SPADE, даже при большем числе параметров.&lt;/p&gt;
  &lt;figure id=&quot;cwIt&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5b/cf/5bcfbd37-456b-4061-983c-6b8c2d6c8cbc.png&quot; width=&quot;383&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;AlAf&quot;&gt;Во-вторых, были эксперименты с разными модификациями SPADE-генератора. Из интересного: обнаружилось, что увеличение числа параметров приводит к худшим результатам (переобучение?). И карты сегментации на входе вместо случайного вектора тоже вредят качеству.&lt;/p&gt;
  &lt;figure id=&quot;0sdx&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fb/bc/fbbca859-f121-4c3b-963a-2e65fbdafb5b.png&quot; width=&quot;393.7698744769874&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OhuQ&quot;&gt;Наконец, авторы провели ablation study, в котором показали, что все компоненты архитектуры и лоссов важны.&lt;/p&gt;

</content></entry><entry><id>ploshkin:pix2pixhd</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/pix2pixhd?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>pix2pixHD: High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs</title><published>2021-11-03T14:50:28.629Z</published><updated>2021-11-09T10:28:18.940Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/24/a0/24a0ff07-c265-420b-9b18-e183a337ab97.png"></media:thumbnail><category term="im-2-im" label="im2im"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/65/a1/65a19b84-d4d7-4ccb-b765-36af88a3d07e.png&quot;&gt;https://arxiv.org/abs/1711.11585</summary><content type="html">
  &lt;h2 id=&quot;Au0b&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;wvoo&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1711.11585&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/1711.11585&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;R1IZ&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/imaginaire/tree/master/projects/pix2pixhd&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/imaginaire/tree/master/projects/pix2pixhd&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;V9FY&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;6W13&quot;&gt;Эта работа положила начало conditional-генерации изображений в высоком разрешении. Она используется в основе дальнейших исследований для image-to-image translation, в первую очередь &lt;a href=&quot;https://nvlabs.github.io/SPADE/&quot; target=&quot;_blank&quot;&gt;SPADE&lt;/a&gt;, и &lt;a href=&quot;https://teletype.in/@ploshkin/vid2vid&quot; target=&quot;_blank&quot;&gt;video-to-video&lt;/a&gt; translation подходы.&lt;/p&gt;
  &lt;figure id=&quot;yYGg&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/65/a1/65a19b84-d4d7-4ccb-b765-36af88a3d07e.png&quot; width=&quot;1200&quot; /&gt;
    &lt;figcaption&gt;Результат генерации по edge-map&amp;#x27;ам&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VY9L&quot;&gt;Для этого авторы предложили несколько доработок к оригинальному &lt;a href=&quot;https://arxiv.org/abs/1611.07004&quot; target=&quot;_blank&quot;&gt;pix2pix&lt;/a&gt;-фреймворку:&lt;/p&gt;
  &lt;ul id=&quot;f9W9&quot;&gt;
    &lt;li id=&quot;Dqpp&quot;&gt;Coarse-to-fine генератор — общие coarse-планы картинки генерируются в низком разрешении, а затем добавляются мелкие детали и текстуры&lt;/li&gt;
    &lt;li id=&quot;G3FD&quot;&gt;Multi-scale дискиминаторы — одна и та же архитектура (с разными весами) применяется к картинкам разного размера для достижения реализма на разных масштабах. Это дополнительно стабилизирует обучение&lt;/li&gt;
    &lt;li id=&quot;MzbZ&quot;&gt;&lt;a href=&quot;https://paperswithcode.com/method/feature-matching&quot; target=&quot;_blank&quot;&gt;FM&lt;/a&gt;-loss — форсит генератор синтезировать изображения с &amp;quot;реалистичной&amp;quot; проекцией в латентном пространстве. Это также стабилизирует обучение&lt;/li&gt;
    &lt;li id=&quot;tPWB&quot;&gt;Использование instance-segmentation map&amp;#x27;ов для разделения объектов внутри одного класса&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;HoE2&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;atki&quot;&gt;Имея &lt;em&gt;семантические карты&lt;/em&gt; синтезировать изображение, которое будет выглядеть реалистично и соответствовать семантическим картам.&lt;/p&gt;
  &lt;p id=&quot;O6sF&quot;&gt;В качестве семантических карт можно использовать (но не ограничиваться):&lt;/p&gt;
  &lt;ul id=&quot;YJRY&quot;&gt;
    &lt;li id=&quot;uAmQ&quot;&gt;Карты границ&lt;/li&gt;
    &lt;li id=&quot;M6bK&quot;&gt;Карты сегментации (можно комбинировать semantic и instance)&lt;/li&gt;
    &lt;li id=&quot;gAuq&quot;&gt;Карты глубины&lt;/li&gt;
    &lt;li id=&quot;vNMO&quot;&gt;Карты сегментации поз человека&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;PEGc&quot;&gt;Пример:&lt;/p&gt;
  &lt;figure id=&quot;aXSv&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/0c/9d0c4f44-1cb8-4184-b75f-f62d3432afb4.png&quot; width=&quot;524.8297213622291&quot; /&gt;
    &lt;figcaption&gt;Вход: карта сегментации и карта границ&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;v56D&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bc/70/bc70f17f-2471-4e6a-b536-459027874edb.png&quot; width=&quot;522.9999999999999&quot; /&gt;
    &lt;figcaption&gt;Результат pix2pixHD&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;kc5g&quot;&gt;Математически задачу можно сформулировать в терминах равенства &lt;em&gt;real&lt;/em&gt;- и &lt;em&gt;fake&lt;/em&gt;-распределений, обусловленных на одни и те же семантические данные. Поэтому предлагается использовать GAN-фреймворк, в котором минимизируется расстояние между распределениями (например, &lt;a href=&quot;https://en.wikipedia.org/wiki/Jensen%E2%80%93Shannon_divergence&quot; target=&quot;_blank&quot;&gt;JS&lt;/a&gt; или &lt;a href=&quot;https://en.wikipedia.org/wiki/Earth_mover%27s_distance&quot; target=&quot;_blank&quot;&gt;EM&lt;/a&gt;).&lt;/p&gt;
  &lt;h2 id=&quot;Nuwb&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;h3 id=&quot;pYGu&quot;&gt;Coarse-to-fine генератор&lt;/h3&gt;
  &lt;figure id=&quot;vkgU&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c8/13/c8130baf-c47a-4e0f-964a-a14174375502.png&quot; width=&quot;1308&quot; /&gt;
    &lt;figcaption&gt;G1 — &lt;em&gt;global&lt;/em&gt; generator, отвечает за общий контент; G2 — &lt;em&gt;local&lt;/em&gt; generator, добавляет мелкие детали&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;C0e1&quot;&gt;Генератор состоит из нескольких частей:&lt;/p&gt;
  &lt;ul id=&quot;IfGF&quot;&gt;
    &lt;li id=&quot;Ygsg&quot;&gt;&lt;strong&gt;&lt;em&gt;G1&lt;/em&gt;&lt;/strong&gt; — &lt;em&gt;global&lt;/em&gt;-генератор, который по уменьшенному семантическому изображению генерирует реалистичную картинку того же &lt;em&gt;мелкого&lt;/em&gt; разрешения (например, 1024x512)&lt;/li&gt;
    &lt;li id=&quot;n1in&quot;&gt;&lt;strong&gt;&lt;em&gt;G[k]&lt;/em&gt;&lt;/strong&gt; (k &amp;gt; 1) — &lt;em&gt;local&lt;/em&gt;-генераторы, которые снабжают картинку текстурами и деталями мелкими деталями&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2sfi&quot;&gt;Upscale-часть &lt;strong&gt;&lt;em&gt;G2&lt;/em&gt;&lt;/strong&gt; (и любого &lt;strong&gt;&lt;em&gt;G[k]&lt;/em&gt;&lt;/strong&gt;, k &amp;gt; 1) принимает на вход сумму фичемап от downscale-части и от upscale-части &lt;strong&gt;&lt;em&gt;G[k - 1]&lt;/em&gt;&lt;/strong&gt;. Этот дизайн наследует идеи ResNet и UNet — генераторы высших порядков синтезируют &lt;em&gt;добавочное&lt;/em&gt; изображение.&lt;br /&gt;Это позволяет лучше течь градиентам и стабилизировать обучение, т. к. генерация контента происходит в низком разрешении*.&lt;/p&gt;
  &lt;p id=&quot;yfmo&quot;&gt;Хотя авторы и допускают использование нескольких генераторов, они остановились на &lt;em&gt;k&lt;/em&gt; = 2&lt;/p&gt;
  &lt;p id=&quot;uF4r&quot;&gt;* Здесь неявно утверждается, что моделирование распределения реалистичных картинок — более сложная задача, чем моделирование реалистичных текстур высокого разрешения на картинках низкого разрешения.&lt;/p&gt;
  &lt;h3 id=&quot;IS8w&quot;&gt;Multi-scale дискриминатор&lt;/h3&gt;
  &lt;p id=&quot;Oxa2&quot;&gt;Чтобы не усложнять модель дискриминатора и не оверфититься, авторы предлагают использовать одну и ту же архитектуру — &lt;a href=&quot;https://paperswithcode.com/method/patchgan&quot; target=&quot;_blank&quot;&gt;PatchGAN&lt;/a&gt; 70x70 — для разных масштабов (уменьшение в 1x, 2x, 4x раз). Каждый дискриминатор выучивает свои веса.&lt;/p&gt;
  &lt;p id=&quot;7TrO&quot;&gt;Благодаря разным receptive-field дискриминаторы определяют реалистичность на разных уровнях — те, что работают на уменьшенных картинках, смотрят на более глобальную структуру.&lt;/p&gt;
  &lt;h3 id=&quot;ul4Q&quot;&gt;FM-loss&lt;/h3&gt;
  &lt;p id=&quot;gT1V&quot;&gt;Дискриминатор &lt;strong&gt;D&lt;/strong&gt; можно рассматривать как feature-extractor для картинки. Тогда можно потребовать, чтобы фичемапы (по сути — разные статистики по изображению) &lt;em&gt;real&lt;/em&gt;- и &lt;em&gt;fake&lt;/em&gt;-изображений были близки, например, по L1:&lt;/p&gt;
  &lt;figure id=&quot;xter&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/c8/bac873a0-770e-428c-9100-fe0be6b49307.png&quot; width=&quot;508&quot; /&gt;
    &lt;figcaption&gt;&lt;em&gt;k&lt;/em&gt; — номер дискриминатора; &lt;em&gt;i&lt;/em&gt; — индекс слоя; &lt;em&gt;s&lt;/em&gt; — семантическая карта&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YGvS&quot;&gt;По сути это вариант Perceptual loss&amp;#x27;а, где в качестве сети-эмбеддера выступает дискриминатор. Для более качественных результатов можно добавить &lt;em&gt;настоящий&lt;/em&gt; Perceptual loss с предобученной VGG, и по наблюдениям авторов это улучшает результаты:&lt;/p&gt;
  &lt;figure id=&quot;RNUJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a9/6f/a96f630d-fe88-48e8-86f5-8f5114bae744.png&quot; width=&quot;1354&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;mCkV&quot;&gt;Instance maps&lt;/h3&gt;
  &lt;p id=&quot;rweS&quot;&gt;Проблема instance map в том, что нельзя заранее спрогнозировать, сколько объектов каждого типа будет на изображении. Следовательно, нельзя использовать one-hot encoding — малая размерность может оказаться недостаточным, а большая ведёт к лишним бессмысленным вычислениям.&lt;/p&gt;
  &lt;p id=&quot;ZdYL&quot;&gt;Авторы говорят, что главная информация от instance map — это границы объектов. Генератор плохо справляется с генерацией машин, когда не может отличить их друг от друга.&lt;/p&gt;
  &lt;p id=&quot;qAj9&quot;&gt;Для этого по instance map строится карта границ объектов и конкатенируется с картой сегментации.&lt;/p&gt;
  &lt;figure id=&quot;tlUJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/0c/9d0c4f44-1cb8-4184-b75f-f62d3432afb4.png&quot; width=&quot;1556&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;dYe9&quot;&gt;Instance-level Feature Embedding&lt;/h3&gt;
  &lt;p id=&quot;eYNR&quot;&gt;Чтобы влиять на генерируемые изображение, к картам сегментации и границ приклеивается ещё одно изображение. Оно содержит instance-averaged фичи исходной картинки.&lt;/p&gt;
  &lt;p id=&quot;dBLn&quot;&gt;Для этого вместе с генератором и дискриминатором обучается энкодер-декодер &lt;strong&gt;&lt;em&gt;E&lt;/em&gt;&lt;/strong&gt;, который возвращает фичемапу того же размера, что и картинка:&lt;/p&gt;
  &lt;figure id=&quot;UPkG&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/e2/8ae2c386-9f7b-43d2-a4ff-60388eadc917.png&quot; width=&quot;357.99999999999994&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Xgph&quot;&gt;После обучения по латентным векторам объектов из train-сета прогоняется K-means, чтобы получить несколько &lt;em&gt;векторов&lt;/em&gt; &lt;em&gt;стиля &lt;/em&gt;для каждого класса. На инференсе для каждого объекта случайно выбирается один из них.&lt;/p&gt;
  &lt;p id=&quot;AVt3&quot;&gt;Также это даёт возможность сделать понятный интерфейс:&lt;br /&gt;&lt;em&gt;выбери тип дороги из вариантов {асфальт, брусчатка}&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;17Pb&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ec/70/ec70118f-a8f8-4a01-99b9-945678efe34b.png&quot; width=&quot;1396&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;YbrB&quot;&gt;Обучение&lt;/h3&gt;
  &lt;p id=&quot;HL4l&quot;&gt;Общий лосс состоит из &lt;a href=&quot;https://arxiv.org/abs/1611.04076&quot; target=&quot;_blank&quot;&gt;LSGAN&lt;/a&gt;-компонент для minimax-оптимизации и FM-компоненты (+ VGG-loss) для стабилизации генератора:&lt;/p&gt;
  &lt;figure id=&quot;2hKv&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0c/a9/0ca99af0-3e11-4faa-8891-e3b4cfc11203.png&quot; width=&quot;482&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;06Lo&quot;&gt;λ = 10, K = 10 (для K-means)&lt;/p&gt;
  &lt;p id=&quot;FAfF&quot;&gt;На инференсе время генерации картинки 2048x1024 составляет 0.02–0.03с (скорость 33–50 FPS)&lt;/p&gt;
  &lt;h2 id=&quot;kGLZ&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;h3 id=&quot;v1yE&quot;&gt;Датасеты&lt;/h3&gt;
  &lt;ul id=&quot;jD0q&quot;&gt;
    &lt;li id=&quot;N0OV&quot;&gt;&lt;strong&gt;Cityscapes&lt;/strong&gt;: 2975 / 500 картинок для обучения / валидации, разрешение 2048x1024&lt;/li&gt;
    &lt;li id=&quot;ioIW&quot;&gt;&lt;strong&gt;NYU Indoor RGBD&lt;/strong&gt;: 1200 / 249 картинок, разрешение 561x427&lt;/li&gt;
    &lt;li id=&quot;xgDV&quot;&gt;&lt;strong&gt;ADE20K&lt;/strong&gt;: 20210 / 2000 картинок, разрешение 512xH (все картинки разного размера, рескейлились к W=512)&lt;/li&gt;
    &lt;li id=&quot;hoVf&quot;&gt;&lt;strong&gt;Helen Face&lt;/strong&gt;: 2000 / 330 картинок, разрешение 1024x1024&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xnTz&quot;&gt;Для сравнений приведены данные с валидационной выборки на Cityscapes.&lt;/p&gt;
  &lt;h3 id=&quot;Vbmo&quot;&gt;Компетиторы&lt;/h3&gt;
  &lt;ul id=&quot;PtF9&quot;&gt;
    &lt;li id=&quot;w5eC&quot;&gt;pix2pix — базовая архитектура для conditional-генерации картинок небольшого разрешения. Обучена с нуля для разрешения 2048x1024&lt;/li&gt;
    &lt;li id=&quot;atUF&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1707.09405&quot; target=&quot;_blank&quot;&gt;CRN&lt;/a&gt; — сеть для conditional-генерации картинок высокого разрешения, веса публично доступны&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;oVuX&quot;&gt;Результаты&lt;/h3&gt;
  &lt;p id=&quot;47Lp&quot;&gt;&lt;strong&gt;1. Объективное сравнение&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;BMOn&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/94/5d/945d5b12-bcd7-49cc-a62d-2ead72448ce1.png&quot; width=&quot;476.99999999999994&quot; /&gt;
    &lt;figcaption&gt;Карты сегментации получены с помощью PSPNet;&lt;br /&gt;Oracle — исходная картинка (по сути качество PSPNet и upper bound для генератора)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YdW3&quot;&gt;&lt;strong&gt;2. Субъективное сравнение&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;aj9w&quot;&gt;Оценивается &lt;em&gt;Human Preference Score&lt;/em&gt; — как часто на SbS люди выбирают наш алгоритм. Проводилось в 2 сетапах:&lt;/p&gt;
  &lt;ul id=&quot;Id1v&quot;&gt;
    &lt;li id=&quot;EqKa&quot;&gt;&lt;em&gt;Unlimited time&lt;/em&gt;: без ограничения по времени&lt;/li&gt;
    &lt;li id=&quot;eJFC&quot;&gt;&lt;em&gt;Limited time&lt;/em&gt;: с ограничением от 1/8 до 8 секунд на просмотр для понимания, как быстро заметны отличия&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;OD07&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/29/ce/29cee9aa-1418-4510-a5b0-6f7f1f190a80.png&quot; width=&quot;453&quot; /&gt;
    &lt;figcaption&gt;Unlimited time: для честности сравнения pix2pixHD обучали без instance map&amp;#x27;ов&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;I5Op&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/7a/ad7ace99-fa85-4c4a-88bf-587403e83839.png&quot; width=&quot;432&quot; /&gt;
    &lt;figcaption&gt;Limited time: чем дольше человек смотрит на пару картинок, тем лучше заметны отличия между способами генерации. То, что красная линия идёт выше зелёной, говорит о том, что pix2pixHD качественнее CRN&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;lyHq&quot;&gt;&lt;strong&gt;3. Ablation study&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;oqUg&quot;&gt;
    &lt;li id=&quot;5uVC&quot;&gt;&lt;em&gt;all losses&lt;/em&gt; vs. &lt;em&gt;GAN-loss only&lt;/em&gt;: &lt;strong&gt;68.55%&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;8xoT&quot;&gt;&lt;em&gt;all losses&lt;/em&gt; vs. &lt;em&gt;GAN-loss + FM-loss&lt;/em&gt;: &lt;strong&gt;58.90%&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;SufO&quot;&gt;&lt;em&gt;w/ instance maps&lt;/em&gt; vs. &lt;em&gt;w/o instance maps&lt;/em&gt;: &lt;strong&gt;64.34%&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;COAs&quot;&gt;&lt;em&gt;multi-scale Ds&lt;/em&gt; vs. &lt;em&gt;single&lt;/em&gt; &lt;em&gt;D&lt;/em&gt;: &lt;strong&gt;69.20%&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;rtIg&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fb/91/fb91131c-082b-434e-8c89-e3d080d42b0f.png&quot; width=&quot;522&quot; /&gt;
    &lt;figcaption&gt;Результаты для ADE20K&lt;/figcaption&gt;
  &lt;/figure&gt;

</content></entry><entry><id>ploshkin:world-consistent-vid2vid</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/world-consistent-vid2vid?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>World-Consistent Video-to-Video Synthesis</title><published>2021-10-31T12:03:51.775Z</published><updated>2021-11-09T10:27:57.095Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/68/0a/680ad260-e0d2-492d-b909-e05598280100.png"></media:thumbnail><category term="vid-2-vid" label="vid2vid"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/98/58/9858b07d-a37d-4dd4-a366-d3f953d2f8dc.png&quot;&gt;https://arxiv.org/abs/2007.08509</summary><content type="html">
  &lt;h2 id=&quot;I04K&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;Rpfk&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2007.08509&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/2007.08509&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;JCsU&quot;&gt;&lt;a href=&quot;https://nvlabs.github.io/wc-vid2vid/&quot; target=&quot;_blank&quot;&gt;https://nvlabs.github.io/wc-vid2vid/&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;EJLO&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/imaginaire/tree/master/projects/wc_vid2vid&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/imaginaire/tree/master/projects/wc_vid2vid&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;9qwm&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;2Ve8&quot;&gt;Главное достижение этой работы — консистентный vid2vid. Теперь если объекты попадают на видео второй раз, они имеют те же цвета, что и в первый — то есть сеть теперь &amp;quot;помнит&amp;quot; состояние всего ранее сгенерированного мира. Это достигается за счёт того, что &lt;em&gt;по всем &lt;/em&gt;сгенерированным кадрам строится общий 3D point-cloud, где каждому пикселю соответствует его цвет. На основе этого point-cloud&amp;#x27;а происходит синтез (рендеринг) новых кадров видео, соответствующих семантическим кадрам driving-video.&lt;/p&gt;
  &lt;p id=&quot;udTD&quot;&gt;Плюсом к этому удалось добиться и большего реализма при рендеринге и лучшей временн&lt;strong&gt;о&lt;/strong&gt;й стабильности.&lt;/p&gt;
  &lt;figure id=&quot;f0bX&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/98/58/9858b07d-a37d-4dd4-a366-d3f953d2f8dc.png&quot; width=&quot;1940&quot; /&gt;
    &lt;figcaption&gt;Сравнение результатов генерации для зацикленных видео 1-&amp;gt;N-&amp;gt;1. Видно, что vid2vid разваливается как по структуре (см. полосы на дороге), так и по корректности цветов (диван стал оранжевым).&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KlZS&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;1k9C&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;lRe9&quot;&gt;Формулировка задачи точно такая же, как и в vid2vid — сделать так, чтобы распределения сгенерированных видео и реалистичных совпадали при обусловленности на одни и те же семантические карты.&lt;/p&gt;
  &lt;p id=&quot;cAEa&quot;&gt;В этой работе авторы вводят понятие &lt;em&gt;world consistency&lt;/em&gt;, называя его частным случаем и более сильным условием, чем просто &lt;em&gt;temporal consistency&lt;/em&gt;. Видео удовлетворяет &lt;em&gt;world consistency&lt;/em&gt;, если оно консистентно относительно всего 3D-мира, который видит зритель при просмотре сгенерированного видео (в отличие от temporal consistency, для которой требуется консистентность на каждом небольшом промежутке вижео).&lt;/p&gt;
  &lt;p id=&quot;tozu&quot;&gt;Математически это не формулируется, но интуитивно идея понятна — увиденные ранее объекты при повторном появлении должны иметь тот же вид.&lt;/p&gt;
  &lt;h2 id=&quot;RiXu&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;p id=&quot;kias&quot;&gt;Вводится понятие &lt;strong&gt;guidance image&lt;/strong&gt; — это дополнительная картинка, которая помогает генератору правильно раскрашивать и текстурировать новый кадр в соответствии с ранее сгенерированными. Они должны содержать информацию о 3D-пространстве и о всех предыдущих кадрах. Авторы предлагают использовать для этого point-cloud сцены, который строится кадр за кадром по всему видео. С каждым новым сгенерированным кадром на point-cloud добавляются новые точки с соответствующими цветами.&lt;/p&gt;
  &lt;p id=&quot;gckN&quot;&gt;Причём для обучения и инференса метод построения этого point-cloud&amp;#x27;а может отличаться: если для обучающих видео сложно получить point-cloud&amp;#x27;ы и имеет смысл использовать Structure-from-Motion (SfM) сети, то при инференсе для создания driving-видео может использоваться игровой движок, который знает GT-point-cloud для сцены.&lt;/p&gt;
  &lt;p id=&quot;rfzp&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;1UID&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3f/7a/3f7aed56-03c6-46a6-ae39-7da10f7cbebb.png&quot; width=&quot;1986&quot; /&gt;
    &lt;figcaption&gt;Пример построения и использования &lt;strong&gt;guidance image&lt;/strong&gt; для генерации нового view&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;03ul&quot;&gt;В архитектуре 2 нововведения:&lt;/p&gt;
  &lt;ol id=&quot;m0Q9&quot;&gt;
    &lt;li id=&quot;eZmQ&quot;&gt;Нет прямого варпинга на основе OF (не используется формула маттинга), поскольку преобразование сцены в пространстве задаётся векторами перемещения 3D-точек — motion field. Тем не менее, поскольку нет нормального способа оценки motion field, происходит оценка OF, результат эмбеддится сетью, и выходы слоёв используются для параметров демодуляции в Multi-SPADE модулях генератора (причём так, чтобы соответствовал уровень фичей).&lt;/li&gt;
    &lt;li id=&quot;3rfb&quot;&gt;Multi-SPADE модуль — несколько последовательных демодуляций с разными параметрами. Он нужен для того, чтобы принимать во внимание информацию от разных источников: семантических карт, OF и guidance images.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;zKEX&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://nvlabs.github.io/wc-vid2vid/images/overview.png&quot; width=&quot;2492&quot; /&gt;
    &lt;figcaption&gt;Схема архитектуры&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;w1EG&quot;&gt;Использование разных эмбеддеров и Multi-SPADE модуля имеет несколько преимуществ по сравнению с конкатенацией всех источников и общим эмбеддером:&lt;/p&gt;
  &lt;ul id=&quot;TEt8&quot;&gt;
    &lt;li id=&quot;Adcs&quot;&gt;Лучшая репрезентативность. Например, карты сегментации определяют форму и классы объектов, а guidance images — их цвета&lt;/li&gt;
    &lt;li id=&quot;t5yo&quot;&gt;Легко учесть особенности разных видов данных. Например, в guidance images есть пропуски из-за ограничений SfM, поэтому в целесообразно использовать &lt;a href=&quot;https://arxiv.org/abs/1804.07723&quot; target=&quot;_blank&quot;&gt;частичные свёртки&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;Fv0V&quot;&gt;Можно предобучить генератор на single-image generation благодаря тому, что при использовании Multi-SPADE кардинально меняются только нормализационные слои.&lt;br /&gt;При переходе к видео нужно обучить только их, после чего дотюнить всю сеть. Это большой плюс, т. к. сбор картиночных датасетов гораздо проще, чем аннотация видео&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;R9a7&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7a/e2/7ae20aa5-569b-4e5d-9a48-a57a2d580f40.png&quot; width=&quot;541&quot; /&gt;
    &lt;figcaption&gt;Multi-SPADE&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;ivmC&quot;&gt;Обучение&lt;/h3&gt;
  &lt;p id=&quot;9zck&quot;&gt;Обучение проводилось в 2 этапа:&lt;/p&gt;
  &lt;ol id=&quot;K61b&quot;&gt;
    &lt;li id=&quot;cO5K&quot;&gt;Single-image generation — обучается только первый SPADE-блок из 3-х. На этом этапе сеть учится генерировать реалистичные картинки по семантическим картам. Обучение длилось 20 эпох для разрешения 1024x512&lt;/li&gt;
    &lt;li id=&quot;3NmL&quot;&gt;Video generation — обучаются все 3 SPADE-блока. Кол-во генерируемых кадров удваивалось каждую эпоху: 8-&amp;gt;16-&amp;gt;32, дальше не менялось. Тоже 20 эпох&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;XiRU&quot;&gt;Такой 2-этапный подход ускорил и стабилизировал обучение. Для GAN-лоссов вместо LSGAN выбрана другая модификация — &lt;a href=&quot;https://paperswithcode.com/method/gan-hinge-loss&quot; target=&quot;_blank&quot;&gt;hinge GAN loss&lt;/a&gt;. Помимо всех стандартных vid2vid-лоссов был добавлен &lt;em&gt;world-consistency loss&lt;/em&gt;, чтобы форсить похожесть текущей генерации на предыдущие кадры.&lt;/p&gt;
  &lt;figure id=&quot;OxWv&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f9/a6/f9a6926c-1617-4bad-a240-e691b617857f.png&quot; width=&quot;208.23529411764707&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wKrt&quot;&gt;Для аннотирования использовались:&lt;/p&gt;
  &lt;ul id=&quot;6vxz&quot;&gt;
    &lt;li id=&quot;Ayjm&quot;&gt;DensePose — UV-координаты и сегментации поз&lt;/li&gt;
    &lt;li id=&quot;ziBh&quot;&gt;OpenPose — кейпоинты поз&lt;/li&gt;
    &lt;li id=&quot;pwCs&quot;&gt;MegaDepth — карты глубины&lt;/li&gt;
    &lt;li id=&quot;48Ui&quot;&gt;DeepLabv3-Plus c бэкбоном WideResNet38 — карты сегментации для Cityscapes&lt;/li&gt;
    &lt;li id=&quot;XUeH&quot;&gt;NYUDv2 — карты сегментации для ScanNet&lt;/li&gt;
    &lt;li id=&quot;VHB2&quot;&gt;OpenSfM — point-cloud&amp;#x27;ы для guidance images&lt;/li&gt;
    &lt;li id=&quot;4XTJ&quot;&gt;HED — edge maps для MannequinChallenge и ScanNet&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;un31&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;figure id=&quot;J153&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7c/3b/7c3bbcda-e4d4-48a9-98f8-0ba201c91c5d.png&quot; width=&quot;1258&quot; /&gt;
    &lt;figcaption&gt;Сравнение методов по объективным метрикам. P. A. — pixel accuracy&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VqD4&quot;&gt;Для сравнения использовались датасеты с практически статичными сценами, в которых SfM работает достаточно хорошо:&lt;/p&gt;
  &lt;ul id=&quot;CHME&quot;&gt;
    &lt;li id=&quot;N7HH&quot;&gt;Cityscapes&lt;/li&gt;
    &lt;li id=&quot;BGbg&quot;&gt;MannequinChallenge&lt;/li&gt;
    &lt;li id=&quot;PkcI&quot;&gt;ScanNet — видео румтуров&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;rnhs&quot;&gt;Компетиторы:&lt;/p&gt;
  &lt;ul id=&quot;4KiB&quot;&gt;
    &lt;li id=&quot;EADG&quot;&gt;vid2vid&lt;/li&gt;
    &lt;li id=&quot;MlTv&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1804.07723&quot; target=&quot;_blank&quot;&gt;Inpainting&lt;/a&gt; — sota-inpainting метод, который использовался для заполнения дырок в guidance images&lt;/li&gt;
    &lt;li id=&quot;5TS0&quot;&gt;Ours w/o W. C. — предложенная архитектура без использования guidance images&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;IRuq&quot;&gt;Forward-backward consistency&lt;/h3&gt;
  &lt;p id=&quot;f04t&quot;&gt;Помимо стандартных для этой задачи метрик и Human Preference Score зармерялась консистентность сгенерированных кадров зацикленных роликах 1-&amp;gt;N-&amp;gt;1. А именно замерялась попиксельная разница первого и последнего кадра в таких роликах в пространстве RGB и &lt;a href=&quot;https://ru.wikipedia.org/wiki/LAB&quot; target=&quot;_blank&quot;&gt;LAB&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;scvJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/55/ef/55efef0e-a9ba-4e23-b8d9-bd17491ef60a.png&quot; width=&quot;1236&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;f2is&quot;&gt;Заключение&lt;/h3&gt;
  &lt;p id=&quot;VZmu&quot;&gt;В результате помимо заявленной проблемы удалось также улучшить short-term temporal stability (авторы говорят об этом на основе своих визуальных наблюдений) и сделать возможной генерацию консистентных стерео-ракурсов:&lt;/p&gt;
  &lt;figure id=&quot;WChz&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d4/34/d4347d13-810e-4be1-9231-ad35c85b9791.png&quot; width=&quot;1234&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8CeP&quot;&gt;Основным ограничением модели являются текущие методы SfM, которые плохо справляются с динамичными сценами, что ведёт к проблемам с консистентностью&lt;/p&gt;

</content></entry><entry><id>ploshkin:few-shot-vid2vid</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/few-shot-vid2vid?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>Few-shot Video-to-Video Synthesis</title><published>2021-10-29T22:15:07.724Z</published><updated>2021-11-09T10:27:31.737Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/03/34/0334db06-de7f-41da-b1c4-cd86885449fc.png"></media:thumbnail><category term="vid-2-vid" label="vid2vid"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/b1/08/b1089b29-d8c5-4da8-8825-378899a5059b.png&quot;&gt;https://arxiv.org/abs/1910.12713</summary><content type="html">
  &lt;h2 id=&quot;qKny&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;ETgM&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1910.12713&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/1910.12713&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;PiOJ&quot;&gt;&lt;a href=&quot;https://nvlabs.github.io/few-shot-vid2vid/&quot; target=&quot;_blank&quot;&gt;https://nvlabs.github.io/few-shot-vid2vid/&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;H3sK&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/imaginaire/tree/master/projects/fs_vid2vid&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/imaginaire/tree/master/projects/fs_vid2vid&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;qBdt&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/few-shot-vid2vid&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/few-shot-vid2vid&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;dTj1&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;Tyli&quot;&gt;Предложен рабочий фреймворк для few-shot генерации видео: на входе семантическая driving-последовательность и небольшое кол-во примеров из нового домена (персонаж или иначе выглядящие пейзажи), а на выходе — реалистичное видео из нового домена, соответствующее семантике.&lt;/p&gt;
  &lt;figure id=&quot;vkA6&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b1/08/b1089b29-d8c5-4da8-8825-378899a5059b.png&quot; width=&quot;471&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Pc0k&quot;&gt;Грубо говоря, теперь можно сделать дипфейк по 1 фотографии без файнтюнинга модели. Авторы пришли к этому после того, как выяснилось, что vid2vid плохо обобщается на новые домены, и в частности не позволяет генерировать движения человека, которого не было в обучении&lt;/p&gt;
  &lt;h2 id=&quot;FtWl&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;TJEy&quot;&gt;Задача формулируется аналогично vid2vid, но теперь для генератора добавляется дополнительная информация — &lt;em&gt;K &lt;/em&gt;кадров из нового домена и соответствующая им семантическая информация (в таком же формате, как и для имеющихся данных):&lt;/p&gt;
  &lt;figure id=&quot;QcpV&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/38/1b/381b3dc6-9247-42ed-b9ef-18e0efdae8a2.png&quot; width=&quot;442&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gd10&quot;&gt;То есть на инференсе мы хотим модель, которая по нескольким новым кадрам и семантическим driving-видео сможет сгененрировать видео из нового домена с заданными движениями. Например, можно задать движения губ с одного видео, показать модели известного политика в качестве примера, и получить видео с этим политиком и нужным липсинком&lt;/p&gt;
  &lt;h2 id=&quot;vQFe&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;p id=&quot;tvi2&quot;&gt;Общая схема генератора осталась прежней — для моделирования используется функция матирования:&lt;/p&gt;
  &lt;figure id=&quot;pn4g&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e8/c5/e8c50bba-aaa9-433a-b705-f92a365ba92e.png&quot; width=&quot;433&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gkss&quot;&gt;Главным нововведением здесь является модуль &lt;em&gt;генерации весов&lt;/em&gt; для сети &lt;strong&gt;&lt;em&gt;h&lt;/em&gt;&lt;/strong&gt;, которая генерирует области заполнения окклюженов. В supplementary авторы говорят, что этот модуль по сути является обобщением AdaIN в том смысле, что их модуль позволяет генерировать свёртку больше, чем 1x1.&lt;/p&gt;
  &lt;p id=&quot;fRMW&quot;&gt;Дополнительным улучшением является то, что в качестве сети для заполнения окклюженов теперь используется sota-архитектура &lt;a href=&quot;https://arxiv.org/abs/1903.07291&quot; target=&quot;_blank&quot;&gt;SPADE&lt;/a&gt; для conditional-генерации картинок.&lt;/p&gt;
  &lt;figure id=&quot;BqPF&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d0/ba/d0bab6de-bd64-4b8b-94fb-391bd6781bcf.png&quot; width=&quot;1424&quot; /&gt;
    &lt;figcaption&gt;(a) Общая схема vid2vid, (b) архитектура модуля генерации весов, (c) схема встраивания в SPADE&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Yarg&quot;&gt;Представим, что у нас ровно один пример (картинка) из нового домена, &lt;em&gt;K&lt;/em&gt; = 1. В статье предлагается следующий алгоритм:&lt;/p&gt;
  &lt;ul id=&quot;506J&quot;&gt;
    &lt;li id=&quot;eyJV&quot;&gt;С помощью свёрточной сети &lt;strong&gt;&lt;em&gt;E_F&lt;/em&gt;&lt;/strong&gt; получить эмбеддинг картинки &lt;strong&gt;q1 &lt;/strong&gt;(верхняя чать картинки (b))&lt;/li&gt;
    &lt;li id=&quot;wV87&quot;&gt;Послойно применить MLP &lt;strong&gt;&lt;em&gt;E_P &lt;/em&gt;&lt;/strong&gt;к эмбеддингу&lt;strong&gt;q1&lt;/strong&gt;, чтобы получить параметры &lt;em&gt;демодуляции&lt;/em&gt; для SPADE-модулей в сети &lt;strong&gt;&lt;em&gt;H&lt;/em&gt; &lt;/strong&gt;(картинка (c)). Скорее всего это делается для того, чтобы фичи были одинаково низко- или высокоуровневые на конкретных слоях:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;he8O&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/40/3c/403c8708-26b5-46c8-89b8-4c3bb777a74b.png&quot; width=&quot;283.16&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;kd9i&quot;&gt;То есть по сути происходит что-то аналогичное &lt;a href=&quot;https://arxiv.org/abs/1603.04779&quot; target=&quot;_blank&quot;&gt;domain adaptation&lt;/a&gt;, когда обучаются только параметры BN&lt;/p&gt;
  &lt;h3 id=&quot;t5dq&quot;&gt;Attention-based Aggregation&lt;/h3&gt;
  &lt;p id=&quot;NQl7&quot;&gt;Если примеров &amp;gt;1, то логично будет применить для инх механизм attention, чтобы не менять оставшуюся часть схемы с MLP. Для этого потребуются семантические карты &lt;strong&gt;s_ek&lt;/strong&gt;, полученные тем же алгоритмом, что и для остальных данных.&lt;/p&gt;
  &lt;p id=&quot;rmL7&quot;&gt;Эмбеддер &lt;strong&gt;&lt;em&gt;E_A&lt;/em&gt; &lt;/strong&gt;генерирует фичемапы размером CxN (N = HxW), которые затем матрично умножаются на текущую семантическую карту &lt;strong&gt;s_t &lt;/strong&gt;(&lt;em&gt;t&lt;/em&gt;-й кадр из driving-видео). Это нужно для того, чтобы понять, какие из примеров &lt;em&gt;наиболее&lt;/em&gt; &lt;em&gt;релевантны&lt;/em&gt; &lt;strong&gt;s_t&lt;/strong&gt; при генерации выходного кадра. Для объединения результатов делается линейная комбинация, которая и подаётся дальше в MLP &lt;strong&gt;&lt;em&gt;E_P&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;HCXR&quot;&gt;Авторы говорят, что попиксельный attention помогает определять, какие области из каких примеров релевантны для генерации текущего кадра видео. Например, для позы человека можно заметить, что при генерации front большая часть attention сосредоточена на примере front, и наоборот.&lt;/p&gt;
  &lt;figure id=&quot;vUBD&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1c/43/1c433d72-48c9-472e-86f1-169cbb45d2d0.png&quot; width=&quot;288&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;KzqN&quot;&gt;Обучение&lt;/h3&gt;
  &lt;p id=&quot;SJLY&quot;&gt;Для обучения используются те же данные, что и для vid2vid, но теперь в одной обучающей выборке допускаются данные из разных доменов.&lt;/p&gt;
  &lt;figure id=&quot;XBXx&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/98/cf986f34-5a5b-466a-9d63-8df230a20c95.png&quot; width=&quot;605.5454545454545&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;yZXj&quot;&gt;Была замечена корреляция качества генерации с количеством обучающих данных и с количеством примеров из нового домена.&lt;/p&gt;
  &lt;h2 id=&quot;TDoq&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;figure id=&quot;8BUq&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/81/82/8182b39e-db7f-4789-8ec9-fdec9ed86628.png&quot; width=&quot;642.0000000000001&quot; /&gt;
    &lt;figcaption&gt;Результаты экспериментов&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Ok7r&quot;&gt;Датасеты:&lt;/p&gt;
  &lt;ul id=&quot;PIql&quot;&gt;
    &lt;li id=&quot;B4vZ&quot;&gt;YouTube Dancing videos — 1500 видео с Youtube с танцующими людьми. Во время обучения примерами были случайные кадры из синтезируемого видео. На тесте ни картинки-примеры, ни позы не были в обучающей выборке, то есть модель их не видела&lt;/li&gt;
    &lt;li id=&quot;DSQo&quot;&gt;Street Scene videos — видео с регистраторов из Германии (Cityscapes), Бостона и Нью-Йорка. На тесте дополнительно брались видео из датасетов ApolloScape и CamVid&lt;/li&gt;
    &lt;li id=&quot;z4QA&quot;&gt;FaceForensics — аналогично статье vid2vid; почему-то качество авторы не репортят&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4JwY&quot;&gt;Метрики:&lt;/p&gt;
  &lt;ul id=&quot;9j9w&quot;&gt;
    &lt;li id=&quot;U5LU&quot;&gt;Pose Error — L1 между точками gt-позы и позы, оценённой той же моделью (OpenPose) по синтезированным кадрам&lt;/li&gt;
    &lt;li id=&quot;NpGo&quot;&gt;Pixel Acc — аналог для сегментации, точность попадания пикселя в gt-класс&lt;/li&gt;
    &lt;li id=&quot;U9AT&quot;&gt;mIoU (mean IoU) — ещё один аналог Pose Error для меток классов на карте сегментации&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ETd4&quot;&gt;Компетиторы:&lt;/p&gt;
  &lt;ul id=&quot;ve3R&quot;&gt;
    &lt;li id=&quot;Upvu&quot;&gt;Encoder — для генерации используется декодер &lt;strong&gt;&lt;em&gt;h &lt;/em&gt;&lt;/strong&gt;и энкодер, который получает style vector (по сути — эмбеддинг) из картинки-примера&lt;/li&gt;
    &lt;li id=&quot;NkfY&quot;&gt;ConcatStyle — style vector конкатенируется с семантическими картами из driving video, и полученные аугментированные картинки используются для spatial modulation внутри SPADE-модулей при генерации&lt;/li&gt;
    &lt;li id=&quot;9VzD&quot;&gt;AdaIN — после каждого spatial modulation в SPADE-генераторе вставлен модуль AdaIN, параметры для которого вычисляются энкодером по картинке-примеру &lt;/li&gt;
    &lt;li id=&quot;aH3F&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1804.07739&quot; target=&quot;_blank&quot;&gt;PoseWarp&lt;/a&gt;, &lt;a href=&quot;https://github.com/AliaksandrSiarohin/monkey-net&quot; target=&quot;_blank&quot;&gt;MonkeyNet&lt;/a&gt; (предшественник &lt;a href=&quot;https://github.com/AliaksandrSiarohin/first-order-model&quot; target=&quot;_blank&quot;&gt;FOMM&lt;/a&gt; от тех же авторов)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;Dy3v&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/05/6b/056b7484-5cda-4219-9e04-e648235c72db.png&quot; width=&quot;1166&quot; /&gt;
    &lt;figcaption&gt;Визуальное сравнение результатов для YouTube dancing videos&lt;/figcaption&gt;
  &lt;/figure&gt;

</content></entry><entry><id>ploshkin:vid2vid</id><link rel="alternate" type="text/html" href="https://teletype.in/@ploshkin/vid2vid?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ploshkin"></link><title>Video-to-Video Synthesis</title><published>2021-10-28T14:45:01.226Z</published><updated>2021-11-09T10:27:13.008Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/6c/71/6c71b7af-d9cd-42e5-9097-86b8c9b0a019.png"></media:thumbnail><category term="vid-2-vid" label="vid2vid"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/38/9d/389d1901-9f70-4c3c-888d-1108c83927ed.png&quot;&gt;https://arxiv.org/abs/1808.06601</summary><content type="html">
  &lt;h2 id=&quot;psD6&quot;&gt;🔗 Ссылки&lt;/h2&gt;
  &lt;p id=&quot;nGWh&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1808.06601&quot; target=&quot;_blank&quot;&gt;https://arxiv.org/abs/1808.06601&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;EUF9&quot;&gt;&lt;a href=&quot;https://github.com/NVIDIA/vid2vid&quot; target=&quot;_blank&quot;&gt;https://github.com/NVIDIA/vid2vid&lt;/a&gt; — оригинальный репозиторий&lt;/p&gt;
  &lt;p id=&quot;dlMb&quot;&gt;&lt;a href=&quot;https://github.com/NVlabs/imaginaire&quot; target=&quot;_blank&quot;&gt;https://github.com/NVlabs/imaginaire&lt;/a&gt; — актуальный репозиторий&lt;/p&gt;
  &lt;p id=&quot;yAhI&quot;&gt;&lt;a href=&quot;https://papers.nips.cc/paper/2018/hash/d86ea612dec96096c5e0fcc8dd42ab6d-Abstract.html&quot; target=&quot;_blank&quot;&gt;NeurIPS 2018&lt;/a&gt; (тут есть supplementary material)&lt;/p&gt;
  &lt;h2 id=&quot;w1X4&quot;&gt;💎 Контрибьюшн&lt;/h2&gt;
  &lt;p id=&quot;nIK5&quot;&gt;Это первое решение для conditional-генерации видео, работающее стабильно по времени. Зачем это вообще может быть нужно:&lt;/p&gt;
  &lt;ol id=&quot;TDD8&quot;&gt;
    &lt;li id=&quot;I6C5&quot;&gt;Дешёвая генерация обучающей выборки в робототехнике (это предложили авторы, на мой взгляд немного сомнительно)&lt;/li&gt;
    &lt;li id=&quot;mHWs&quot;&gt;Дипфейки&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;UPr9&quot;&gt;Авторы предложили достаточно общий фреймворк для синтеза видео на основе семантических данных — карт сегментации, скетчей лица или поз человека.&lt;/p&gt;
  &lt;figure id=&quot;qOFf&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/38/9d/389d1901-9f70-4c3c-888d-1108c83927ed.png&quot; width=&quot;435&quot; /&gt;
    &lt;figcaption&gt;Слева GT, по центру — скетч лица (вход для vid2vid), справа — результат генерации&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;E0FK&quot;&gt;Из классного:&lt;/p&gt;
  &lt;ul id=&quot;tLkO&quot;&gt;
    &lt;li id=&quot;haxM&quot;&gt;Достаточно долгие стабильные видео — есть &lt;a href=&quot;https://drive.google.com/file/d/1XsiEauKjBkcgWcFV8YFKXvSG2fVH7Dwv/view&quot; target=&quot;_blank&quot;&gt;тест&lt;/a&gt; на 1200 кадров&lt;/li&gt;
    &lt;li id=&quot;JOdg&quot;&gt;Высокое разрешение — 2048x1024 для &lt;a href=&quot;https://www.cityscapes-dataset.com/&quot; target=&quot;_blank&quot;&gt;Cityscapes&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;dfsj&quot;&gt;Влияние на семантику — например, можно поменять метку класса на карте сегментации, и вместо деревьев нарисовать дома&lt;/li&gt;
    &lt;li id=&quot;CbO5&quot;&gt;Мультимодальность — предложен метод, как для одного входа получать разные консистентные результаты. Например, можно заменить асфальтовую дорогу на брусчатку&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;RcAH&quot;&gt;🛠 Задача&lt;/h2&gt;
  &lt;p id=&quot;fZmA&quot;&gt;Нужно построить алгоритм, который на основе семантических данных сможет генерировать видео, соответствующее семантике. Видео должно быть стабильно по времени.&lt;/p&gt;
  &lt;p id=&quot;mH3d&quot;&gt;В терминах статистики задача формулируется так: условное распределение синтезированных видео должно совпадать с условным распределением реальных видео при условии одних и тех же семантических данных:&lt;/p&gt;
  &lt;figure id=&quot;RWT7&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2f/76/2f769b92-deb0-451d-baf1-63a10d3bb6bf.png&quot; width=&quot;195&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TzMF&quot;&gt;Такая постановка хорошо ложится на GAN&amp;#x27;ы, при стандартном обучении которых минимизируется JS-divergence между распределениями.&lt;/p&gt;
  &lt;p id=&quot;Acky&quot;&gt;Для удобства предполагается, что кадры удовлетворяют условию Маркова:&lt;/p&gt;
  &lt;figure id=&quot;BhlW&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5b/56/5b5667e2-6b52-4636-a058-5fda1a0f79c0.png&quot; width=&quot;297&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ILiu&quot;&gt;Это позволяет генерировать их последовательно, вызывая генератор рекурсивно от уже сгенерированных кадров&lt;/p&gt;
  &lt;figure id=&quot;lJyS&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/56/28/5628850c-0cac-4f13-b522-359d479f9758.png&quot; width=&quot;170.13793103448276&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;fnSk&quot;&gt;🔎 Детали&lt;/h2&gt;
  &lt;h3 id=&quot;sWp5&quot;&gt;1. Генератор&lt;/h3&gt;
  &lt;p id=&quot;wH8I&quot;&gt;В генераторе используется модуль оценки Optical Flow (OF) &lt;strong&gt;&lt;em&gt;w&lt;/em&gt;&lt;/strong&gt;, чтобы варпить предыдущий кадр в текущий. Для заполнения окклюженов используется soft-маска &lt;strong&gt;&lt;em&gt;m&lt;/em&gt;&lt;/strong&gt;, чтобы справляться с размытыми объектами (близкие к камере, быстро двигающиеся) — когда варпишь размытый объект, он становится ещё более размытым, и для этого надо немножко дорисовать его текстуру. Для оценки OF и маски используются одни и те же веса, кроме последнего слоя. Сами окклюжены заполняются тем, что генерирует свёрточный генератор &lt;strong&gt;&lt;em&gt;h&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;2DGz&quot;&gt;Параметр &lt;em&gt;L&lt;/em&gt; отвечает за то, сколько предыдущих кадров используется для генерации текущего. &lt;em&gt;L&lt;/em&gt; = 1 — приводил к временн&lt;strong&gt;о&lt;/strong&gt;й нестабильности, а &lt;em&gt;L &lt;/em&gt;&amp;gt; 2 — забивал всю память (в 2018 году V100 были на 16GB), поэтому авторы остановились на &lt;em&gt;L&lt;/em&gt; = 2&lt;/p&gt;
  &lt;figure id=&quot;45zZ&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ea/ac/eaace49b-3fe6-446f-b240-e512ca98b28a.png&quot; width=&quot;413&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;xI43&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/93/98/93983d1a-81bf-4fc4-a616-131d0b3910ca.png&quot; width=&quot;449&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;doXo&quot;&gt;2. Foreground-background Prior&lt;/h3&gt;
  &lt;p id=&quot;zBJy&quot;&gt;В случае Cityscapes можно заметить, что изображение делится на фон и объекты переднего плана. При этом преобразование фона от кадра к кадру хорошо задаётся глобальным преобразованием через OF, в то время как для объектов OF вычисляется неточно. Чтобы использовать это знание, делается декомпозиция с учётом background mask:&lt;/p&gt;
  &lt;figure id=&quot;Ndvx&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9e/c5/9ec55f87-f98d-4f22-8f70-f2a3c56bdd9d.png&quot; width=&quot;671.0588235294117&quot; /&gt;
    &lt;figcaption&gt;Foreground-background prior&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dFYV&quot;&gt;Сеть &lt;strong&gt;&lt;em&gt;h_F&lt;/em&gt;&lt;/strong&gt;, генерирующая объекты переднего плана, зависит только от семантических данных, но не от предыдущих кадров.&lt;/p&gt;
  &lt;p id=&quot;eqGG&quot;&gt;Для генерации высокого разрешения используется coarse-to-fine подход:&lt;/p&gt;
  &lt;figure id=&quot;5ZgB&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/74/ac7482eb-a738-4d94-ac73-6442b80ad1b3.png&quot; width=&quot;492&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;qkb6&quot;&gt;3. Дискриминатор&lt;/h3&gt;
  &lt;p id=&quot;sYwn&quot;&gt;Использование нескольких дискриминаторов позволяет уменьшить проблему mode collapse. Используется 2 основных вида:&lt;/p&gt;
  &lt;ol id=&quot;lXKD&quot;&gt;
    &lt;li id=&quot;N6ZY&quot;&gt;Картиночный &lt;strong&gt;&lt;em&gt;D_I&lt;/em&gt;&lt;/strong&gt; — помогает каждому отдельному кадру выглядеть реалистично. Сравнивает кадры как картинки. Архитектура — multi-scale &lt;a href=&quot;https://paperswithcode.com/method/patchgan&quot; target=&quot;_blank&quot;&gt;PatchGAN&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;VdMO&quot;&gt;Видео-дискриминатор &lt;strong&gt;&lt;em&gt;D_V&lt;/em&gt;&lt;/strong&gt; — убеждается в правильности моделирования динамики. Он сравнивает последовательности кадров. Архитектура — тоже PatchGAN, с прореживанием кадров по времени (каждый k-й) для учёта разных временных зависимостей&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;kc4g&quot;&gt;Для обучения модуля OF используется FlowNet2 в качестве GT, а лосс сравнивает сами вектора OF и результат варпинга:&lt;/p&gt;
  &lt;figure id=&quot;h61m&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/26/a9/26a9b120-178a-4c1c-92c8-d5347d607ed2.png&quot; width=&quot;425&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NMoM&quot;&gt;Для стабилизации и ускорения сходимости дополнительно добавлен &lt;a href=&quot;https://paperswithcode.com/method/feature-matching&quot; target=&quot;_blank&quot;&gt;FM-лосс&lt;/a&gt;, и в качестве экстракторов используются сами дискриминаторы + предобученная VGG.&lt;/p&gt;
  &lt;p id=&quot;sdmH&quot;&gt;В качестве GAN-лосса используется модификация &lt;a href=&quot;https://arxiv.org/abs/1611.04076&quot; target=&quot;_blank&quot;&gt;LSGAN&lt;/a&gt;&lt;/p&gt;
  &lt;h3 id=&quot;5All&quot;&gt;4. Мультимодальность&lt;/h3&gt;
  &lt;p id=&quot;ZR72&quot;&gt;Чтобы обеспечить мультимодальность, нужна instance segmentation map для входных кадров.&lt;/p&gt;
  &lt;p id=&quot;aWsL&quot;&gt;Дополнительно учится энкодер, который генерирует фичемапу размером с картинку и &lt;em&gt;d &lt;/em&gt;каналами (&lt;em&gt;d&lt;/em&gt; = 3). Затем происходит усреднение векторов в фичемапе для каждого объекта (размер фичемапы не меняется, но теперь во всех &amp;quot;пикселях&amp;quot; одного объекта одинаковые векторы). Эта фичемапа конкатенируется с семантическими данными и подаётся на вход в генератор.&lt;/p&gt;
  &lt;p id=&quot;RSR3&quot;&gt;После завершения обучения на векторах объектов одного класса фитится GMM, из которой на инференсе сэмплируются вектора для фичемапы. Это и позволяет влиять на содержание итоговой картинки.&lt;/p&gt;
  &lt;p id=&quot;zaJv&quot;&gt;Пример: в Cityscapes под меткой &amp;quot;дорога&amp;quot; есть асфальтовая дорога и брусчатка. После того, как мы зафитим GMM на 2 класса для &amp;quot;дороги&amp;quot;, можно выбирать, что синтезировать:&lt;/p&gt;
  &lt;figure id=&quot;wDVj&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5e/17/5e176ef2-1821-4181-b9df-73aab26f1d27.png&quot; width=&quot;1686&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;NLkM&quot;&gt;5. Обучение&lt;/h3&gt;
  &lt;ul id=&quot;Urri&quot;&gt;
    &lt;li id=&quot;rh8z&quot;&gt;DGX1 (8 x V100, 16GB каждая)&lt;/li&gt;
    &lt;li id=&quot;M0Nj&quot;&gt;40 эпох&lt;/li&gt;
    &lt;li id=&quot;eYBt&quot;&gt;ADAM (0.5, 0.999)&lt;/li&gt;
    &lt;li id=&quot;hqi5&quot;&gt;LR = 0.0002&lt;/li&gt;
    &lt;li id=&quot;UjiX&quot;&gt;10 дней для 2K&lt;/li&gt;
    &lt;li id=&quot;H6tj&quot;&gt;512 -&amp;gt; 1024 -&amp;gt; 2048 (height = width / 2)&lt;/li&gt;
    &lt;li id=&quot;6u5I&quot;&gt;Cityscapes: 2975 видео по 30 кадров = 89 250 кадров в обучении&lt;/li&gt;
    &lt;li id=&quot;6pFd&quot;&gt;FaceForensics: 704 + 150 видео&lt;/li&gt;
    &lt;li id=&quot;Sr7P&quot;&gt;Apolloscape: 73 видео по 100–1000 кадров, половина для обучения&lt;/li&gt;
    &lt;li id=&quot;tSGg&quot;&gt;Dance video: видео с YouTube по 3–4 мин. (4500–6000 кадров?), 512x720&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;MPSk&quot;&gt;🔬 Эксперименты&lt;/h2&gt;
  &lt;p id=&quot;k8P7&quot;&gt;Основные метрики:&lt;/p&gt;
  &lt;ul id=&quot;SULa&quot;&gt;
    &lt;li id=&quot;RBN9&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1706.08500&quot; target=&quot;_blank&quot;&gt;FID&lt;/a&gt; по всем кадрам всех видео в валидации, вычисленный с помощью 2 сетей: ResNeXt и I3D&lt;/li&gt;
    &lt;li id=&quot;yPNN&quot;&gt;Human Preference Score — SbS-сравнение из 2 вариантов, 10 респондентов&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9Qt1&quot;&gt;Компетиторы:&lt;/p&gt;
  &lt;ul id=&quot;FTsz&quot;&gt;
    &lt;li id=&quot;QCXu&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1711.11585&quot; target=&quot;_blank&quot;&gt;pix2pixHD&lt;/a&gt;, применённый покадрово&lt;/li&gt;
    &lt;li id=&quot;p3TW&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1703.09211&quot; target=&quot;_blank&quot;&gt;COVST&lt;/a&gt; с pix2pixHD в качестве стайл-трансфер сети&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9S27&quot;&gt;Неожиданно, но предложенный метод оказался лучшим по всем метрикам. Из ablation study видно, что меньше всего к качеству докидывает flow-warping модуль, а больше всего — conditional video discriminator. Также авторы заявляют, что при замене оценённого OF на GT визуальное качество не меняется, что говорит об устойчивости генератора к ошибкам в OF&lt;/p&gt;
  &lt;figure id=&quot;F3Ci&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d8/71/d87127fd-d407-4dee-8d89-c744e9d09815.png&quot; width=&quot;621&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;myM6&quot;&gt;Авторы пишут, что их алгоритм не справляется в некоторых ситуациях, например, при отрисовывании поворачивающей машины. Возможно, это можно исправить добавлением пространственной информации типа карт глубины&lt;/p&gt;
  &lt;h2 id=&quot;giqc&quot;&gt;🍺 Заметки на полях&lt;/h2&gt;
  &lt;p id=&quot;VSXL&quot;&gt;Тут будет небольшая выжимка о том, какие приколы есть в коде, но которые не описаны в статье.&lt;/p&gt;
  &lt;p id=&quot;i6rf&quot;&gt;Так получилось, что я много копался в старом коде vid2vid, который был выложен в момент публикации статьи. Тогда ещё не было DistributedDataParallel, поэтому он содержит много грязных хаков, как заставить всё работать быстро и параллельно на 8 карточек (старый DataParallel умеет только в 4 карточки с копированием на мастер-ноду для бэкпропа). Да и в целом архитектурно код там не самый приятный. В новом репозитории imaginaire, где собран зоопарк conditional-моделей, всё гораздо лучше, моднее и современнее.&lt;/p&gt;
  &lt;p id=&quot;0ewG&quot;&gt;Итак, во-первых, fine-scale-генератор фризится на первые несколько эпох. Это логично, но ниоткуда не следует.&lt;/p&gt;
  &lt;p id=&quot;Xhxv&quot;&gt;Во-вторых, по умолчанию бэкпроп делается только по одному кадру. Для изменения этого поведения есть параметр &lt;em&gt;max_frames_backpropagate&lt;/em&gt;. Если указать значение &amp;gt;1, то количество кадров, через которые проходит бэкпроп, будет линейно увеличиваться до этого значения.&lt;/p&gt;
  &lt;p id=&quot;XoeT&quot;&gt;Во-третьих, как бы вы решали проблему первого кадра, если сетка всегда принимает на вход &lt;em&gt;L&lt;/em&gt;=2 предыдущих? Правильно, можно не решать никак, и начинать генерировать с сразу третьего. Ведь семантическую информацию мы откуда-то взяли — значит есть и исходное видео.&lt;br /&gt;Ну а если очень хочется? Тогда обучается отдельная сетка, которая генерирует только первый кадр, и к ней не применяется видео-дискриминатор.&lt;/p&gt;
  &lt;p id=&quot;hUkq&quot;&gt;В-четвёртых, удивление вызвало то, что для генерации лиц из скетчей на вход приходит фичемап с 15 каналами, а не одноканальная картинка с чертами лица. Видимо для лучшего кондишенинга в остальные 14 каналов записаны карты, получающиеся после применения &lt;a href=&quot;https://www.tutorialspoint.com/opencv/opencv_distance_transformation.htm&quot; target=&quot;_blank&quot;&gt;Distance Transform&lt;/a&gt; к каждой части лица (глаза, нос, рот и т.д.).&lt;/p&gt;
  &lt;p id=&quot;3ONm&quot;&gt;В-пятых, для апскейла в генераторе используется устаревшая схема с deconvolution-слоями, которая приводит к шахматке при генерации:&lt;/p&gt;
  &lt;figure id=&quot;PJuD&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/10/25/102599d1-87f2-4967-8a80-5a4122fd377c.png&quot; width=&quot;327&quot; /&gt;
    &lt;figcaption&gt;Синтезированный кадр с deconv-слоями&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8WRo&quot;&gt;Это известная &lt;a href=&quot;https://distill.pub/2016/deconv-checkerboard/&quot; target=&quot;_blank&quot;&gt;проблема&lt;/a&gt;, она решается заменой deconv на nearest upsample + conv.&lt;/p&gt;
  &lt;p id=&quot;gIip&quot;&gt;В остальном это действительно мощный и гибкий фреймворк, позволяющий синтезировать качественные консистентные видеоролики и использовать разные типы семантической информации на входе.&lt;/p&gt;

</content></entry></feed>