LaiCai Flowguía
YOLO · ONNX · LaiCai Flow

Entrenar un modelo de detección de objetos personalizadosLaiCai Flow

Esta guía te lleva desde capturas de pantalla crudas a un modelo ONNX compatible con LaiCai. Utiliza un verdadero conjunto de datos de juego de objetos pequeños como el ejemplo trabajado, pero el mismo proceso se aplica a controles de aplicaciones, productos, iconos, herramientas y otros objetivos visibles.

Receta testadaYOLO26n · 960 px · 17 clases · escritorio y Android Agente modelo contrato
escena del juego genérico con cajas de detección alrededor del mineral, un árbol y un monstruo
Un modelo puede detectar múltiples clases relacionadas en la misma escena, como recursos, personajes y estados de objetos.
Entrenar un modelo de detección de objetos personalizadosLaiCai Flow
YouTube

El camino completo

  1. CapturaRecopilar marcos variados
  2. LabelCajas ajustadas
  3. MergeMantener los ID de clase estables
  4. TrenValidar en marcos invisibles
  5. ExportaciónCrear salida ONNX cruda
  6. ImportaciónAñadir config.json

Antes de empezar

Use la detección de objetos cuando LaiCai debe encontrar dónde está un objeto en pantalla. La clasificación de imágenes sólo responde lo que una imagen entera contiene y no devuelve una caja de fijación.

¿Debería ore, madera y monstruos estar en un modelo?

Normalmente sí cuando aparecen en el mismo juego o aplicación, usan la misma escala de captura de pantalla, y necesitan ser detectados en el mismo Flujo. Modelos separados sólo cuando las escenas no están relacionadas, la lista de clases se vuelve muy grande, o un grupo necesita un tamaño de entrada diferente o objetivo de rendimiento.

01

Prepare imágenes útiles

Recoger marcos del dispositivo exacto, resolución, nivel de zoom y calidad visual que LaiCai verá. La diversidad importa más que guardar muchos vídeos consecutivos que parecen casi idénticos.

  • Incluye diferentes posiciones, tamaños, iluminación, fondos, marcos de animación y oclusión parcial.
  • Mantén ejemplos difíciles: objetos diminutos, objetos de borde, borrón, popups y no-objetivos visualmente similares.
  • Agregue algunas imágenes de fondo donde ninguna de sus clases de destino aparecen. Sus archivos de etiquetas están vacíos.
  • No hay mínimo universal. Para una primera prueba, busca por lo menos 50 cajas variadas por clase; clases difíciles o similares suelen necesitar 100–200 o más.
02

Diseñar la lista de clases antes de etiquetar

Una clase debe representar una decisión visual que el Flujo necesita tomar. Mantenga los nombres cortos, únicos y estables porque el mismo orden se utiliza enYOLOetiquetas, data.yaml, config.json, y el selector de clase vision.detect.

Tratar estados visualmente diferentes como clases separadas

Si un recurso recogido aún se asemeja al recurso disponible, etiqueta ambos estados, por ejemplo Copper y CopperDepleted. No espere un umbral de confianza solo para separar fiablemente dos estados visuales reales.

Comparación lado a lado de un recurso de cobre disponible y un recurso agotado, cada uno con una caja de detección separada
Utilice clases separadas cuando la automatización debe reaccionar de manera diferente a los dos estados.
  • Cada instancia visible de cada clase objetivo debe ser etiquetado. Un objetivo no etiquetado se aprende como fondo.
  • Use la misma política de caja en todas partes: apretado alrededor del objeto visible, sin grandes márgenes.
  • Preferir nombres como CopperDepleted or cobre depleted when a labeling tool changes space.
03

Label en MakeSense.ai

