LaiCai Flowguide
YOLO · ONNX · LaiCai Flow

Former un modèle de détection d'objets personnalisé pourLaiCai Flow

Ce guide vous emmène des captures d'écran brutes à un modèle ONNX compatible LaiCai. Il utilise un jeu réel de petits objets comme exemple travaillé, mais le même processus s'applique aux contrôles d'applications, produits, icônes, outils et autres cibles visibles.

Recette testéeYOLO26n · 960 px · 17 classes · de bureau et Android Agent modèle contrat
Scène de jeu générique avec des boîtes de détection autour du minerai, un arbre et un monstre
Un modèle peut détecter plusieurs classes apparentées dans la même scène, comme les ressources, les caractères et les états d'objet.
Former un modèle de détection d'objets personnalisé pourLaiCai Flow
YouTube

Le chemin complet

  1. CaptureRecueillir des cadres variés
  2. ÉtiquetteDessiner des boîtes serrées
  3. FusionnerConserver les identifiants de classe stables
  4. TrainValider sur les cadres invisibles
  5. ExportationsCréer la sortie ONNX brute
  6. ImportationAjouter config.json

Avant de commencer

Utilisez la détection d'objets lorsque LaiCai doit trouver où un objet est à l'écran. Le classement de l'image ne répond qu'à ce qu'une image entière contient et ne renvoie pas une boîte de délimitation.

Le minerai, le bois et les monstres devraient-ils être dans un modèle ?

Habituellement oui quand ils apparaissent dans le même jeu ou application, utilisez la même échelle de capture d'écran, et doivent être détectés dans le même flux. Des modèles séparés seulement lorsque les scènes sont sans rapport, la liste de classes devient très grande, ou un groupe a besoin d'une taille d'entrée ou d'une cible de performance différente.

01

Préparer des captures d'écran utiles

Recueillir les images à partir de l'appareil exact, de la résolution, du niveau de zoom et de la qualité visuelle que LaiCai verra. La diversité importe plus que l'enregistrement de nombreuses images vidéo consécutives qui semblent presque identiques.

  • Inclure différentes positions, tailles, éclairage, milieux, cadres d'animation et occlusion partielle.
  • Gardez des exemples difficiles : petits objets, objets bord, flou, popups, et visuellement semblables non-cibles.
  • Ajoutez des images de fond où aucune de vos classes cibles n'apparaît. Leurs fichiers d'étiquette sont vides.
  • Il n'y a pas de minimum universel. Pour un premier essai, viser au moins 50 boîtes variées par classe; les classes difficiles ou semblables ont généralement besoin de 100 à 200 ou plus.
02

Concevoir la liste des classes avant l'étiquetage

Une classe doit représenter une décision visuelle que le Flow doit prendre. Gardez les noms courts, uniques et stables parce que le même ordre est utilisé dansYOLOétiquettes, data.yaml, config.json, et le sélecteur de classe vision.detect.

Traiter les états visuellement différents en classes distinctes

Si une ressource collectée ressemble encore à la ressource disponible, inscrire les deux états, par exemple le cuivre et le cuivre appauvri. Ne vous attendez pas à ce qu'un seuil de confiance sépare de façon fiable deux états visuels réels.

Comparaison côte à côte d'une ressource disponible en cuivre et d'une ressource épuisée, chacune avec une boîte de détection séparée
Utiliser des classes séparées lorsque l'automatisation doit réagir différemment aux deux états.
  • Chaque instance visible de chaque classe cible doit être étiquetée. Une cible non marquée est apprise en tant que contexte.
  • Utilisez la même politique de boîte partout: serré autour de l'objet visible, sans grandes marges.
  • Préférez des noms comme CopperDepleted ou Copper depleted lorsqu'un outil d'étiquetage change d'espaces.
03

Étiquette dans MakeSense.ai

