Можно ли распознать 350 очень похожих изображений машин, если они отличаются буквально оттенком цвета или незначительной деталью на кузове? Оказывается, можно — причём без громоздких локальных моделей и сверхдорогих серверов. В недавнем кейсе команда AskMona рассказала о том, как они сумели решить эту задачу, объединив классические методы поиска похожих изображений (KNN) и LLM-модель GPT-4o. Самое удивительное: проект был реализован всего несколькими инженерами в сжатые сроки и с минимальной инфраструктурой.
Почему задача оказалась настолько сложной?
Представьте себе стенд в музее с сотнями иллюстраций автомобилей:
- 🚗 Абсолютно одинаковый ракурс — вид сбоку на белом фоне.
- 🚗 Минимальные различия — в некоторых случаях только номер, декаль или незначительная выгравировка в другом месте.
- 🚗 350 «почти идентичных» экземпляров — задача при беглом взгляде кажется почти безнадёжной.
Обычная нейронная сеть для классификации (например, MobileNet с transfer learning) работала крайне нестабильно:
- 🤖 Ограничение по обучающим данным: у каждого класса была всего одна исходная иллюстрация, которую пытались «размножить» с помощью аугментации.
- 🌐 Браузерная реализация (через ONNX) приводила к компромиссам по объёму модели и точности.
- ⚠️ Сложные условия в реальности: фотографии со стенда при разном освещении, тенях и искажениях ещё сильнее запутывали сеть.
Результат: модель то угадывала правильно, то катастрофически «промахивалась». В итоге у клиента оставалось впечатление, что система не даёт гарантированно надёжного результата.
Первый прорыв: использование KNN и крупных эмбеддингов
В основной продукт AskMona уже была встроена система поиска по эмбеддингам (VGG16), где изображения превращаются в векторы, а затем идёт поиск ближайших соседей (KNN). Однако для таких похожих картинок классическая VGG16 не давала нужной глубины признаков.
Ситуация изменилась, когда появилась возможность использовать AWS Titan — более продвинутый мультимодальный сервис, способный формировать «тонкие» эмбеддинги. И действительно, проверка показала, что этот механизм неплохо отличает даже почти одинаковые машины. Но проблемы оставались:
- 🕵️ Наиболее похожие иллюстрации всё равно «сливались» в 2–3 ближайших соседа, и система не понимала, какой из них точнее.
- 🤷 Автоматическая фильтрация могла ошибаться и выдавать неверный вариант на первом месте.
Пытались показывать пользователю несколько ближайших результатов, чтобы он сам выбирал: «А вот из этих трёх, похоже, это ваш автомобиль?» Но заказчик не хотел терять «магический эффект» мгновенного узнавания машины.
Второй прорыв: GPT-4o в роли «текущего эксперта»
И тут команда догадалась, что можно обратиться к последнему слову технологий — большим языковым моделям, которые уже умеют анализировать изображения.
Схема оказалась предельно простой:
- 🏅 Шаг 1: делаем эмбеддинги искомого снимка с выставки, ищем ближайшие 2–3 кандидата в огромном каталоге (KNN).
- 🏅 Шаг 2: передаём (через промпт) эти 2–3 картинки GPT-4o вместе с исходным «запросом», где описываем, что это за иллюстрация и в чём задача (например, «Какой из этих вариантов совпадает с изображённым авто?»).
- 🏅 Шаг 3: модель делает «финальный выбор» или отмечает, что нет 100% совпадения.
Результаты оказались просто поразительными:
- ✨ Точность значительно выросла: там, где KNN давал 2-3 варианта, GPT-4o чаще всего выбирал правильный.
- ✨ Минимум дополнительных усилий: не нужно глубоко дообучать модель, достаточно указать в промпте, какие картинки следует сравнить.
- ✨ Гибкость: если всё же остались 2 машины «один в один», GPT-4o может (хоть иногда и ошибаясь) рассказать, какой миллиметровый логотип отличает их, или определить, что в точности они неразличимы.
Да, система не стала на 100% идеальной: есть пара «двойников» машин, которые сбивали с толку и GPT-4o. Но количество успешных распознаваний стало настолько высоко, что клиент принял эту реализацию.
Личное мнение автора
На мой взгляд, пример AskMona прекрасно иллюстрирует, как современные LLM превращаются в универсальные инструменты, выходящие за рамки привычного текстового чат-бота.
- 🤖 Гибридный подход «эмбеддинги + LLM-фильтрация» повторяет логику, которую мы уже видели в текстовых поисках (когда сначала делается поиск (retrieval), а затем LLM уточняет результат).
- ⚙️ Удобная связка: KNN даёт «узкий список» кандидатов (быстро и недорого), а LLM «допроверяет» (медленнее и дороже, но только на несколько штук).
- 🏗️ Не нужно быть специалистом по CV: достаточно понимать общие принципы ML и уметь формулировать задачу в промпте. Это заметно ускоряет разработку и снижает барьер входа.
По сути, крупные языковые модели становятся «лейкой для всех цветов», где почти любую ML-проблему можно хотя бы частично решить стандартными «промпт-сценариями».
Технические детали и уроки для будущих проектов
- 🎨 Аугментация данных (Data augmentation) при единичном изображении класса — классический приём, но часто недостаточный, когда картинки почти идентичны.
- 🕹️ Аппаратно всё реализовано через легковесный front-end (модель для эмбеддингов на сервере), а финальный «сравнительный анализ» — через вызов GPT-4o.
- ⚡ Цена запроса примерно 0.0001 USD (пример из кейса) за весь промпт, так как изображения сжимаются до низкого разрешения, а промпт получается компактным.
Ключевой урок: если ваша классическая CV-модель упирается в сложность/похожесть изображений, то комбинированный подход с «мультимодальными» LLM может стать недостающим элементом пазла.
Ссылки и дополнительные материалы
Отличное чтение для тех, кто ищет конкретные детали имплементации и хочет узнать, как именно команда AskMona готовила промпты и подбирала архитектуру.
Итоги
Данная история — ещё одно подтверждение того, что мир ML переживает «универсальную революцию» LLM. Когда-то для задач компьютерного зрения мы вынуждены были строить сложные пайплайны и тратить уйму времени на тонкую настройку. А теперь появляется GPT-4o (и другие аналоги), которые с уже готовым мультимодальным пониманием «дотягивают» классификацию до нужной точности.
Так что если вы работаете над похожей проблемой (множество почти идентичных изображений) и не хотите городить огород сложного CV, — возможно, стоит попробовать гибридный метод KNN + GPT-4o. Как показывает опыт AskMona, это может оказаться «волшебной палочкой» для борьбы с близнецами в вашей галерее.