LaiCai Flowруководство
YOLO · ONNX · LaiCai Flow

Обучите пользовательскую модель обнаружения объектов дляLaiCai Flow

Это руководство перенесет вас от необработанных скриншотов к совместимой с LaiCai модели ONNX. В качестве примера он использует реальный набор данных для игр с малым объектом, но тот же процесс применяется к элементам управления приложениями, продуктам, значкам, инструментам и другим видимым целям.

Проверенный рецептYOLO26n · 960 px · 17 классов · рабочий стол и модель Android Agent
Общая игровая сцена с ящиками обнаружения вокруг руды, дерева и монстра
Одна модель может обнаружить несколько связанных классов в одной сцене, таких как ресурсы, персонажи и состояния объектов.
Обучите пользовательскую модель обнаружения объектов дляLaiCai Flow
YouTube

Полный путь

  1. захватСобрать разнообразные кадры
  2. этикеткаНарисуйте плотные коробки
  3. слияниеДержите идентификаторы классов стабильными
  4. ПоездПроверка на невидимых кадрах
  5. экспортСоздание исходного ONNX
  6. импортДобавить config.json

Прежде чем начать

Используйте обнаружение объектов, когда LaiCai должен найти объект на экране. Классификация изображений отвечает только на то, что содержит целое изображение, и не возвращает ограничивающий ящик.

Должна ли руда, дерево и монстры быть в одной модели?

Обычно да, когда они появляются в одной и той же игре или приложении, используют одну и ту же шкалу скриншотов и должны быть обнаружены в одном потоке. Отдельные модели только тогда, когда сцены не связаны между собой, список классов становится очень большим, или одной группе требуется другой размер входа или целевая производительность.

01

Подготовьте полезные скриншоты

Соберите кадры из точного устройства, разрешения, уровня масштабирования и визуального качества, которые увидит LaiCai. Разнообразие имеет большее значение, чем сохранение многих последовательных видеокадров, которые выглядят почти одинаково.

  • Включают различные положения, размеры, освещение, фоны, анимационные кадры и частичную окклюзию.
  • Держите сложные примеры: крошечные объекты, краевые объекты, размытые, всплывающие окна и визуально похожие нецели.
  • Добавьте некоторые фоновые изображения, где не отображается ни один из ваших целевых классов. Файлы с этикетками пусты.
  • Не существует универсального минимума. Для первого теста нужно иметь не менее 50 различных коробок на класс; для сложных или похожих классов обычно требуется 100-200 или более.
02

Составьте список классов перед маркировкой

Класс должен представлять одно визуальное решение, которое должен принять поток. Держите имена короткими, уникальными и стабильными, потому что тот же порядок используется вYOLOЯрлыки, data.yaml, config.json и селектор классов vision.detect.

Относитесь к визуально различным состояниям как к отдельным классам

Если собранный ресурс по-прежнему напоминает доступный ресурс, обозначьте оба состояния, например Copper и CopperDepleted. Не ожидайте, что один только порог доверия надежно разделит два реальных визуальных состояния.

Побочное сравнение доступного медного ресурса и истощенного ресурса, каждый с отдельной коробкой обнаружения
Используйте отдельные классы, когда автоматизация должна по-разному реагировать на два состояния.
  • Каждый видимый экземпляр каждого целевого класса должен быть помечен. Немаркированная цель изучается как фон.
  • Используйте одну и ту же политику коробки везде: плотно вокруг видимого объекта, без больших полей.
  • Предпочитают названия, такие как CopperDepleted или copper depleted, когда инструмент маркировки меняет места.
03

Оригинальное название: MakeSense.ai

MakeSense.ai - это бесплатный инструмент маркировки на основе браузера. Для моделей LaiCai выберите обнаружение объектов, используйте прямоугольные коробки и экспортируйте их.YOLOаннотации. (Object Detection)

  1. 1

    Откройте MakeSense.ai и загрузите исходные изображения. Храните оригинальную папку с изображением; экспортируемая этикетка ZIP не заменяет ее.

  2. 2

    Выберите обнаружение объектов, а не распознавание изображений. (Object Detection · Image Recognition)

  3. 3

    Создайте окончательный список классов в фиксированном порядке, затем нарисуйте прямоугольник вокруг каждого целевого экземпляра.

  4. 4

    Просмотрите пустые изображения, пропущенные объекты, неправильные классы и свободные коробки перед экспортом.

  5. 5

    Экспортные аннотации как пакет ZIPYOLOФормат. (Rect annotations)