MakeSense.ai est un outil d'étiquetage gratuit basé sur le navigateur. Pour les modèles LaiCai, choisissez Détection d'objets, utilisez des boîtes rectangulaires et exportezYOLOles annotations. (Object Detection)

  1. 1

    Ouvrez MakeSense.ai et téléchargez les images sources. Gardez votre dossier image d'origine; l'étiquette exportée ZIP ne le remplace pas.

  2. 2

    Choisissez Détection d'objet, pas reconnaissance d'image. (Object Detection · Image Recognition)

  3. 3

    Créez la liste de classes finale dans un ordre fixe, puis dessinez un rectangle autour de chaque instance cible.

  4. 4

    Examinez les images vides, les objets manqués, les mauvaises classes et les cases lâches avant d'exporter.

  5. 5

    Exporter les rect annotations en tant que paquet ZIP dansYOLOmodèle. (Rect annotations)

04

Construisez-en un propreYOLOensemble de données

Jumelez chaque image avec un fichier d'étiquette .txt du même nom. Séparer par la session d'enregistrement ou la plage de temps, et non par la diffusion aléatoire des images vidéo adjacentes dans le train et la validation.

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

Une fraction de départ pratique est 80% de train et 20% de validation. L'ensemble de validation doit contenir des scènes réellement invisibles.

  • Pour un nouveau lot d'annotation, vous n'avez pas besoin de télécharger les anciennes images sur MakeSense.ai à nouveau.
  • Fusionner les nouvelles images et les étiquettes hors ligne, puis remodeler les ID de classe numérique par nom de classe afin que l'ordre original reste inchangé.
  • Reformer avec l'ancien ensemble de données complet + nouveau. L'entraînement uniquement sur les nouvelles images peut faire que les anciennes classes se comportent comme du fond.
ExempleYOLOdataset graphe montrant le nombre d'instances marquées par classe et par taille de boîte
Vérifiez la classe compte avant l'entraînement. Une classe avec seulement quelques exemples produit des métriques instables même si la note globale semble bonne.
05

Installer Ultralytics et train

L'exemple ci-dessous utilise des versions vérifiées avec ce flux de travail. Un modèle Nano est le point de départ le plus sûr pour la détection continue. Utilisez 640 px pour les objets plus grands et 960 px lorsque les cibles importantes sont petites.

Créer un environnement isolé
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

Paramètres de départ recommandés

ParamètreValeur de départPourquoi
modelYOLO26nPetit et assez rapide pour la première itération.
imgsz960 / 640Utilisez 960 pour les petites cibles; utilisez 640 lorsque les cibles sont plus grandes ou que la vitesse est plus importante.
epochs200Régle un plafond généreux tandis que l'arrêt anticipé peut finir plus tôt.
patience40Arrêts après validation ne s'est pas amélioré pendant 40 époques.
batch8Réduire à 4 ou 2 si la mémoire s'épuise; augmenter seulement après la mesure.
devicemps / 0 / cpuApple silicium utilise des mps, NVIDIA utilise 0, et n'importe quelle machine peut utiliser cpu.
workers4Un point de départ cross-plateforme conservateur.
seed42Il facilite la reproduction des séries de données et des comparaisons de formation.
close_mosaic15Désactive la mosaïque près de la fin afin que les dernières époques voient des images plus naturelles.
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

Valider le modèle, pas seulement la courbe de perte

Utilisez le meilleur point de contrôle, inspectez les prévisions sur des captures d'écran invisibles et examinez chaque classe séparément. Un score global élevé peut cacher une classe rare faible.

  • Précision : combien de détections sont correctes.
  • Rappel : combien d'objets réels ont été trouvés.
  • mAP50 et mAP50-95: localisation globale et qualité de classification entre les seuils.
  • Matrice de confusion: quelles classes se confondent ou se confondent avec le fond.
Exemple Courbes métriques de perte de formation et de validation d'ultralytique (Ultralytics)
La perte de formation devrait diminuer tandis que les mesures de validation se stabiliseraient. Utilisez le best.pt enregistré, pas automatiquement l'époque finale.
Exemple de matrice de confusion normalisée pour un détecteur multi-classe de jeu-objets
Inspectez la diagonale, la ligne de fond et la colonne. Des classes similaires méritent leurs propres chèques.
07

Exporter un modèle ONNX compatible LaiCai

