Image Models Example
Image Models Example
Файлы: examples/image_models/train.py и predict.py. Демонстрируют YoloImageModel на подвыборке COCO (4 изображения, examples/image_models/data/).
✅ Проверено на локальном Docker-стеке: оба скрипта отрабатывают до конца (
train.pyдообучает все 3 модели,predict.pyстроит предсказания и сохраняет визуализации). Датасет и Docker-образ были сломаны — оба фикса описаны ниже.
train.py — обучение всех pretrained-моделей в папке
model_files = list(pretrained_dir.glob("*.pt")) # examples/image_models/pretrained_models/*.pt
for model_path in model_files:
base_model = YOLO(str(model_path))
wrapper = YoloImageModel(base_model)
wrapper.train(data=str(dataset_yaml), epochs=5, imgsz=640)
wrapper.save(str(trained_dir / f"{model_path.stem}_trained.pt"))
В репозитории уже лежат три готовые pretrained-модели (yolo11n.pt, yolov5nu.pt, yolov8n.pt в pretrained_models/) — скрипт дообучает каждую на локальном мини-датасете (5 эпох) и сохраняет результат в trained_models/. Там же уже лежат готовые *_trained.pt — то есть скрипт был прогнан раньше, и его можно перезапускать повторно (перезапишет результат).
predict.py — инференс всеми обученными моделями
trained_models = list(trained_dir.glob("*.pt"))
for model_path in trained_models:
model = YOLO(str(model_path))
wrapper = YoloImageModel(model)
results = wrapper.predict(str(image_path), save=False)
results[0].plot(save=True, filename=str(out_img))
Берёт одно фиксированное изображение (data/images/000000000009.jpg), прогоняет через каждую модель из trained_models/ и сохраняет визуализацию в predictions/ ({model}_prediction.jpg) — готовые примеры результатов уже есть в репозитории.
⚠️ Датасет содержитИсправлено: абсолютные пути в датасете + недостающая системная библиотека
Раньше examples/image_models/data/dataset.yaml содержит:содержал абсолютные пути конкретной машины разработчика:
train: /home/niashin/mephi/mlumina/examples/image_models/data/images
val: /home/niashin/mephi/mlumina/examples/image_models/data/images
ЭтоЗаменил абсолютныена путиtrain: конкретнойimagesмашины/ разработчика,val: images без ключа path:. Важный нюанс, из-за которого первая попытка (path: .) не сработала: ultralytics резолвит path: относительно текущей рабочей директории процесса (если такой путь физически существует — а . существует всегда), а не относительные/портативные.относительно Передсамого запускомyaml-файла. Если train.pypath:нав любойдатасете другойвовсе машинене этизадан, дваultralytics путииспользует нужноявный поправить на актуальныеfallback — иначедиректорию самого yaml-файла, независимо от CWD запускающего процесса. Поэтому правильное решение — не указывать , а не ultralytics.YOLO.trainpath:найдётуказывать изображенияего как ..
Отдельно от датасета в самом Docker-образе не хватало системных библиотек libgl1/libglib2.0-0, из-за чего import cv2 (илитянется найдётчерез чужие/несуществующие)ultralytics) падал с ImportError: libGL.so.1: cannot open shared object file. Добавлено в Dockerfile.
Как запустить
cdpython examples/image_models
python image_models/train.py # дообучение (после— правкиработает dataset.yaml)из любой рабочей директории
python examples/image_models/predict.py # инференс уже обученными моделями
Оба скрипта используют YoloImageModel в однопроцессном режиме (train/predict, не train_ray/predict_ray) — Ray не требуется и не инициализируется.