LaiCai Flowguida
YOLO · ONNX · LaiCai Flow

Formare un modello di rilevamento oggetti personalizzato perLaiCai Flow

Questa guida ti porta da screenshot grezzi a un modello ONNX compatibile con LaiCai. Utilizza un vero e proprio set di dati di gioco a piccoli oggetti come l'esempio lavorato, ma lo stesso processo si applica ai controlli delle app, prodotti, icone, strumenti e altri obiettivi visibili.

Ricetta provataYOLO26n · 960 px · 17 classi · desktop e Android Agent model contract
Scena di gioco generica con scatole di rilevamento intorno a minerale, un albero e un mostro
Un modello può rilevare più classi correlate nella stessa scena, come le risorse, i caratteri e gli stati degli oggetti.
Formare un modello di rilevamento oggetti personalizzato perLaiCai Flow
YouTube

Il percorso completo

  1. CapacitàRaccogliere cornici varie
  2. EtichettaDisegnare scatole strette
  3. MergeMantenere stabile ID classe
  4. TrenoConvalida su cornici invisibili
  5. EsportazioneCreare output ONNX grezzo
  6. ImportazioniAggiungi config.json

Prima di iniziare

Utilizzare il rilevamento degli oggetti quando LaiCai deve trovare dove un oggetto è sullo schermo. La classificazione delle immagini risponde solo a ciò che un'intera immagine contiene e non restituisce una scatola di rilegatura.

minerale, legno e mostri dovrebbero essere in un unico modello?

Di solito sì quando appaiono nello stesso gioco o app, utilizzare la stessa scala di screenshot, e devono essere rilevati nello stesso flusso. Modelli separati solo quando le scene non sono correlate, l'elenco di classe diventa molto grande, o un gruppo ha bisogno di una dimensione di input o target di prestazioni diverse.

01

Preparare gli screenshot utili

Raccogliere cornici dal dispositivo esatto, risoluzione, livello di zoom e qualità visiva che LaiCai vedrà. La diversità conta più che salvare molti frame video consecutivi che sembrano quasi identici.

  • Include diverse posizioni, dimensioni, illuminazione, sfondi, cornici di animazione e occlusione parziale.
  • Tenere esempi difficili: piccoli oggetti, oggetti di bordo, sfocatura, popup e visivamente simili non-target.
  • Aggiungi alcune immagini di sfondo dove non compaiono nessuna delle tue classi di destinazione. I loro file di etichette sono vuoti.
  • Non esiste un minimo universale. Per un primo test, mira ad almeno 50 scatole varie per classe; classi difficili o simili di solito hanno bisogno di 100-200 o più.
02

Progettare l'elenco delle classi prima di etichettare

Una classe dovrebbe rappresentare una decisione visiva che il Flusso deve prendere. Mantenere i nomi brevi, unici e stabili perché lo stesso ordine viene utilizzato inYOLOetichette, data.yaml, config.json e il selettore di classe vision.detect.

Trattare stati visivamente diversi come classi separate

Se una risorsa raccolta assomiglia ancora alla risorsa disponibile, etichetta entrambi gli stati, per esempio Copper e CopperDepleted. Non aspettatevi una soglia di fiducia da sola per separare in modo affidabile due stati visivi reali.

Confronto laterale di una risorsa di rame disponibile e una risorsa impoverita, ognuna con una scatola di rilevamento separata
Utilizzare classi separate quando l'automazione deve reagire in modo diverso ai due stati.
  • Ogni istanza visibile di ogni classe target deve essere etichettata. Un bersaglio non etichettato viene imparato come sfondo.
  • Utilizzare la stessa politica box ovunque: stretto intorno all'oggetto visibile, senza grandi margini.
  • Preferire nomi come CopperDepleted o rame depleted quando uno strumento di etichettatura cambia spazi.
03

Etichetta in MakeSense.ai

