Привет! Мы собираем много разных данных и часто перед заказчиком стоит большая описательная задача в области задач компьютерного зрения: детально и максимально подробно описывать всё, что присутствует на изображении или видео.
В деталях описывать картинку с помощью текста — трудоемкая задача для человека. На днях исследователи из института Аллена предложили интересный способ оптимизации такой задачи. А так как мы, в хорошем смысле, поехавшие на качестве данных, то пройти мимо было невозможно.
И это достаточно интересно, чтобы попробовать перенести их пайплайн на свою платформу и замериться. И предварительно, да, похоже, это новая веха экспериментов в такой разметке.
Давайте разбираться.
Сложность описательных задач
В начале немного описания того, как вообще вообще выглядит наша задача и в чем сложность.
У нас есть картинка, которую нужно максимально детально описать, со всеми даже мелкими нюансами: описать условия съемки, количество объектов, их тип и взаимодействие между собой, описать фон и много чего еще.
Это проще показать скриншотом с эталонным описанием:
И подобных описаний нужно много, а делать их — тяжело. Сложности здесь добавляет то, что немалую часть времени занимает изучение фото и последующий фактчекинг. Почти никто одновременно не сможет хорошо различать породы змей, помнить героев мультика «Покахонтас» и распознать Piper Cherokee вместо Cessna.
Чтобы вы понимали насколько это бывает больно, вот пример затрат на разметку очень сложного домена людьми (в первой строчке — больше часа на 4 картинки):
Иногда фактчекинга нет и это сильно упрощает задачу. И тогда ее почти сразу можно сделать сильно дешевле и быстрее.
Одним из таких вариантов является первичный прогон данных через несколько LLM с vision-составляющей (например, ванильная LLaVA, QWEN2-VL, One-Vision, GPT4o и другие), после чего доведение до ума (перепроверка/переделка/сведение) их людьми. Иногда этого достаточно, а иногда в силу глубокой специфики — нет.
Что же нового предложили исследователи института Аллена? Они предложили то, что так часто может бесить в обычной жизни: голосовые сообщения!
И это очень неплохо, потому что пропускная способность речи в передаче информации гораздо выше печатания, что можно использовать и в разметке. Ну а любое одноголосое «студийное» аудио достаточно тривиально и с неплохим качеством превращается в текст.
Помимо записывания голосовых, новшеством было так же предложение выделять точками те области или объекты, про которые говорится, что позволяет в дальнейшем связывать пиксели с текстом. Это позволяет сразу решать задачу visual grounding.
И это та штука, которую сразу хочется попробовать у себя.
Пробуем у себя
Большое спасибо нашим друзьям из команды RnD CV из SberDevices, которые позволили поэкспериментировать с задачей и погонять их данные, чтоб посравнивать пайплайны: привычный отработанный и свеженький новый с аудио.
Это интересно как в плане снижения трудозатрат процесса, так и итогового качества — есть версия, что благодаря речи итог будет немного лексически побогаче. Приятно заниматься разработкой софта, в котором уже есть все инструменты, чтобы такое собрать буквально за день. ツ
Давайте смотреть итог:
Выглядит достаточно интересным и жизнеспособным.
Полная схема:
Здесь есть важный нюанс в зависимости от того, что мы хотим видеть: максимально творческое описание или же четкое следование намеченному плану вопросов по каждой картинке. Набор подсказок будет разный, но выводить его где-то визуально не помешает.
В качестве транскрибации мы используем свою модель, заточенную под разговорную речь на русском языке, но по ощущениям и просто whisper версии постарше для данной задачи вполне справляется.
Просто транскрибация — не совсем то, что нам нужно, потому что она сильно далека от идеального текста и без обработки выглядит чаще вот так:
Поэтому транскрибацию стоит пропустить через LLM (для похожих задач мы чаще всего используем GigaChat и локальную Mistral), чтобы отфильтровать речевые огрехи, паузы и убрать явные ошибки.
К слову, это стоит делать и в обычном пайплайне, так как даже самые лучшие ai-тренера хоть и редко, но тоже ошибаются.
Но, мы все равно никому не верим, поэтому после всей схемы даем другим разметчикам на кросс-валидацию. Они просто сверяют точки и текст с картинкой, но если требуется, то могут внести коррективы или поставить оценку.
Кстати, те же исследователи в своей публикации пишут, что сильнее верят в качество данных, а не в их количество, и это мнение я разделяю полностью.
Вариации и эксперименты
Первая гипотеза, которая просится на тестирование: не обязательно заставлять разметчика ждать транскрибации, это можно делать постфактум оффлайн. То есть, разметчик просто записывает аудио (не важно, видя VLM-подсказку или нет), после чего переходит к следующему варианту и так далее.
Конечно, дождаться удобнее, чтобы можно было внести коррективы (а они чаще вносятся, чем нет), но здесь сильно зависит от доменной области и требований к описанию.
Такой процесс становится сильно дешевле и проще, поэтому мы можем дать одну картинку нескольким людям, протранскрибировать и почистить их оффлайн, добавить ответ VLM, а затем кинуть в миксер LLMки с целью собрать один качественный ответ. С промптингом придется неплохо поиграться, ну а куда ж без этого.
Плюсом такого варианта является то, что мы можем дополнить ответ одного разметчика деталями ответа других, в том числе и фактчекингом.
Вторая гипотеза заключается в том, что мы можем разбить описание целиком фото на детальное описание каждого объекта.
Условно, тыкаем в объект, записываем аудио именно к нему, тыкаем в другой, записываем, а после того как объекты заканчиваются — полируем общим аудио. Но насколько такая детализация уместна — хороший вопрос, еще посоветуемся.
Выводы
Снижение любым способом когнитивной нагрузки на разметчиков часто дает отличный прирост по качеству данных и голосовухи кажутся отличным инструментом для этого, хотя и требуют специфичных заданий и некой инфраструктуры под это. Мы процесс запустили, пробуем, предварительные замеры показывают, что часть с написанием текста можно ускорить в 3+ раза. Но, скорее всего, это можно разогнать и больше, просто пока в рамках пилота делаем все аккуратно и разметчики к такому еще не привыкли.
P.S.: и бонусом — почти как в меме: «screenshot результата самой model этих authors». Конкретная CV-задача на скриншоте, к слову, довольно неплохо решена, что подтверждает их тезис о том, что качество скорее бьет количество.
Работаем!
Спасибо.
kucev
В оригинальной статье "Molmo: Outperforming Proprietary Multimodal Language Models" авторы помимо голосовух просят людей показывать на объекты, о которых говорят. Они утверждают, что это помогло научить модель связывать пиксели с текстом.
У вас в гифке после "Давайте смотреть итог:" показывается интерфейс разметки. Правильно ли я понял, что сначала человек выделяет точками объекты про которые он будет рассказывать. И потом записывает голосовуху? Как вы потом соотносите к какой точке какой отрезок аудио относится?