Бенчмарк Vision-Language моделей на изображениях низкого разрешения

Vision-Language Models (VLM) за последние пару лет стали де-факто универсальным инструментом для работы с изображениями: от описания сцен и VQA до извлечения текстовой информации. В бенчмарках и демо они часто показывают впечатляющие результаты — при условии, что входные данные достаточно «чистые».

Однако в реальных системах изображения редко соответствуют этим условиям. На практике приходится работать с низким разрешением, сильным сжатием, шумами, бликами и частично потерянным текстом. Особенно это заметно в задачах, где на вход подаются фрагменты строк, сканы, кропы или изображения минимального допустимого размера для модели.

Камиль Шакиров, ML-инженер компании Napoleon IT
Камиль Шакиров, ML-инженер компании Napoleon IT

В этой статье мы рассмотрим прикладной сценарий: сравнение нескольких Vision-Language моделей на задаче распознавания классов по изображениям низкого качества. Ключевой особенностью подхода стало то, что модели не выбирают класс напрямую, а генерируют свободное текстовое описание, которое затем сопоставляется с эталонами семантически, а не построчно.

Цель бенчмарка — не получить максимальные абсолютные метрики, а понять, как разные VLM ведут себя в условиях, близких к продакшену: при плохом визуальном сигнале, ограниченном GPU и необходимости принимать решения на основе «неполных» данных.

В реальных данных изображения редко бывают идеальными.В этой статье я расскажу, как сравнивал несколько VLM-моделей на задаче распознавания классов по изображениям низкого разрешения, и почему семантическое сравнение текстов оказалось практичнее классической классификации.

С какими изображениями приходится работать

Сразу обозначу важный контекст: изображения в датасете были далеко не «лабораторными».

Типичные проблемы:

  • низкое разрешение;
  • сильное сжатие;
  • шум и блики;
  • мелкий или частично нечитаемый текст.

Во многих случаях изображения находились на минимально допустимом размере для VLM-моделей. Если изображение оказывалось слишком маленьким, оно масштабировалось до нижнего порога, чтобы модель вообще смогла его принять. Это решает техническую проблему, но не восстанавливает потерянную визуальную информацию.

Ниже - синтетические иллюстративные примеры, которые хорошо отражают характер входных изображений.

Примеры входных изображений (синтетика)

Ниже приведены синтетические примеры, визуально повторяющие характеристики реальных входных данных:низкое разрешение, размытие, слабый контраст и частичную потерю деталей.Текстовое содержимое абстрактно и не связано с реальными продуктами.

Бенчмарк Vision-Language моделей на изображениях низкого разрешения

Пример 1 — низкое разрешение и сильное размытие

Ожидаемый класс: Example Line Alpha Variant 250

Текст занимает почти всю высоту строки, но из-за низкого разрешения и размытия отдельные символы сливаются.Модель не может полагаться на точное распознавание букв и должна восстанавливать смысл по общему текстовому шаблону.

Бенчмарк Vision-Language моделей на изображениях низкого разрешения

Пример 2 — кириллический текст и низкий контраст

Ожидаемый класс: ДЕМО СЕРИЯ СИНЯЯ ЛИНИЯ 42

Кириллический текст размыт и имеет слабый контраст с фоном.Часть символов плохо различима, однако структура строки сохраняется, что позволяет модели извлекать семантику даже при неполной читаемости.

Бенчмарк Vision-Language моделей на изображениях низкого разрешения

Пример 3 — размытая латиница и потеря мелких деталей

Ожидаемый класс: Sample Product X Series B

Текст визуально читается фрагментарно: мелкие элементы и разделители теряются, края символов размыты.В таких условиях модель чаще опирается на ключевые токены и общий контекст строки, а не на точное OCR.

Как я оценивал ответы моделей

Каждая Vision-Language модель получала одинаковый запрос:

“Опиши, что изображено на картинке”

Важно: модель не выбирает класс напрямую. Она генерирует свободный текст.Поэтому я отказался от строгого сравнения строк и использовал семантическое сопоставление.

Общий пайплайн выглядел так:

  1. Модель генерирует текстовое описание изображения.
  2. Текст очищается и нормализуется.
  3. Для текста строится эмбеддинг.
  4. Он сравнивается с эмбеддингами допустимых вариантов названий класса.
  5. Если similarity выше порога - ответ считается корректным.

Такой подход:

  • устойчив к разным формулировкам;
  • работает с несколькими языками;
  • лучше отражает реальное качество VLM.

Какие модели я выбрал и почему

В бенчмарк я включил несколько Vision-Language моделей разных размеров и архитектур, чтобы посмотреть, как они ведут себя именно на фрагментах строк, а не на «красивых» изображениях.

Важно: абсолютные значения точности здесь не самоцель. Задача - понять относительное поведение моделей в условиях низкого разрешения, обрезов и бликов.

qwen2.5-vl:7b - лучший результат по точности

Эта модель показала наивысшую точность — около 50%.

Причины, по которым она оказалась лидером:

  • хорошо извлекает смысл даже из неполных строк;
  • устойчиво работает с крупным, но обрезанным текстом;
  • редко уходит в описания «в общем виде», стараясь восстановить конкретное название.

Фактически, это лучшая модель в тесте именно для задачи семантического распознавания текстовых фрагментов.

qwen3-vl:8b - почти на уровне лидера

Несмотря на больший размер, модель показала точность чуть ниже - ~46.6%.

При этом:

  • ответы более стабильны;
  • меньше случайных интерпретаций;
  • лучше держит формат ответа.

По ощущениям, эта модель чуть консервативнее, но предсказуемее, что важно для продакшена.

deepseek-ocr:3b - быстрый, но ограниченный

С точностью ~36.8% модель ожидаемо проигрывает более крупным VLM.

Это хорошо объясняется её природой:

  • она действительно «читает текст»;
  • но плохо восстанавливает смысл при сильной обрезке;
  • чувствительна к бликам и шуму.

Тем не менее, для своего размера это очень достойный результат, особенно если важны скорость и стоимость инференса.

gemma3:4b - середина без явных преимуществ

Результат на уровне ~17.8%.

Модель:

  • часто улавливает общий контекст;
  • но теряет конкретные названия;
  • ответы получаются слишком вариативными для надёжной классификации.

В этой задаче она оказалась менее практичной, чем Qwen и DeepSeek.

granite3.2-vision:2b - не про текст

С точностью менее 5% модель ожидаемо замыкает список.

Это не недостаток модели как таковой, а следствие того, что:

  • она ориентирована на визуальное описание сцены;
  • а не на извлечение и интерпретацию текста.

Для задач VQA или описания изображений она может быть полезна,но для классификации текстовых фрагментов — нет.

Немного про железо

Все эксперименты выполнялись локально на:

  • RTX 3060 (12 GB VRAM)

Это сразу накладывает ограничения:

  • 7–8B - практический потолок без ухищрений;
  • larger models требуют offloading и резко увеличивают latency;
  • скорость инференса становится не менее важной, чем точность.

Поэтому в тесте нет “гигантов” - они просто не соответствуют реальным условиям использования.

Абстрактный пример кода

Ниже - упрощённый код, который отражает общую идею бенчмарка, без привязки к реальным данным и моделям.

class VLMBenchmark:

def __init__(self, vlm_models, embedding_model, similarity_threshold=0.7):

self.vlm_models = vlm_models

self.embedding_model = embedding_model

self.similarity_threshold = similarity_threshold

def preprocess_text(self, text: str) -> str:

text = text.lower()

text = re.sub(r'[^a-zа-я\s]', ' ', text)

return re.sub(r'\s+', ' ', text).strip()

def recognize_image(self, model_name: str, image_path: str) -> str:

response = vlm_client.chat(

model=model_name,

prompt="Describe what is shown in the image",

image=image_path

)

return response["text"]

def match_class(self, predicted_text: str, class_variants: list[str]) -> dict:

predicted_text = self.preprocess_text(predicted_text)

pred_embedding = self.embedding_model.encode([predicted_text])[0]

best_score = 0.0

best_variant = None

for variant in class_variants:

variant_embedding = self.embedding_model.encode([variant])[0]

score = cosine_similarity(

[pred_embedding],

[variant_embedding])[0][0]

if score > best_score:

best_score = score

best_variant = variant

return {

"matched": best_score >= self.similarity_threshold,

"similarity": best_score,

}

Ключевая идея здесь простая:мы сравниваем не строки, а смысл.

Результаты по точности

Бенчмарк Vision-Language моделей на изображениях низкого разрешения

Точность распознавания классов для разных VLM-моделей

Качество заметно различается. Некоторые модели стабильно распознают класс даже на плохих изображениях, другие выдают слишком общие или ошибочные описания.

Скорость против качества

Бенчмарк Vision-Language моделей на изображениях низкого разрешения
Бенчмарк Vision-Language моделей на изображениях низкого разрешения

Почему низкое разрешение - ключевая проблема

Эксперимент показал, что даже современные VLM:

  • часто угадывают общий класс,
  • но теряют детали;
  • путаются в вариациях продукта.

При этом семантическое сравнение позволяет засчитывать ответы, которые формально отличаются от эталона, но корректны по смыслу.

Если хочется разобраться глубже

Если тема откликается и хочется системно разобраться, как работают LLM и VLM в реальных условиях, можно посмотреть программу курса: https://llmcourse.tech

Приятный бонус: для читателей статьи действует промокод WINTER35 — скидка 35 000 ₽.

Этот эксперимент показал несколько важных вещей, которые не всегда очевидны из классических бенчмарков VLM.

Во-первых, низкое разрешение и деградация изображения радикально меняют характер задачи. Модели перестают «читать текст» в привычном OCR-смысле и начинают работать на уровне шаблонов, ключевых токенов и общего контекста. В таких условиях выигрывают не самые «визуальные», а те модели, которые лучше восстанавливают смысл из фрагментарной информации.

Во-вторых, семантическое сравнение текстов оказалось значительно практичнее строгой классификации. Оно:

  • устойчиво к вариативности формулировок;
  • позволяет работать с несколькими языками;
  • лучше отражает реальное качество ответа модели, а не формальное совпадение строк.

В-третьих, разница между моделями становится особенно заметной именно на «плохих» данных. Qwen-серия показала себя наиболее устойчивой к потере деталей, тогда как модели, ориентированные на чистый OCR или общее визуальное описание сцены, быстро деградируют по качеству.

Наконец, ограничения по железу — не вторичный фактор. При работе на одной потребительской GPU баланс между размером модели, latency и точностью оказывается критичным, и «гиганты» не всегда оправданы даже теоретически.

Начать дискуссию