LaiCai importe ONNX, pas le fichier .pt formation. Exportez une entrée statique NCHW RGB, lot 1, float32 ou float16, et des prédictions brutes d'un à plusieurs pour que LaiCai puisse appliquer le filtrage de confiance et 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,
)

Paqueter le répertoire du modèle

Sélectionnez le répertoire lui-même dans la bibliothèque Model de LaiCai. Le répertoire doit contenir config.json et le fichier ONNX nommé par modelFile. Les identifiants de classe doivent commencer à 0 et rester contigus.

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

Importé avec des avertissements ?

Si LaiCai dit que config.json est manquant ou illisible, vous avez sélectionné un fichier ONNX ou un dossier incomplet. Importez le répertoire complet du modèle et assurez-vous que id2label ou label2id définit chaque classe.

08

Importation et essai en LaiCai

OuvrirLaiCai Flow, allez dans la bibliothèque Model, importez le répertoire préparé, et confirmez que le modèle est marqué Compatible avant de l'utiliser en vision. détecter. (vision.detect)

  • Sélectionnez le modèle dans la bibliothèque Model et validez son entrée, sortie, format de sortie et liste de classes.
  • Utilisez Test Current Screen avec une classe et un seuil de départ raisonnable comme 0.5.
  • Tester les cadres positifs et les cadres négatifs ou confus. Un appel à inférence réussi n'est pas le même qu'un objet détecté.
  • Après validation de bureau, testez le même modèle séparément sur Android Agent si le flux s'exécute sur le téléphone.
V2+

Comment améliorer la prochaine version

Enregistrer les images originales,YOLOles étiquettes, la liste des classes, les données. yaml, commande d'entraînement, et best.pt ensemble. Ces fichiers sont votre source réutilisable de données; le fichier ONNX exporté seul ne suffit pas pour un recyclage fiable. (data.yaml)

  1. Recueillir de faux positifs, des objets manqués, de nouveaux environnements et de nouveaux états visuels à partir de vrais runs.
  2. Etiquetez uniquement les nouvelles images dans MakeSense.ai en utilisant la politique de classe finale.
  3. Fusionner les données anciennes et nouvelles, en conservant les ID de classe par nom, puis diviser par session à nouveau.
  4. Commencez la nouvelle course à partir de l'ancien best.pt lorsque la cartographie de classe est compatible, et validez les anciens et les nouveaux cas.
Ne jamais laisser les anciennes classes visibles non marquées dans les nouvelles images. Ils seront traités comme des antécédents pendant la formation.

Questions communes

Dois-je réimporter toutes les vieilles images dans MakeSense.ai ?

C'est pas vrai. Étiquetez le nouveau lot, exportez-le et fusionnez-le avec l'ancien jeu de données enregistré hors ligne. Réimportez les anciennes données seulement lorsque vous devez corriger les anciennes annotations.

Puis-je simplement ajouter une nouvelle classe?

Oui, mais ajoutez-le après les classes existantes et recartez la nouvelle exportation par nom de classe. Puis reformer sur l'ensemble de données complet afin que les anciennes classes restent représentées.

Pourquoi un modèle détecte-t-il encore une ressource collectée?

Les deux états sont visuellement semblables et le modèle n'a pas appris la distinction. Ajouter une classe d'état appauvri distincte ou des exemples durs négatifs vérifiés, puis reformer et revoir la matrice de confusion.

Devrais-je relever le seuil de confiance pour corriger tous les faux positifs?

C'est pas vrai. Un seuil peut échanger le rappel contre la précision, mais il ne peut remplacer les classes manquantes, les étiquettes incohérentes, ou confondre des exemples négatifs.

Références officielles

Les commandes et les choix de compatibilité dans ce guide ont été vérifiés par rapport à la documentation officielle actuelle et au contrat modèle LaiCai.

Continuer dansLaiCai Flow

Une fois le modèle compatible, utilisez la vision. détecter de choisir une classe, un seuil et une région d'écran, puis connecter le chemin de succès ou d'échec à la prochaine action de flux. (vision.detect)