Главная/Блог/Аналитика/PerceptionBench: Глубокий анализ…
Аналитика3 мин чтения · 4 августа 2026 г.

PerceptionBench: Глубокий анализ мультимодальных моделей зрения

Полное руководство по оценке мультимодальных моделей с помощью PerceptionBench от Moonshot AI: от загрузки данных до автоматизированного судейства.

PerceptionBench: Глубокий анализ мультимодальных моделей зрения

В эпоху, когда искусственный интеллект перестал быть просто генератором текста, а научился «видеть» мир, критически важно понимать, насколько глубоко модели понимают визуальную информацию. Простого распознавания объектов уже недостаточно. Современные системы должны уметь читать мелкий текст на изображении, считать предметы в сложных сценариях, понимать пространственные отношения и, что самое важное, не галлюцинировать там, где фактов нет. Именно для решения этих задач команда Moonshot AI представила PerceptionBench — комплексный бенчмарк, который измеряет тонкие способности визуального восприятия.

В этой статье мы не просто поверхностно рассмотрим этот инструмент. Мы разберем полный конвейер оценки (evaluation workflow) шаг за шагом. Вы узнаете, как настроить среду, загрузить сбалансированные данные, обработать изображения, запустить модели через API или локально, а также как интерпретировать результаты. Это руководство предназначено для исследователей, инженеров ML и энтузиастов, которые хотят перейти от простого использования LLM к глубокому анализу их мультимодальных способностей.

01Что такое PerceptionBench и почему он важен?

PerceptionBench — это не просто набор картинок с вопросами. Это структурированный датасет, разработанный для измерения fine-grained visual perception (тонкозернистого визуального восприятия). В отличие от старых бенчмарков, которые часто сводились к «что изображено на картинке», PerceptionBench разбивает визуальное понимание на десять атомарных способностей (atomic capabilities). Это позволяет точно определить, где модель сильна, а где она слаба.

Ключевые задачи, которые оценивает бенчмарк:

PerceptionBench: Глубокий анализ мультимодальных моделей зрения
  • OCR (Optical Character Recognition): Чтение текста с изображений, включая рукописный или искаженный шрифт.
  • Counting (Счет): Подсчет объектов, особенно когда они перекрыты или находятся в группе.
  • Localization (Локализация): Определение точного расположения объекта относительно других.
  • Contextual Reasoning (Контекстуальные рассуждения): Понимание сцены в целом, а не отдельных элементов.
  • Comparison (Сравнение): Анализ различий и сходств между несколькими изображениями.
  • Depth Understanding (Понимание глубины): Оценка 3D-структуры сцены по 2D-изображениям.
  • Hallucination Detection (Обнаружение галлюцинаций): Проверка того, не придумывает ли модель несуществующие детали.

Этот подход позволяет получить не просто одну оценку «точность», а профиль способностей модели. Например, модель может отлично читать текст, но проваливать задачи на подсчет. Без такой детализации мы бы упускали критические недостатки.

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

02Настройка окружения и загрузка данных

Первый шаг в работе с PerceptionBench — это настройка среды. Поскольку бенчмарк размещен на Hugging Face, основным инструментом для взаимодействия с ним является библиотека datasets. Однако, из-за большого объема данных, простой загрузки может быть недостаточно. Мы используем стратегию многоэтапной загрузки, которая начинается с потоковой передачи (streaming) и переходит к полной загрузке только при необходимости.

PerceptionBench: Глубокий анализ мультимодальных моделей зрения

Ключевым компонентом является функция _iter_rows. Она реализует «умную» загрузку:

  1. Parquet Streaming: Сначала скрипт пытается получить доступ к конвертированным файлам Parquet через Hugging Face Hub API. Это самый быстрый способ, так как позволяет читать данные частями, не скачивая весь датасет в память.
  2. Original Data Streaming: Если Parquet недоступен, скрипт пытается потоково загружать оригинальные файлы данных.
  3. Full Download: В крайнем случае, если потоковая передача невозможна, выполняется полная загрузка датасета.

Для экономии ресурсов и ускорения разработки мы не используем весь датасет целиком. Вместо этого мы создаем сбалансированную подвыборку. Функция stratified_subset сканирует данные и собирает примеры в «ведра» (buckets) по категориям ошибок (error_category). Мы берем фиксированное количество примеров (например, 12) из каждой из 10 категорий. Это гарантирует, что наша тестовая выборка репрезентативна для всего датасета, но занимает в памяти значительно меньше места.

import os
import sys
import io
import re
import json
import time
import math
import base64
import random
import hashlib
import subprocess
import warnings
from collections import Counter, defaultdict
from concurrent.futures import ThreadPoolExecutor, as_completed

warnings.filterwarnings("ignore")

CFG = dict(
    REPO="moonshotai/PerceptionBench",
    SPLIT="train",
    N_PER_CATEGORY=12,
    MAX_SCAN=1200,
    SEED=42,
    LOAD_MODE="stream",
    BACKEND="blind",
    API_BASE=os.environ.get("PB_API_BASE", "https://api.openai.com/v1"),
    API_KEY=os.environ.get("PB_API_KEY", ""),
    API_MODEL=os.environ.get("PB_API_MODEL", "gpt-4o-mini"),
    API_WORKERS=4,
    API_MAX_TOKENS=512,
    LOCAL_MODEL="HuggingFaceTB/SmolVLM2-2.2B-Instruct",
    LOCAL_MAX_NEW=128,
    MAX_IMAGE_SIDE=1024,
    JPEG_QUALITY=90,
    JUDGE="rule",
    NUM_REL_TOL=0.0,
    OUT_DIR="/content/perceptionbench_out" if os.path.isdir("/content") else "./perceptionbench_out"
)

if os.path.isdir("/content"):
    pass  # Colab environment
else:
    pass  # Local environment

INSTALL_DEPS = Tru

Источник: MarkTechPost ↗