| src | ||
| .env.example | ||
| .gitignore | ||
| README.md | ||
| requirements.txt | ||
Бенчмаркинг LLM для классификации болезней растений
Этот проект представляет собой комплексное решение для тестирования мультимодальных больших языковых моделей (LLM) на задаче классификации болезней растений по изображениям. Он состоит из двух основных этапов:
- ETL (Extract, Transform, Load): Подготовка и стандартизация компактного датасета из большого исходного набора данных.
- Бенчмаркинг: Систематическое тестирование моделей на подготовленном датасете с записью и логированием результатов.
Этап 1: Подготовка датасета (etl.py)
Задача
Основная цель этого этапа — подготовить компактную и стандартизированную версию большого датасета изображений PlantWild для дальнейших исследований. Оригинальный датасет содержит более 18 000 изображений, что делает его обработку и проведение быстрых экспериментов ресурсозатратными.
Описание скрипта etl.py
Скрипт src/etl.py выполняет процесс извлечения, преобразования и загрузки (ETL) данных. Его главная задача — создать новый, легковесный датасет на основе оригинального PlantWild.
Ключевые шаги работы скрипта:
- Создание целевой директории: Скрипт создает новую папку для обработанных данных, сохраняя исходный датасет нетронутым.
- Итерация по классам: Он проходит по каждой папке-классу (например,
apple black rot,apple leafи т.д.) в исходном датасете. - Отбор изображений: Из каждого класса отбирается небольшое, заранее заданное количество изображений (например, первые 4). Это количество легко настраивается в коде.
- Обработка и стандартизация: Каждое отобранное изображение обрабатывается:
- Если его ширина превышает заданный максимум (например, 640 пикселей), изображение пропорционально уменьшается до этой ширины.
- Если изображение уже меньше или равно максимальной ширине, оно копируется без изменений.
- Сохранение результата: Обработанные изображения сохраняются в целевую директорию с сохранением исходной структуры папок (классов).
В результате мы получаем небольшой, готовый к экспериментам датасет, где все изображения имеют одинаковую максимальную ширину, а количество примеров в каждом классе сбалансировано.
Как использовать etl.py
1. Установка зависимостей
pip install Pillow tqdm
2. Настройка
Перед запуском откройте файл src/etl.py и убедитесь, что переменные в секции НАСТРОЙКИ соответствуют вашим путям и требованиям:
dataset_plantwild: Path = Path(r'E:\Project\OLIMP\PlantWild\plantwild')
dataset_processed: Path = Path(r'E:\Project\OLIMP\Benchmark_LLM_PlantWild\dataset')
num_images_per_class: int = 4
max_width: int = 640
3. Запуск скрипта
python src/etl.py
После выполнения в указанной папке dataset_processed появится готовый датасет.
Этап 2: Тестирование моделей (main.py)
Задача
Скрипт src/main.py является ядром проекта. Он использует подготовленный на первом этапе датасет для систематического тестирования vision-моделей. Скрипт отправляет каждое изображение в LLM и надежно фиксирует результат в структурированном виде.
Описание скрипта main.py
Ключевые особенности:
- Модульная архитектура провайдеров: Легко переключаться между различными API-провайдерами (например, OpenAI, OpenRouter) и моделями, изменяя всего пару переменных.
- Надежный JSON Mode: Скрипт использует
response_format={"type": "json_object"}— самый надежный способ заставить модель вернуть строго структурированный JSON. Это исключает ошибки парсинга и необходимость в сложных промптах. - Раздельное логирование:
- Чистые результаты: В файл
results_{...}.csvзаписываются только ключевые данные: имя файла, правильный класс и предсказание модели. Этот файл идеально подходит для последующего анализа. - Логи ошибок: В файл
error_log_{...}.txtавтоматически попадают только те запросы, которые завершились ошибкой (ошибка API, парсинга и т.д.), включая полный сырой ответ от сервера для легкой отладки.
- Чистые результаты: В файл
Как использовать main.py
1. Установка зависимостей
pip install openai pydantic python-dotenv tqdm
2. Настройка API ключей
Создайте в корневой папке проекта файл .env и добавьте в него ваши API-ключи. Скрипт автоматически их подгрузит.
Пример файла .env:
OPENAI_API_KEY="sk-..."
OPENROUTER_API_KEY="sk-or-..."
3. Настройка
Откройте файл src/main.py и настройте следующие переменные:
PROVIDER = "openai" # или "openrouter"
MODEL_NAME = "gpt-4o" # Укажите нужную модель
processed_dataset_path = Path(r'E:\Project\OLIMP\Benchmark_LLM_PlantWild\dataset')
4. Запуск тестирования
python src/main.py
Скрипт начнет обработку и будет выводить прогресс. По завершении в корне проекта появятся файлы с результатами и логами ошибок (если они были).
Исходный датасет
Этот проект использует обработанную версию датасета PlantWild. Вся информация об оригинальном датасете, его структуре и методах сбора доступна на официальной странице проекта: