Генерация текста на изображении – на мой взгляд одна из самых сложных задач в genAI. О ней сегодня будет разговор подробнее.
Во-первых, как проблемы могут встретиться в задаче?
Дополнительные действия со стороны пользователя для определения ключевых слов (GlyphDraw, TextDiffuser), а в работе GlyphControl создание глиф изображения для запоминания текста после OCR черными буквами на белом фоне по технологии ControlNet
Ограничение сценарной генерации (по большому промпту)
Невозможно менять исходное изображение в режиме диалога, указывая на ошибки самой модели
Все это, так или иначе, решают авторы статьи TextDiffuser-2. Вместе с этим, они также обеспечивают улучшение своей прошлой работы TextDiffuser в вариации стиля текста, так как отказываются от маски сегментации текста
Спойлер, какой результат получится по итогу работы над TextDiffuser-2:
![](https://habrastorage.org/getpro/habr/upload_files/6cf/525/047/6cf525047352a3585440be8ed3054d22.png)
Как именно авторы добиваются такого результата?
Вдохновленным шумом LLM весь 2023 год, чувакам в мете приходит просто гениальная идея: зачем использовать трансформер для распознавания ключевых слов и смешивания с диффузией, если можно использовать декодер (они используют vicuna) для генерации координат, которые позже появятся на сгенерированном изображении, а затем заиспользовать умную токенизацию второй языковой моделью, которая включит эти позиции в информацию для диффузии
![целостный пайплайн обучения целостный пайплайн обучения](https://habrastorage.org/getpro/habr/upload_files/236/d97/61b/236d9761bac54f9874bf106193e98629.png)
Теперь по порядку
Юзер подает на вход промпт, конечно, он должен включать в себя специальные токены (ключевые слова или промпт), все мы это знаем из использования больших декодеров
Vicuna учится ходить по нескольким сценариям, когда юзер либо уже представил ключевые слова и остается сгенерировать только координаты, либо по промпту следует определить, как ключевое слово, так и координаты к нему
![Вот так выглядит обучающий сет Вот так выглядит обучающий сет](https://habrastorage.org/getpro/habr/upload_files/09a/6a0/06b/09a6a006b88d02f06524d3845c2e8618.png)
Далее происходит умная токенизация, плюсы такого похода в том, что мы можем уже учитывать позицию текста для картинки, а второй плюс в том, что такого рода токенизация просто исключает орфографические ошибки. Мы представляем каждую букву, как отдельный токен, и позиция тоже является отдельным токеном
Дальше диффузия учится как обычно, когда через клип энкодер подкидывается в cross-attention текст
Красивые метрики:
![метрики метрики](https://habrastorage.org/getpro/habr/upload_files/aba/320/452/aba3204526184460e48fb9551a8b9035.png)
Ссылка на репозиторий с кодом и демо
Ссылка на модель на huggingface
Ссылка на статью