LaiCai FlowFührung
YOLO · ONNX · LaiCai Flow

Trainieren Sie ein benutzerdefiniertes Objekterkennungsmodell fürLaiCai Flow

Dieser Leitfaden führt Sie von rohen Screenshots zu einem LaiCai-kompatiblen ONNX-Modell. Es verwendet einen echten Small-Object-Spieldatensatz als Arbeitsbeispiel, aber der gleiche Prozess gilt für App-Steuerelemente, Produkte, Icons, Tools und andere sichtbare Ziele.

Geprüftes RezeptYOLO26n · 960 px · 17 Klassen · Desktop- und Android-Agent-Modellvertrag (Android Agent)
Generische Spielszene mit Detektionsboxen um Erz, einen Baum und ein Monster
Ein Modell kann mehrere verwandte Klassen in derselben Szene erkennen, z. B. Ressourcen, Zeichen und Objektzustände.
Trainieren Sie ein benutzerdefiniertes Objekterkennungsmodell fürLaiCai Flow
YouTube

Der vollständige Weg

  1. EinfangenSammeln Sie verschiedene Frames
  2. EtikettEnge Boxen ziehen
  3. FusionKlassen-IDs stabil halten
  4. ZugValidierung auf nicht sichtbaren Frames
  5. AusfuhrenRohe ONNX-Ausgabe erstellen
  6. EinfuhrConfig.json hinzufügen (config.json)

Bevor Sie anfangen

Verwenden Sie Objekterkennung, wenn LaiCai herausfinden muss, wo sich ein Objekt auf dem Bildschirm befindet. Die Bildklassifizierung beantwortet nur, was ein ganzes Bild enthält, und gibt keine Begrenzungsbox zurück.

Sollten Erz, Holz und Monster in einem Modell sein?

Normalerweise ja, wenn sie im selben spiel oder in derselben app erscheinen, die gleiche screenshot-skala verwenden und im selben flow erkannt werden müssen. Getrennte Modelle nur, wenn die Szenen nicht miteinander verwandt sind, die Klassenliste sehr groß wird oder eine Gruppe eine andere Eingabegröße oder ein anderes Leistungsziel benötigt.

01

Erstellen Sie nützliche Screenshots

Sammeln Sie Frames von dem genauen Gerät, der Auflösung, der Zoomstufe und der visuellen Qualität, die LaiCai sehen wird. Vielfalt ist wichtiger als das Speichern vieler aufeinanderfolgender Videorahmen, die fast identisch aussehen.

  • Fügen Sie verschiedene Positionen, Größen, Beleuchtung, Hintergründe, Animationsrahmen und teilweise Okklusion hinzu.
  • Behalten Sie schwierige Beispiele: winzige Objekte, Edge-Objekte, Unschärfen, Popups und visuell ähnliche Nicht-Ziele.
  • Fügen Sie einige Hintergrundbilder hinzu, bei denen keine Ihrer Zielklassen angezeigt wird. Ihre Etikettendateien sind leer.
  • Es gibt kein universelles Minimum. Für einen ersten Test sollten Sie mindestens 50 verschiedene Boxen pro Klasse anstreben; schwierige oder ähnliche Klassen benötigen normalerweise 100-200 oder mehr.
02

Entwerfen Sie die Klassenliste vor der Kennzeichnung

Eine Klasse sollte eine visuelle Entscheidung darstellen, die der Flow treffen muss. Halten Sie Namen kurz, einzigartig und stabil, weil die gleiche Reihenfolge inYOLOlabels, data.yaml, config.json und den Klassenselektor vision.detect.

Behandeln Sie visuell verschiedene Zustände als separate Klassen

Wenn eine gesammelte Ressource immer noch der verfügbaren Ressource ähnelt, beschriften Sie beide Zustände, z. B. Copper und CopperDepleted. Erwarten Sie nicht, dass eine Konfidenzschwelle allein zwei reale visuelle Zustände zuverlässig trennt.

Side-by-Side-Vergleich einer verfügbaren Kupferressource und einer erschöpften Ressource, jeweils mit einer separaten Detektionsbox
Verwenden Sie separate Klassen, wenn die Automatisierung unterschiedlich auf die beiden Zustände reagieren muss.
  • Jede sichtbare Instanz jeder Zielklasse muss gekennzeichnet werden. Ein unbeschriftetes Ziel wird als Hintergrund gelernt.
  • Verwenden Sie überall die gleiche Box-Politik: eng um das sichtbare Objekt herum, ohne große Ränder.
  • Bevorzugen Sie Namen wie CopperDepleted oder copper depleted, wenn ein Beschriftungstool Leerzeichen ändert.
03

Label in MakeSense.ai