MakeSense.ai es una herramienta de etiquetado basada en el navegador. Para los modelos LaiCai, elija la detección de objetos, utilice cajas rectangulares y exporteYOLOanotaciones. (Object Detection)

  1. 1

    Abrir MakeSense.ai y subir las imágenes de origen. Mantenga su carpeta de imagen original; la etiqueta exportada ZIP no la reemplaza.

  2. 2

    Elija la detección de objetos, no el reconocimiento de imagen. (Object Detection · Image Recognition)

  3. 3

    Crear la lista final de clase en un orden fijo, luego dibujar un rectángulo alrededor de cada instancia de destino.

  4. 4

    Revisa imágenes vacías, objetos perdidos, clases erróneas y cajas sueltas antes de la exportación.

  5. 5

    Exportar Anotaciones Rect como un paquete ZIP enYOLOformato. (Rect annotations)

04

Construye uno limpioYOLODataset

Pare cada imagen con un archivo de etiqueta .txt mismo. Dividido por sesión de grabación o rango de tiempo, no por dispersión al azar marcos de vídeo adyacentes a través del tren y validación.

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

Una división inicial práctica es un 80% de tren y un 20% de validación. El conjunto de validación debe contener escenas genuinamente invisibles.

  • Para un nuevo lote de anotación, usted no necesita subir las imágenes viejas a MakeSense.ai otra vez.
  • Combina las nuevas imágenes y etiquetas fuera de línea, y luego remapa los IDs de clase numérica por nombre de clase para que el orden original se mantenga sin cambios.
  • Reentrenamiento con el conjunto completo de datos antiguos + nuevos. El entrenamiento sólo en las nuevas imágenes puede hacer que las viejas clases se comportan como fondo.
EjemploYOLOgráfico de conjunto de datos que muestra el número de instancias etiquetadas por tamaño de clase y caja
La clase cuenta antes del entrenamiento. Una clase con sólo algunos ejemplos produce métricas inestables incluso si la puntuación general se ve bien.
05

Instalar Ultralytics y tren

El ejemplo a continuación utiliza versiones verificadas con este flujo de trabajo. Un modelo Nano es el punto de partida más seguro para la detección continua. Utilice 640 px para objetos más grandes y 960 px cuando objetivos importantes son pequeños.

Crear un entorno aislado
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

Parámetros de inicio recomendados

parámetroValor inicial¿Por qué?
modelYOLO26nLo suficientemente pequeño y rápido para la primera iteración.
imgsz960 / 640Utilice 960 para objetivos pequeños; use 640 cuando los objetivos son más grandes o la velocidad importa más.
epochs200Establece un techo generoso mientras la parada temprana puede terminar antes.
patience40Para después de la validación no ha mejorado para 40 épocas.
batch8Reducir a 4 o 2 si la memoria se agota; aumentar sólo después de la medición.
devicemps / 0 / cpuSilicona de Apple utiliza mp3, NVIDIA utiliza 0, y cualquier máquina puede usar cpu.
workers4Un punto de partida conservador multiplataforma.
seed42Hace más fácil reproducir las comparaciones de dataset y training.
close_mosaic15Mosaico deshabilitado cerca del final para que las épocas finales vean más imágenes naturales.
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

Validar el modelo, no sólo la curva de pérdida

Utilice el mejor puesto de control, inspeccionar las predicciones sobre capturas de pantalla no vistas, y revisar cada clase por separado. Una puntuación global alta puede ocultar una clase rara débil.

  • Precisión: cuántas detecciones reportadas son correctas.
  • Recuerda: cuántos objetos reales fueron encontrados.
  • mAP50 y mAP50-95: localización general y calidad de clasificación a través de umbrales.
  • Matriz de confusión: qué clases se equivocan para el otro o para el fondo.
Ejemplo de pérdida de entrenamiento Ultralytics y curvas métricas de validación
La pérdida de entrenamiento debería disminuir mientras las métricas de validación se estabilizan. Use el mejor guardado.pt, no automáticamente la época final. (best.pt)
Matriz de confusión normalizada por ejemplo para un detector de objetos múltiples
Inspeccione la diagonal y la fila de fondo y la columna. Clases de estado similar merecen sus propios cheques.
07

Exportar un modelo ONNX compatible con LaiCai

