Обновить README.md
This commit is contained in:
parent
a02c3bb4ba
commit
b39af02f9d
115
README.md
115
README.md
@ -1,2 +1,115 @@
|
|||||||
# benchmark_llm_plantwild
|
# Бенчмаркинг LLM для классификации болезней растений
|
||||||
|
|
||||||
|
Этот проект представляет собой комплексное решение для тестирования мультимодальных больших языковых моделей (LLM) на задаче классификации болезней растений по изображениям. Он состоит из двух основных этапов:
|
||||||
|
|
||||||
|
1. **ETL (Extract, Transform, Load)**: Подготовка и стандартизация компактного датасета из большого исходного набора данных.
|
||||||
|
2. **Бенчмаркинг**: Систематическое тестирование моделей на подготовленном датасете с записью и логированием результатов.
|
||||||
|
|
||||||
|
## Этап 1: Подготовка датасета (`etl.py`)
|
||||||
|
|
||||||
|
### Задача
|
||||||
|
|
||||||
|
Основная цель этого этапа — подготовить компактную и стандартизированную версию большого датасета изображений **PlantWild** для дальнейших исследований. Оригинальный датасет содержит более 18 000 изображений, что делает его обработку и проведение быстрых экспериментов ресурсозатратными.
|
||||||
|
|
||||||
|
### Описание скрипта `etl.py`
|
||||||
|
|
||||||
|
Скрипт `src/etl.py` выполняет процесс извлечения, преобразования и загрузки (ETL) данных. Его главная задача — создать новый, легковесный датасет на основе оригинального `PlantWild`.
|
||||||
|
|
||||||
|
**Ключевые шаги работы скрипта:**
|
||||||
|
|
||||||
|
1. **Создание целевой директории:** Скрипт создает новую папку для обработанных данных, сохраняя исходный датасет нетронутым.
|
||||||
|
2. **Итерация по классам:** Он проходит по каждой папке-классу (например, `apple black rot`, `apple leaf` и т.д.) в исходном датасете.
|
||||||
|
3. **Отбор изображений:** Из каждого класса отбирается небольшое, заранее заданное количество изображений (например, первые 4). Это количество легко настраивается в коде.
|
||||||
|
4. **Обработка и стандартизация:** Каждое отобранное изображение обрабатывается:
|
||||||
|
* Если его ширина превышает заданный максимум (например, 640 пикселей), изображение пропорционально уменьшается до этой ширины.
|
||||||
|
* Если изображение уже меньше или равно максимальной ширине, оно копируется без изменений.
|
||||||
|
5. **Сохранение результата:** Обработанные изображения сохраняются в целевую директорию с сохранением исходной структуры папок (классов).
|
||||||
|
|
||||||
|
В результате мы получаем небольшой, готовый к экспериментам датасет, где все изображения имеют одинаковую максимальную ширину, а количество примеров в каждом классе сбалансировано.
|
||||||
|
|
||||||
|
### Как использовать `etl.py`
|
||||||
|
|
||||||
|
#### 1. Установка зависимостей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install Pillow tqdm
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Настройка
|
||||||
|
|
||||||
|
Перед запуском откройте файл `src/etl.py` и убедитесь, что переменные в секции `НАСТРОЙКИ` соответствуют вашим путям и требованиям:
|
||||||
|
|
||||||
|
```python
|
||||||
|
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. Запуск скрипта
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python src/etl.py
|
||||||
|
```
|
||||||
|
После выполнения в указанной папке `dataset_processed` появится готовый датасет.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Этап 2: Тестирование моделей (`main.py`)
|
||||||
|
|
||||||
|
### Задача
|
||||||
|
|
||||||
|
Скрипт `src/main.py` является ядром проекта. Он использует подготовленный на первом этапе датасет для систематического тестирования vision-моделей. Скрипт отправляет каждое изображение в LLM и надежно фиксирует результат в структурированном виде.
|
||||||
|
|
||||||
|
### Описание скрипта `main.py`
|
||||||
|
|
||||||
|
**Ключевые особенности:**
|
||||||
|
|
||||||
|
1. **Модульная архитектура провайдеров**: Легко переключаться между различными API-провайдерами (например, OpenAI, OpenRouter) и моделями, изменяя всего пару переменных.
|
||||||
|
2. **Надежный JSON Mode**: Скрипт использует `response_format={"type": "json_object"}` — самый надежный способ заставить модель вернуть строго структурированный JSON. Это исключает ошибки парсинга и необходимость в сложных промптах.
|
||||||
|
3. **Раздельное логирование**:
|
||||||
|
* **Чистые результаты**: В файл `results_{...}.csv` записываются только ключевые данные: имя файла, правильный класс и предсказание модели. Этот файл идеально подходит для последующего анализа.
|
||||||
|
* **Логи ошибок**: В файл `error_log_{...}.txt` автоматически попадают только те запросы, которые завершились ошибкой (ошибка API, парсинга и т.д.), включая полный сырой ответ от сервера для легкой отладки.
|
||||||
|
|
||||||
|
### Как использовать `main.py`
|
||||||
|
|
||||||
|
#### 1. Установка зависимостей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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` и настройте следующие переменные:
|
||||||
|
|
||||||
|
```python
|
||||||
|
PROVIDER = "openai" # или "openrouter"
|
||||||
|
MODEL_NAME = "gpt-4o" # Укажите нужную модель
|
||||||
|
processed_dataset_path = Path(r'E:\Project\OLIMP\Benchmark_LLM_PlantWild\dataset')
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4. Запуск тестирования
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python src/main.py
|
||||||
|
```
|
||||||
|
Скрипт начнет обработку и будет выводить прогресс. По завершении в корне проекта появятся файлы с результатами и логами ошибок (если они были).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Исходный датасет
|
||||||
|
|
||||||
|
Этот проект использует обработанную версию датасета **PlantWild**. Вся информация об оригинальном датасете, его структуре и методах сбора доступна на официальной странице проекта:
|
||||||
|
|
||||||
|
- **[Benchmarking In-the-Wild Multimodal Plant Disease Recognition and A Versatile Baseline](https://tqwei05.github.io/PlantWild/)**
|
||||||
Loading…
Reference in New Issue
Block a user