MakeSense.ai è uno strumento di etichettatura gratuito basato sul browser. Per i modelli LaiCai, scegliere Detezione oggetti, utilizzare scatole rettangolari ed esportareYOLOannotazioni. (Object Detection)

  1. 1

    Apri MakeSense.ai e carica le immagini sorgente. Mantenere la cartella di immagine originale; l'etichetta esportata ZIP non lo sostituisce.

  2. 2

    Scegliere Detezione oggetti, non Riconoscimento immagine. (Object Detection · Image Recognition)

  3. 3

    Creare l'elenco di classe finale in un ordine fisso, quindi disegnare un rettangolo intorno ad ogni istanza di destinazione.

  4. 4

    Rivedere immagini vuote, oggetti mancati, classi sbagliate e scatole sciolte prima di esportare.

  5. 5

    Export Rect annotazioni come pacchetto ZIP inYOLOformato. (Rect annotations)

04

Costruire uno pulitoYOLOset di dati

Coppia ogni immagine con un file di etichetta .txt con lo stesso nome. Spalato da sessione di registrazione o intervallo di tempo, non disperdendo casualmente fotogrammi video adiacenti su treno e validazione.

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 pratica divisione di partenza è 80% treno e 20% di validazione. Il set di validazione deve contenere scene veramente invisibili.

  • Per un nuovo lotto di annotazione, non è necessario caricare le vecchie immagini per MakeSense.ai di nuovo.
  • Unire le nuove immagini e le etichette offline, quindi rimappare gli ID numerici di classe per nome di classe in modo che l'ordine originale rimanga invariato.
  • Ripercorrere con il completo vecchio + nuovo dataset. La formazione solo sulle nuove immagini può rendere le vecchie classi si comportano come sfondo.
EsempioYOLOgrafico dataset che mostra il numero di istanze etichettate per classe e dimensioni scatola
Controllare la classe conta prima dell'allenamento. Una classe con solo pochi esempi produce metriche instabili anche se il punteggio complessivo sembra buono.
05

Installare Ultralytics e treno

L'esempio seguente utilizza le versioni verificate con questo flusso di lavoro. Un modello Nano è il punto di partenza più sicuro per il rilevamento continuo. Utilizzare 640 px per oggetti più grandi e 960 px quando obiettivi importanti sono piccoli.

Creare un ambiente isolato
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

Parametri di partenza consigliati

ParametroValore di partenzaPerché?
modelYOLO26nPiccolo e abbastanza veloce per la prima iterazione.
imgsz960 / 640Utilizzare 960 per piccoli obiettivi; utilizzare 640 quando gli obiettivi sono più grandi o più velocità.
epochs200Imposta un soffitto generoso mentre l'arresto precoce può finire prima.
patience40Stops dopo la convalida non è migliorato per 40 epoche.
batch8Ridurre a 4 o 2 se la memoria si esaurisce; aumentare solo dopo la misurazione.
devicemps / 0 / cpuApple silicio utilizza mps, NVIDIA utilizza 0, e qualsiasi macchina può usare cpu.
workers4Un punto di partenza trasversale conservatore.
seed42Rende i confronti di dataset e formazione più facili da riprodurre.
close_mosaic15Disattiva il mosaico vicino alla fine così le epoche finali vedono immagini più naturali.
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

Convalida il modello, non solo la curva di perdita

Utilizzare il miglior checkpoint, ispezionare le previsioni sugli screenshot invisibili e rivedere ogni classe separatamente. Un alto punteggio globale può nascondere una classe rara debole.

  • Precisione: quanti rilevamenti sono corretti.
  • Richiamo: quanti oggetti reali sono stati trovati.
  • mAP50 e mAP50-95: localizzazione generale e qualità di classificazione attraverso le soglie.
  • Matrice di confusione: quali classi si scambiano tra loro o per background.
Esempio Ultralytics formazione perdita e validazione curve metriche
La perdita di formazione dovrebbe diminuire la tendenza mentre le metriche di convalida si stabilizzano. Utilizzare il salvata best.pt, non automaticamente l'epoca finale.
Esempio matrice di confusione normalizzata per un rilevatore di oggetti di gioco multiclasse
Ispezionare la diagonale e la riga di sfondo e la colonna. Le classi simili meritano i loro controlli.
07

Esportare un modello ONNX compatibile con LaiCai

LaiCai importa ONNX, non il file .pt di formazione. Esportare un ingresso NCHW RGB statico, lotto 1, float32 o float16, e previsioni grezze one-to-many in modo che LaiCai possa applicare il filtraggio della fiducia e NMS.

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

Pacchetto della directory del modello

Selezionare la directory stessa nella libreria Model di LaiCai. La directory deve contenere config.json e il file ONNX chiamato da modelFile. Gli ID di classe devono iniziare a 0 e rimanere contigui.

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

Importato con avvertimenti?

Se LaiCai dice che config.json è mancante o illeggibile, hai selezionato un file ONNX o una cartella incompleta. Importa la directory completa del modello e assicurati che id2label o label2id definisca ogni classe.

08

Importazione e test a LaiCai

ApriLaiCai Flow, vai alla libreria Model, importa la directory preparata e conferma che il modello è contrassegnato Compatibile prima di utilizzarlo in visione. Rileva. (vision.detect)

  • Selezionare il modello nella libreria Model e confermare il suo ingresso, uscita, formato di output e elenco di classe.
  • Utilizzare la schermata corrente di prova con una classe e una soglia di partenza ragionevole come 0.5.
  • Testare sia frame positivi che frame negativi o confusi. Una chiamata di inferenza di successo non è la stessa di un oggetto rilevato.
  • Dopo la convalida del desktop, testare lo stesso modello separatamente su Android Agent se il Flow verrà eseguito sul telefono.
V2+

Come migliorare la prossima versione

Salvare le immagini originali,YOLOEtichette, liste, dati. yaml, comando di addestramento e best.pt insieme. Questi file sono la vostra fonte di dataset riutilizzabile; il file ONNX esportato da solo non è sufficiente per la riqualifica affidabile. (data.yaml)

  1. Raccogliere falsi positivi, oggetti mancati, nuovi ambienti e nuovi stati visivi da piste reali.
  2. Etichetta solo le nuove immagini in MakeSense.ai utilizzando la politica di classe finale.
  3. Unisci i dati vecchi e nuovi, mantenendo gli ID di classe per nome, poi divisi per sessione di nuovo.
  4. Avviare la nuova corsa dal precedente best.pt quando la mappatura della classe è compatibile, e convalidare vecchi e nuovi casi.
Non lasciare mai le vecchie classi visibili non etichettate nelle nuove immagini. Saranno trattati come sfondo durante l'allenamento.

Questioni comuni

Devo riportare tutte le vecchie immagini in MakeSense.ai?

No. Etichetta il nuovo lotto, esportalo, e uniscilo con il vecchio dataset salvato offline. Re-importare vecchi dati solo quando è necessario correggere vecchie annotazioni.

Posso semplicemente aggiungere una nuova classe?

Sì, ma lo ammetta dopo le classi esistenti e rimostra la nuova esportazione per nome di classe. Poi ripercorrere il set di dati completo in modo che le vecchie classi rimangano rappresentate.

Perché un modello rileva ancora una risorsa raccolta?

I due stati sono visivamente simili e il modello non ha imparato la distinzione. Aggiungi una classe di stato depletato separata o esempi verificati negativi, poi riqualificare e rivedere la matrice di confusione.

Dovrei alzare la soglia di fiducia per risolvere ogni falso positivo?

No. Una soglia può commerciare richiamo per precisione, ma non può sostituire le classi mancanti, le etichette inconsistenti, o confondere esempi negativi.

Riferimenti ufficiali

I comandi e le scelte di compatibilità in questa guida sono stati controllati contro l'attuale documentazione ufficiale e il contratto di modello LaiCai.

Continua a leggereLaiCai Flow

Dopo che il modello è compatibile, utilizzare la visione. individuare per scegliere una classe, una soglia e una regione dello schermo, quindi collegare il percorso di successo o fallimento alla prossima azione Flow. (vision.detect)