LaiCai importa ONNX, no el archivo de entrenamiento .pt. Exportar una entrada estática NCHW RGB, lote 1, flota32 o flotador16, y predicciones crudas de uno a muchos para que LaiCai pueda aplicar filtro de confianza y 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,
)

Paquete del directorio modelo

Seleccione el directorio en la biblioteca modelo de LaiCai. El directorio debe contener config.json y el archivo ONNX llamado por modelFile. Los ID de clase deben comenzar a 0 y permanecer contiguos.

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
  }
}

¿Importados con advertencias?

Si LaiCai dice que config.json falta o no está legible, seleccionó un archivo ONNX o una carpeta incompleta. Importar el directorio modelo completo y asegurarse de que id2label o label2id define cada clase.

08

Importación y prueba en LaiCai

AbiertoLaiCai Flow, vaya a la biblioteca modelo, importar el directorio preparado y confirme que el modelo está marcado Compatible antes de utilizarlo en la visión. Detectar. (vision.detect)

  • Seleccione el modelo en la biblioteca modelo y confirme su entrada, salida, formato de salida y lista de clases.
  • Usar la pantalla actual de prueba con una clase y un umbral de inicio razonable como 0.5.
  • Prueba ambos marcos positivos y marcos negativos o confusos. Una llamada de inferencia exitosa no es la misma que un objeto detectado.
  • Después de la validación de escritorio, prueba el mismo modelo por separado en Android Agent si el flujo se ejecutará en el teléfono.
V2+

Cómo mejorar la próxima versión

Guarda las imágenes originales,YOLOetiquetas, lista de clases, datos. Yaml, comando de entrenamiento, y mejor.pt juntos. Estos archivos son su fuente de conjunto de datos reutilizable; el archivo ONNX exportado por sí solo no es suficiente para una reeducación confiable. (data.yaml · best.pt)

  1. Recoger falsos positivos, objetos perdidos, nuevos ambientes y nuevos estados visuales de carreras reales.
  2. Etiqueta sólo las nuevas imágenes en MakeSense.ai usando la política de clase final.
  3. Combina datos antiguos y nuevos, preservando identificaciones de clase por nombre, y luego divididos de nuevo por sesión.
  4. Comience la nueva carrera de los mejores.pt anteriores cuando la asignación de clases es compatible, y valide casos antiguos y nuevos. (best.pt)
Nunca dejes las viejas clases visibles sin etiquetar en las nuevas imágenes. Serán tratados como antecedentes durante el entrenamiento.

Cuestiones comunes

¿Necesito reimportar todas las imágenes viejas en MakeSense.ai?

No. Etiquetar el nuevo lote, exportarlo y fusionarlo con el antiguo dataset guardado fuera de línea. Reimportar datos antiguos sólo cuando necesite corregir anotaciones antiguas.

¿Puedo añadir una nueva clase?

Sí, pero apréndelo después de las clases existentes y remapa la nueva exportación por nombre de clase. Luego reentrenamiento en el conjunto de datos completo para que las viejas clases permanezcan representadas.

¿Por qué un modelo todavía detecta un recurso recogido?

Los dos estados son visualmente similares y el modelo no ha aprendido la distinción. Agregue una clase de estado agotado separada o verifique ejemplos duro-negativos, luego vuelva a entrenar y revisar la matriz de confusión.

¿Debo elevar el umbral de confianza para arreglar cada falso positivo?

No. Un umbral puede cambiar de memoria por precisión, pero no puede sustituir las clases desaparecidas, etiquetas inconsistentes o ejemplos negativos confusos.

Referencias oficiales

Los comandos y las opciones de compatibilidad en esta guía se revisaron contra la documentación oficial actual y el contrato modelo LaiCai.

Continuar enLaiCai Flow

Después de que el modelo sea compatible, utilice la visión. detectar para elegir una región de clase, umbral y pantalla, luego conectar el éxito o el camino de fracaso a la siguiente acción de flujo. (vision.detect)