04

Строим одно чистоеYOLOнабор данных

Соедините каждое изображение с одноимённым файлом .txt label. Разделение путем записи сессии или диапазона времени, а не путем случайного рассеяния смежных видеокадров по поезду и валидации.

Dataset
dataset/
├── images/
│   ├── train/
│   └── val/
├── labels/
│   ├── train/
│   └── val/
└── data.yaml
data.yaml
path: /absolute/path/to/dataset
train: images/train
val: images/val

names:
  0: Copper
  1: CopperDepleted
  2: Wood
  3: Monster

Практический стартовый сплит составляет 80% поезда и 20% проверки. Набор валидации должен содержать действительно невидимые сцены.

  • Для новой аннотации вам не нужно загружать старые изображения на MakeSense.ai снова.
  • Объедините новые изображения и ярлыки в автономном режиме, а затем переназначьте идентификаторы числового класса по названию класса, чтобы первоначальный порядок оставался неизменным.
  • Переобучение с полным старым + новым набором данных. Обучение только новым изображениям может заставить старые классы вести себя как фон.
ПримерYOLOдиаграмма набора данных, показывающая количество помеченных экземпляров на класс и размеры коробки
Проверьте количество классов перед тренировкой. Класс с несколькими примерами дает нестабильные показатели, даже если общий балл выглядит хорошо.
05

Установите Ultralytics и поезд

В приведенном ниже примере используются версии, проверенные этим рабочим процессом. Модель Nano является наиболее безопасной отправной точкой для непрерывного обнаружения. Используйте 640 px для больших объектов и 960 px, когда важные цели малы.

Создание изолированной среды
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install ultralytics==8.4.138 onnx==1.22.0 \
  onnxruntime==1.29.0 onnxslim==0.1.96

Рекомендуемые начальные параметры

ПараметрНачальная стоимостьПочему
modelYOLO26nНебольшие и достаточно быстрые для первой итерации.
imgsz960 / 640Используйте 960 для небольших целей; используйте 640, когда цели больше или скорость важнее.
epochs200Устанавливает щедрый потолок, в то время как ранняя остановка может закончиться раньше.
patience40Остановки после валидации не улучшались в течение 40 эпох.
batch8Уменьшите до 4 или 2, если память заканчивается; увеличьте только после измерения.
devicemps / 0 / cpuApple Silicon использует mps, NVIDIA использует 0, а любая машина может использовать cpu.
workers4Консервативная кроссплатформенная отправная точка.
seed42Упрощает воспроизведение набора данных и сравнений обучения.
close_mosaic15Отключает мозаику ближе к концу, поэтому последние эпохи видят больше естественных изображений.
train.py
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="dataset/data.yaml",
    imgsz=960,
    epochs=200,
    patience=40,
    batch=8,
    device="mps",  # NVIDIA: 0 · CPU: "cpu"
    workers=4,
    seed=42,
    close_mosaic=15,
)
06

Проверить модель, а не только кривую потерь

Используйте лучшие контрольные точки, проверьте прогнозы на невидимых скриншотах и просмотрите каждый класс отдельно. Высокий глобальный балл может скрыть слабый редкий класс.

  • Точность: сколько зарегистрированных обнаружений верны.
  • Напомним: сколько реальных объектов было найдено.
  • mAP50 и mAP50-95: общая локализация и качество классификации через пороговые значения.
  • Матрица путаницы: какие классы ошибочно принимают друг за друга или за фон.
Пример Ультралитики потери обучения и проверки метрических кривых (Ultralytics)
Потеря обучения должна снижаться, в то время как показатели проверки стабилизируются. Используйте сохраненный best.pt, а не автоматически конечную эпоху.
Пример нормализованной матрицы путаницы для многоклассового детектора игровых объектов
Осмотрите диагональ и фоновую строку и колонку. Одноклассники заслуживают собственных проверок.
07

Экспорт совместимой с LaiCai модели ONNX

LaiCai импортирует ONNX, а не учебный файл .pt. Экспортируйте один статический вход NCHW RGB, партию 1, поплавок 32 или поплавок 16 и сырые прогнозы один ко многим, чтобы LaiCai мог применять фильтрацию доверия и NMS. (float32 · float16)