MakeSense.ai ist ein kostenloses browserbasiertes Kennzeichnungstool. Wählen Sie für LaiCai-Modelle Objekterkennung, verwenden Sie rechteckige Boxen und exportieren SieYOLOAnmerkungen. (Object Detection)

  1. 1

    Öffnen Sie MakeSense.ai und laden Sie die Quellbilder hoch. Behalten Sie Ihren ursprünglichen Bildordner; das exportierte Label ZIP ersetzt es nicht.

  2. 2

    Wählen Sie Objekterkennung, nicht Bilderkennung. (Object Detection · Image Recognition)

  3. 3

    Erstellen Sie die endgültige Klassenliste in einer festen Reihenfolge und zeichnen Sie dann ein Rechteck um jede Zielinstanz.

  4. 4

    Überprüfen Sie leere Bilder, verpasste Objekte, falsche Klassen und lose Boxen vor dem Export.

  5. 5

    Rect-Anmerkungen als ZIP-Paket inYOLOFormat. (Rect annotations)

04

Bauen Sie eine saubereYOLODatensatz

Kombinieren Sie jedes Bild mit einer gleichnamigen .txt-Labeldatei. Split durch Aufnahmesitzung oder Zeitbereich, nicht durch zufällige Streuung benachbarter Videorahmen über Zug und Validierung.

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

Ein praktischer Startsplit ist 80% Zug und 20% Validierung. Das Validierungsset muss wirklich unsichtbare Szenen enthalten.

  • Für einen neuen Annotationsbatch müssen Sie die alten Bilder nicht erneut auf MakeSense.ai hochladen.
  • Fügen Sie die neuen Bilder und Beschriftungen offline zusammen und ordnen Sie dann numerische Klassen-IDs nach Klassennamen neu, damit die ursprüngliche Reihenfolge unverändert bleibt.
  • Umschulung mit dem kompletten alten + neuen Datensatz. Das Training nur auf den neuen Bildern kann dazu führen, dass sich alte Klassen wie Hintergrund verhalten.
BeispielYOLODatensatzdiagramm mit der Anzahl der gekennzeichneten Instanzen pro Klasse und Boxgrößen
Überprüfen Sie die Klassenzählung vor dem Training. Eine Klasse mit nur wenigen Beispielen erzeugt instabile Metriken, auch wenn die Gesamtpunktzahl gut aussieht.
05

Installieren Sie Ultralytics und Train

Das folgende Beispiel verwendet Versionen, die mit diesem Workflow verifiziert wurden. Ein Nano-Modell ist der sicherste Ausgangspunkt für die kontinuierliche Detektion. Verwenden Sie 640 px für größere Objekte und 960 px, wenn wichtige Ziele klein sind.

Eine isolierte Umgebung schaffen
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

Empfohlene Startparameter

ParameterStartwertWarum
modelYOLO26nKlein und schnell genug für die erste Iteration.
imgsz960 / 640Verwenden Sie 960 für kleine Ziele; Verwenden Sie 640, wenn Ziele größer sind oder die Geschwindigkeit wichtiger ist.
epochs200Legt eine großzügige Decke fest, während das frühzeitige Stoppen früher beendet werden kann.
patience40Stopps nach der Validierung haben sich für 40 Epochen nicht verbessert.
batch8Reduzieren Sie auf 4 oder 2, wenn das Gedächtnis abgelaufen ist; erhöhen Sie erst nach der Messung.
devicemps / 0 / cpuApple Silizium verwendet mps, NVIDIA verwendet 0, und jede Maschine kann cpu verwenden.
workers4Ein konservativer Cross-Plattform-Startpunkt.
seed42Erleichtert die Reproduktion von Datensätzen und Trainingsvergleichen.
close_mosaic15Deaktiviert Mosaik am Ende so Endepochen sehen mehr natürliche Bilder.
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

Validierung des Modells, nicht nur der Verlustkurve

Verwenden Sie den besten Checkpoint, überprüfen Sie Vorhersagen auf unsichtbaren Screenshots und überprüfen Sie jede Klasse separat. Eine hohe globale Punktzahl kann eine schwache seltene Klasse verbergen.

  • Präzision: wie viele gemeldete Nachweise korrekt sind.
  • Daran erinnern: wie viele reale Objekte gefunden wurden.
  • mAP50 und mAP50-95: Gesamtlokalisierungs- und Klassifizierungsqualität über Schwellenwerte hinweg.
  • Verwirrungsmatrix: welche Klassen füreinander oder für den Hintergrund verwechselt werden.
Beispiel Ultralytics Training Verlust und Validierung Metrikkurven
Der Trainingsverlust sollte nach unten tendieren, während sich die Validierungsmetriken stabilisieren. Verwenden Sie die gespeicherte best.pt, nicht automatisch die letzte Epoche.
Beispiel einer normalisierten Verwirrungsmatrix für einen mehrklassigen Spielobjektdetektor
Überprüfen Sie die Diagonale und die Hintergrundzeile und -spalte. Ähnliche Klassen verdienen ihre eigenen Schecks.
07

Exportieren Sie ein LaiCai-kompatibles ONNX-Modell

