Статическая сетка шагов для flow matching снизила ошибку генерации изображений на 30–43% при тех же 8–24 вызовах большой нейросети. Для команд, которые запускают diffusion- и flow-модели в проде, это практичный сигнал: часть качества или скорости можно получить не новой моделью и не дополнительным обучением, а более разумным расписанием вычислений.
Об эксперименте на модели Anima сообщает Habr / Новости. Автор проверил простую гипотезу: многошаговый сэмплер уже хранит предыдущие значения скорости движения по траектории, поэтому угол между старым и новым вектором можно получить почти бесплатно. Малый угол означает относительно прямой участок траектории, большой — поворот, где крупный шаг повышает ошибку.
Flow-модель создаёт изображение, численно интегрируя обыкновенное дифференциальное уравнение в латентном пространстве. Каждый шаг требует прохода через крупную сеть, поэтому выбор числа и расположения шагов напрямую влияет на стоимость инференса. Обычно расписание задано заранее и одинаково для всех генераций; адаптивный подход пытается менять шаг по ходу работы, но может потребовать дополнительных оценок поля скоростей или оказаться нестабильным.
В эксперименте оценка локальной ошибки Эйлера строилась как произведение половины шага, нормы скорости и угла между соседними скоростями. На 12 тестовых единицах — четырёх промптах с тремя сидами — при шагах от 0,01 до 0,12 она показала медианное отношение к фактической ошибке 0,80–0,84. Корреляция логарифмов оценённой и измеренной ошибки составила 0,91–0,92. Иными словами, поворот вектора оказался хорошим индикатором того, где траектория требует большей аккуратности.
Но косинус между векторами видит не всё. Он фиксирует изменение направления, а не изменение длины скорости: поток может двигаться по прямой и одновременно резко ускоряться. На Anima эта слепая зона была небольшой в середине траектории — изменение длины давало лишь 0,3–0,4% энергии ускорения, — но заметной в первых и последних 5% времени: 8–9%, местами до 23%. Дополнительная проблема — вычислительный шум. При classifier-free guidance автор наблюдал угловой шум около 1,7° между соседними расчётами, который не уменьшался вместе с шагом и, вероятно, связан с округлением bf16.
Из-за этого онлайн-контроллер с формулой «следующий шаг пропорционален целевому углу, делённому на измеренный» проиграл стандартному расписанию. Причина оказалась прозаичной: на первом шаге нет истории, а именно в начале траектории кривизна максимальна. Ошибка контроллера зависела прежде всего от первоначального шага: в среднем 0,80 при старте с 0,06, 0,51 при 0,02 и 0,26 при 0,01. Настройка целевого угла и общего числа вызовов на результат влияла заметно слабее.
Рабочим компромиссом стала статическая сетка шагов, построенная по среднему темпу поворота скорости на других траекториях. Шаги распределяли так, чтобы на каждом приходилась примерно одинаковая величина поворота. В сравнении со стандартным расписанием ComfyUI ошибка до сходящегося решения уменьшилась на 30–43% при 8, 12, 16 и 24 вызовах сети. Если дополнительно учитывать, что ранние ошибки примерно в четыре раза сильнее влияют на итог, выигрыш вырос до 41–50%; вариант с восемью вызовами оказался точнее стандартного расписания с 24.
Проверка по LPIPS дала похожую, но не идеальную картину. Для 8, 12 и 16 вызовов метрика улучшилась в среднем на 30–35%; на плоских заливках, лицах и геометрических сетках преимущество достигало 39–48%. На текстурном промпте новая сетка, напротив, ухудшила LPIPS примерно на 16%, хотя расстояние в латентном пространстве стало меньше. Логика понятна: дополнительные ранние шаги лучше сохраняют композицию и низкочастотную структуру, но сокращают вычисления в конце, где проявляются мелкие текстуры.
Автор также не нашёл измеримой пользы от подстройки расписания под конкретную картинку: сетка, рассчитанная для одной генерации, почти так же работала на другой. Это не доказывает, что персональная адаптация бесполезна для всех моделей, но ставит неудобный вопрос перед разработчиками сэмплеров: возможно, сначала стоит качественно выучить или измерить одно расписание для модели, а уже потом усложнять инференс контроллерами. Пока вывод ограничен одной Anima, одним разрешением, одним уровнем guidance и 12 тестовыми единицами; особенно открытым остаётся вопрос, как оптимизировать статическую сетку шагов не только под близость латентов, но и под текстуры, важные для человеческого восприятия.

