
Я продолжил эксперименты с gan походом. В какой-то момент хаотичные попытки заставить что-то работать превратились в подобие экспериментов, так что я начал мерить fid. Вышли интересные результаты, если просто обучать модель flow matching из structured noise 600k шагов с батчем 4, то за 1 шаг она покажет 13.6 fid, за 4 шага 11.8, за 30 шагов 11.9(да хуже). Но если потом ее потом поучить с gan objective на 4500 шагов с батчем 1, то за 1 шаг 10.4, за 2 шага 9.3, за 4 шага 9.0. И причем эти результаты согласуются с моим внутренним ощущением что картинка стала лучше, на асфальте появились трещины и рандомные листочки, картинка перестала быть мыльной, растительность тоже стала более разнообразной.Потом я подумал, а что если учиться не на таргете, а на разнице таргета и базовой натренированной модели, ведь отличия действительно очень небольшие между тем что выдает klein 4B и текущая модель на 200M, но из-за мелких нюансов klein выглядит намного лучше. Ого какая оригинальная идея. +- нет. это уже придумали и попробовали и результаты примерно на 2 fid лучше. Сюрприз у меня получилось тоже самое.Если брать в качестве базовой модели flow matching, для 1 шага базовой и 3 шага diff модели fid=11.1. для 8 базовой и 8 diff fid=8.4. На этом шаге я удивился, до этого увеличение количества шагов, не особо давало ни fid ни реального визуального прироста, но с данной постановкой получилось получить лучшие fid=8.4.Что может быть лучше чем gan? только 2 gan.Берем чекпоинт на 4500, делаем предобучение flow matching с diff, получаем на 1 и 3 шага fid=11.0, на 8 и 8 fid=10.3, расстраиваемся. Дополнительно обучаем diff в режиме gan, делаем 1 и 3, получаем fid=8.25, для 1 и 1 fid=8.89. Радуемся. Разница хоть и незначительная, но это реально работает. Но тут не ясно работает потому что я diff обучал или потому что это разные веса и разная специализация, nvidia тоже так давно делала, типа на каждый timestep по модели и что-то там вроде тоже прирост давала. хз.Засунул это в с++ движок для инфере