# YOLO Train WebUI Локальный веб-интерфейс для обучения моделей Ultralytics YOLO с журналом, графиками метрик, мягкой остановкой и интеграцией MLflow. ## Возможности - задачи `detect`, `segment`, `classify`, `pose` и `obb`; - локальные датасеты и официальные имена моделей Ultralytics; - настройка эпох, размера изображения, batch, устройства, workers и patience; - цветовые и геометрические аугментации, Mosaic, MixUp, CutMix, copy-paste, erasing и AutoAugment; - live-прогресс, журнал, графики метрик и восстановление состояния после переподключения браузера; - сохранение профилей запуска и кооперативная остановка обучения; - локальное MLflow-хранилище или внешний tracking server. ## Локальная установка и запуск Нужны Python 3.11+ и [uv](https://docs.astral.sh/uv/). ```bash uv sync --locked uv run yolo-train-webui ``` Альтернативный запуск как Python-модуля: ```bash uv run -m yolo_webui ``` Откройте `http://127.0.0.1:8000`. Сервер по умолчанию слушает только loopback. При первом использовании официального имени модели, например `yolo11n.pt`, Ultralytics скачает веса. Пользовательские модели размещайте в `./models` или в `./runs`, а датасеты — в `./datasets`. Результаты записываются в `./runs`. ## Docker Compose ```bash docker compose up --build ``` WebUI будет доступен по `http://127.0.0.1:8000`. Compose намеренно публикует порт только на loopback. Не заменяйте адрес на `0.0.0.0` без аутентифицирующего reverse proxy: API позволяет запускать и останавливать ресурсоёмкие задачи. Для NVIDIA GPU раскомментируйте секцию `deploy.resources.reservations.devices` в `docker-compose.yml`. Образ устанавливает зафиксированные в `uv.lock` зависимости; для другого варианта PyTorch используйте отдельно сгенерированный и проверенный lock-файл. ## Разрешённые пути API отклоняет URL и не разрешает обучению читать или записывать произвольные пути: - датасеты и файлы классов — `./datasets`; - модели — `./models` и `./runs`; - результаты — `./runs`. Дополнительные доверенные корни можно перечислить через системный разделитель путей в `YOLO_WEBUI_DATA_ROOTS`, `YOLO_WEBUI_MODEL_ROOTS` и `YOLO_WEBUI_RUN_ROOTS`. Например, в Linux/macOS: ```bash YOLO_WEBUI_DATA_ROOTS=/mnt/datasets:/data/shared uv run yolo-train-webui ``` PyTorch checkpoints загружаются с включённым restricted-режимом Ultralytics (`ULTRALYTICS_SAFE_LOAD=1`). Используйте только модели из доверенных источников. ## Датасеты Для `detect`, `segment`, `pose` и `obb` укажите YAML-файл либо каталог со структурой `images/` + `labels/`. WebUI может детерминированно разделить такой каталог на train/val. Для `classify` нужен готовый каталог с `train` и `val`/`test`, внутри которых изображения разложены по классам; автоматическое detection-style разбиение для этой задачи отключено. ## MLflow По умолчанию метаданные записываются в `./mlflow.db`. Открыть интерфейс просмотра: ```bash uv run mlflow ui --backend-store-uri sqlite:///mlflow.db ``` Затем откройте `http://127.0.0.1:5000`. Для внешнего tracking server укажите его URI в настройках WebUI. Для каждого завершённого запуска Ultralytics записывает в MLflow параметры, поэпоховые метрики, графики, `results.csv` и checkpoints `weights/best.pt`/`weights/last.pt`. SQLite-файл хранит tracking metadata, а сами файлы находятся в MLflow Artifact Repository (локально — в `./mlruns`). Это артефакты запуска, а не версии MLflow Model Registry: raw YOLO checkpoint не имеет стандартной MLflow `MLmodel`-упаковки. WebUI дополняет штатные метрики стабильным namespace `monitor/*`. Значения собираются после validation текущей эпохи, поэтому не запаздывают на одну эпоху: | Задача | Основные дополнительные ряды | |---|---| | `detect` | box F1 при оптимальном confidence, mAP@0.75, метрики худшего класса | | `segment` | F1 при оптимальном confidence и mAP@0.75 отдельно для box и mask | | `classify` | top-1/top-5 error, macro precision/recall/F1, weighted F1, balanced accuracy | | `pose` | F1 при оптимальном confidence и mAP@0.75 отдельно для box и keypoints (OKS) | | `obb` | F1 при оптимальном confidence, mAP@0.75 и метрики худшего класса для oriented boxes | Для всех задач также записываются исходный Ultralytics fitness и нормализованный `task_score` (для `segment`/`pose` сумма box+mask/keypoints приводится к диапазону 0–1), суммарные train/validation loss, gap/ratio между ними, средний learning rate, время эпохи и скорость validation по стадиям. Теги `yolo.task` и `monitoring.schema_version` позволяют фильтровать совместимые запуски. Финальные per-class precision/recall/F1/AP и support сохраняются в артефакте `monitoring/task_metrics.csv`, чтобы не создавать сотни поэпоховых рядов для датасетов с большим числом классов. Monitor подключается внутри task-specific trainer и сохраняется при запуске Ultralytics DDP на нескольких GPU. Шаги MLflow остаются совместимыми с Ultralytics: первая эпоха имеет `step=0`, а финальная проверка лучшего checkpoint добавляется отдельной точкой после последней эпохи. В WebUI эпохи отображаются привычно, начиная с 1. Проверка интеграции на минимальных датасетах для всех пяти задач: ```bash uv run scripts/run_yolo26_smoke_training.py --mlflow uv run scripts/verify_mlflow_smoke.py ``` Smoke-runner присваивает всей пятёрке запусков уникальный тег `yolo.run_group`; проверка берёт только самый свежий batch и не смешивает его со старыми успешными run-ами. Второй скрипт завершается с ошибкой, если отсутствует experiment/run, параметры, task-specific метрики, их история, теги, `monitoring/task_metrics.csv`, `results.csv`, `best.pt` или `last.pt` хотя бы для одной задачи. ## Проверка ```bash uv run pytest -q node --check src/yolo_webui/static/app.js docker compose config ``` Ultralytics распространяется по лицензии AGPL-3.0; для закрытых коммерческих продуктов проверьте условия Enterprise-лицензии Ultralytics.