YOLO на GPU: как обучить модель распознавания объектов и что получится на выходе
Практическая инструкция: ставим окружение, готовим датасет, обучаем YOLO, смотрим метрики, запускаем распознавание на фото/видео и понимаем, какие файлы получаются после обучения.
YOLOComputer VisionGPUЧто решает YOLO
YOLO нужен не для «нейросети вообще», а для конкретной задачи: найти объекты на изображении и обвести их рамками. Например: люди на камере, машины на парковке, каски на сотрудниках, дефекты на товаре, оборудование в стойке, коробки на складе.
На выходе модель даёт список объектов: класс, вероятность и координаты прямоугольника.
Что понадобится
| Компонент | Минимум | Нормально | Комментарий |
|---|---|---|---|
| GPU | RTX 3060 12GB | RTX 4090 / A5000 / A100 | Для тестов хватит 12–24 GB, для больших датасетов лучше больше VRAM. |
| CPU | 8 ядер | 16–32 ядра | CPU готовит картинки, GPU обучает модель. |
| RAM | 32 GB | 64–128 GB | Важно при большом датасете и кэше. |
| Диск | SSD | NVMe | Много мелких файлов, HDD будет тормозить. |
Шаг 1. Установка окружения
sudo apt update
sudo apt install -y python3 python3-venv python3-pip git
mkdir -p /opt/yolo-demo
cd /opt/yolo-demo
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install ultralyticsПроверяем установку:
yolo checks
nvidia-sminvidia-smi не видит видеокарту, обучение пойдёт на CPU. Для реальной задачи это почти всегда слишком медленно.Шаг 2. Быстрый тест без обучения
yolo detect predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'После запуска появится папка:
runs/detect/predict/Внутри будет изображение с нарисованными рамками. Это результат инференса.
Шаг 3. Структура датасета
datasets/cameras/
├── images/
│ ├── train/img001.jpg
│ └── val/img101.jpg
└── labels/
├── train/img001.txt
└── val/img101.txtФайл img001.txt:
0 0.512 0.433 0.210 0.380
1 0.240 0.620 0.130 0.200| Поле | Значение |
|---|---|
| 0 | ID класса. |
| 0.512 | X-центр рамки, доля от ширины. |
| 0.433 | Y-центр рамки, доля от высоты. |
| 0.210 | Ширина рамки. |
| 0.380 | Высота рамки. |
Шаг 4. data.yaml
path: /opt/yolo-demo/datasets/cameras
train: images/train
val: images/val
names:
0: person
1: helmetdata.yaml не совпадают с реальными папками. Тогда YOLO не видит картинки или labels.Шаг 5. Запуск обучения
cd /opt/yolo-demo
source venv/bin/activate
yolo detect train \
model=yolo11n.pt \
data=datasets/cameras/data.yaml \
imgsz=640 \
epochs=50 \
batch=16 \
device=0 \
project=runs/cameras \
name=helmet-test| Параметр | Зачем |
|---|---|
| model | Предобученная стартовая модель. |
| data | Описание датасета. |
| imgsz | Размер входной картинки. Больше — точнее, но медленнее. |
| epochs | Количество эпох. |
| batch | Сколько картинок за раз. Упрётся в VRAM. |
| device | Номер GPU. |
Шаг 6. Что будет на выходе
Появится папка:
runs/cameras/helmet-test/| Файл | Что это |
|---|---|
| weights/best.pt | Лучшая модель. Обычно её используют. |
| weights/last.pt | Модель на последней эпохе. |
| results.png | Графики loss, precision, recall, mAP. |
| confusion_matrix.png | Где модель путает классы. |
| val_batch*_pred.jpg | Примеры предсказаний. |
Шаг 7. Валидация
yolo detect val \
model=runs/cameras/helmet-test/weights/best.pt \
data=datasets/cameras/data.yaml \
imgsz=640 \
device=0| Метрика | Как читать |
|---|---|
| Precision | Сколько найденных объектов правильные. |
| Recall | Сколько реальных объектов модель нашла. |
| mAP50 | Качество при мягком пороге совпадения. |
| mAP50-95 | Более строгая метрика. |
Шаг 8. Инференс на своих файлах
Фото:
yolo detect predict \
model=runs/cameras/helmet-test/weights/best.pt \
source=/opt/test/photo.jpg \
conf=0.35 \
save=TrueВидео:
yolo detect predict \
model=runs/cameras/helmet-test/weights/best.pt \
source=/opt/test/video.mp4 \
conf=0.35 \
save=TrueРезультат снова будет в runs/detect/predict/.
Шаг 9. Экспорт
yolo export model=runs/cameras/helmet-test/weights/best.pt format=onnx imgsz=640
yolo export model=runs/cameras/helmet-test/weights/best.pt format=engine imgsz=640 device=0
Минимальный Python-пример
from ultralytics import YOLO
model = YOLO("runs/cameras/helmet-test/weights/best.pt")
results = model("/opt/test/photo.jpg", conf=0.35)
for r in results:
print(r.boxes.xyxy) # координаты
print(r.boxes.conf) # уверенность
print(r.boxes.cls) # класс
r.save(filename="/opt/test/result.jpg")
Типовые ошибки
- 100 картинок и ожидание промышленного качества.
- Train снят днём, а реальность — ночь, блики, грязная камера.
- Слишком большой batch и CUDA out of memory.
- Нет отдельной validation-выборки.
- Проблема в датасете, а пытаются лечить её дорогой GPU.
Итог
YOLO-проект — это не «поставить нейросеть». Нормальный процесс: собрать реальные фото, разметить, обучить, проверить на настоящем видео, исправить разметку, переобучить и только потом внедрять.
Нужна конфигурация под вашу задачу?
Опишите модель, датасет, требуемую скорость и бюджет. Подберём GPU-сервер без лишнего железа.