export.py
from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")
model.export(
    format="onnx",
    imgsz=960,
    batch=1,
    dynamic=False,
    simplify=True,
    nms=None,
)

Пакет каталога моделей

Выберите сам каталог в библиотеке моделей LaiCai. Каталог должен содержать config.json и файл ONNX по имени modelFile. Идентификаторы класса должны начинаться с 0 и оставаться смежными.

Model directory
game-objects/
├── config.json
└── model.onnx
config.json
{
  "id": "game-objects-v1",
  "name": "Game Objects v1",
  "type": "yolo",
  "modelFile": "model.onnx",
  "outputFormat": "raw_yolo_no_objectness",
  "id2label": {
    "0": "Copper",
    "1": "CopperDepleted",
    "2": "Wood",
    "3": "Monster"
  },
  "label2id": {
    "Copper": 0,
    "CopperDepleted": 1,
    "Wood": 2,
    "Monster": 3
  }
}

Импортируется с предупреждениями?

Если LaiCai говорит, что config.json отсутствует или нечитаем, вы выбрали файл ONNX или неполную папку. Импортируйте полный каталог моделей и убедитесь, что id2label или label2id определяет каждый класс.

08

Импорт и тестирование в LaiCai

ОткрытьLaiCai FlowПерейдите в библиотеку моделей, импортируйте подготовленный каталог и подтвердите, что модель помечена как совместимая, прежде чем использовать ее в видении. Обнаружить. (vision.detect)

  • Выберите модель в библиотеке моделей и подтвердите ее ввод, вывод, формат вывода и список классов.
  • Используйте текущий экран с классом и разумным начальным порогом, таким как 0,5.
  • Тестируйте как положительные кадры, так и отрицательные или запутанные кадры. Успешный вывод не то же самое, что обнаруженный объект.
  • После проверки на рабочем столе тестируйте одну и ту же модель отдельно на Android Agent, если Flow будет работать на телефоне.
V2+

Как улучшить следующую версию

Сохраните оригинальные изображения,YOLOЯрлыки, список классов, данные. Ямл, тренировочная команда и Best.pt вместе. Эти файлы являются источником набора данных многоразового использования; одного только экспортированного файла ONNX недостаточно для надежной переподготовки. (data.yaml · best.pt)

  1. Соберите ложные срабатывания, пропущенные объекты, новые среды и новые визуальные состояния из реальных прогонов.
  2. Отметьте только новые изображения в MakeSense.ai с помощью политики конечного класса.
  3. Объедините старые и новые данные, сохранив идентификаторы классов по имени, а затем разделите их на сессии.
  4. Начните новый запуск с предыдущего best.pt, когда сопоставление классов совместимо, и проверьте старые и новые случаи.
Никогда не оставляйте видимые старые классы без маркировки на новых изображениях. Они будут рассматриваться как фон во время обучения.

Общие вопросы

Нужно ли реимпортировать все старые изображения в MakeSense.ai?

Нет. Пометьте новую партию, экспортируйте ее и объедините с сохраненным старым набором данных в автономном режиме. Реимпорт старых данных только тогда, когда вам нужно исправить старые аннотации.

Можно ли добавить новый класс?

Да, но добавьте его после существующих классов и переназначьте новый экспорт по названию класса. Затем переучитесь на полный набор данных, чтобы старые классы оставались представленными.

Почему модель все еще обнаруживает собранный ресурс?

Оба состояния визуально похожи, и модель не узнала различия. Добавьте отдельный класс истощенных состояний или проверенные примеры с жестким отрицанием, а затем переобучите и пересмотрите матрицу путаницы.

Должен ли я повысить порог доверия, чтобы исправить каждый ложный положительный результат?

Нет. Порог может обменять отзыв на точность, но он не может заменить недостающие классы, противоречивые ярлыки или запутанные негативные примеры.

Официальные ссылки

Команды и варианты совместимости в этом руководстве были проверены на соответствие текущей официальной документации и модельному контракту LaiCai.

Продолжайте вLaiCai Flow

После совместимости модели используйте зрение. Выберите класс, порог и область экрана, а затем соедините путь успеха или неудачи со следующим действием потока. (vision.detect)