LaiCai importiert ONNX, nicht die Trainings-.pt-Datei. Exportieren Sie einen statischen NCHW-RGB-Eingang, Batch 1, float32 oder float16 und rohe Eins-zu-viele-Vorhersagen, damit LaiCai Konfidenzfilterung und NMS anwenden kann.

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,
)

Packen Sie das Modellverzeichnis

Wählen Sie das Verzeichnis selbst in der LaiCai-Modellbibliothek. Das Verzeichnis muss config.json und die von modelFile benannte ONNX-Datei enthalten. Die Klassen-IDs müssen bei 0 beginnen und zusammenhängend bleiben.

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

Importiert mit Warnhinweisen?

Wenn LaiCai sagt, dass config.json fehlt oder nicht lesbar ist, haben Sie eine ONNX-Datei oder einen unvollständigen Ordner ausgewählt. Importieren Sie das komplette Modellverzeichnis und stellen Sie sicher, dass id2label oder label2id jede Klasse definiert.

08

Import und Test in LaiCai

OffenLaiCai FlowGehen Sie zur Modellbibliothek, importieren Sie das vorbereitete Verzeichnis und bestätigen Sie, dass das Modell als kompatibel markiert ist, bevor Sie es in der Ansicht verwenden. erkennen. (vision.detect)

  • Wählen Sie das Modell in der Modellbibliothek aus und bestätigen Sie Eingabe, Ausgabe, Ausgabeformat und Klassenliste.
  • Verwenden Sie Test Current Screen mit einer Klasse und einem angemessenen Startschwellenwert wie 0,5.
  • Teste sowohl positive Frames als auch negative oder verwirrende Frames. Ein erfolgreicher Inferenzaufruf ist nicht dasselbe wie ein erkanntes Objekt.
  • Testen Sie nach der Desktop-Validierung dasselbe Modell separat auf Android Agent, wenn der Flow auf dem Telefon ausgeführt wird.
V2+

Wie man die nächste Version verbessert

Speichern Sie die Originalbilder,YOLOLabels, Klassenliste, Daten. Yaml, Trainingskommando und best.pt zusammen. Diese Dateien sind Ihre wiederverwendbare Datensatzquelle; die exportierte ONNX-Datei allein reicht nicht für eine zuverlässige Umschulung aus. (data.yaml)

  1. Sammeln Sie falsche Positive, verpasste Objekte, neue Umgebungen und neue visuelle Zustände aus realen Läufen.
  2. Beschriften Sie nur die neuen Bilder in MakeSense.ai mit der endgültigen Klassenrichtlinie.
  3. Fügen Sie alte und neue Daten zusammen, bewahren Sie die Klassen-IDs nach Namen und teilen Sie sie dann erneut nach Sitzung auf.
  4. Starten Sie den neuen Lauf von der vorherigen best.pt, wenn die Klassenzuordnung kompatibel ist, und validieren Sie alte und neue Fälle.
Lassen Sie niemals sichtbare alte Klassen unbeschriftet in den neuen Bildern. Sie werden während des Trainings als Hintergrund behandelt.

Gemeinsame Fragen

Muss ich alle alten Bilder erneut in MakeSense.ai importieren?

Nein. Beschriften Sie den neuen Batch, exportieren Sie ihn und verbinden Sie ihn mit dem gespeicherten alten Datensatz offline. Reimportieren Sie alte Daten nur dann, wenn Sie alte Anmerkungen korrigieren müssen.

Kann ich einfach eine neue Klasse hinzufügen?

Ja, aber fügen Sie es nach den vorhandenen Klassen an und ordnen Sie den neuen Export nach Klassennamen neu. Dann trainieren Sie den vollständigen Datensatz um, damit die alten Klassen vertreten bleiben.

Warum erkennt ein Modell immer noch eine gesammelte Ressource?

Die beiden Zustände sind visuell ähnlich und das Modell hat die Unterscheidung nicht gelernt. Fügen Sie eine separate Depleted-State-Klasse oder verifizierte Hard-Negativ-Beispiele hinzu und trainieren Sie dann die Verwirrungsmatrix neu und überprüfen Sie sie.

Sollte ich die Vertrauensschwelle anheben, um jedes falsche Positive zu beheben?

Nein. Ein Schwellenwert kann den Rückruf für Präzision handeln, kann jedoch fehlende Klassen, inkonsistente Etiketten oder verwirrende negative Beispiele nicht ersetzen.

Amtliche Referenzen

Die Befehle und Kompatibilitätsoptionen in diesem Handbuch wurden mit der aktuellen offiziellen Dokumentation und dem LaiCai-Modellvertrag verglichen.

FortsetzungLaiCai Flow

Nachdem das Modell kompatibel ist, verwenden Sie Vision. Erkennen, ob eine Klasse, ein Schwellenwert und eine Bildschirmregion ausgewählt werden sollen, und verbinden Sie dann den Erfolgs- oder Fehlerpfad mit der nächsten Flow-Aktion. (vision.detect)