Zanim zaczniesz
Użyj detekcji obiektu, gdy LaiCai musi znaleźć obiekt na ekranie. Klasyfikacja obrazka odpowiada tylko na to, co zawiera cały obraz i nie zwraca bounding box.
Ten przewodnik zabierze Cię z surowych zrzutów ekranu do modelu ONNX kompatybilnego z LaiCai. Używa prawdziwego zbioru danych o małych obiektach, ale ten sam proces stosuje się do kontroli aplikacji, produktów, ikon, narzędzi i innych widocznych celów.

Użyj detekcji obiektu, gdy LaiCai musi znaleźć obiekt na ekranie. Klasyfikacja obrazka odpowiada tylko na to, co zawiera cały obraz i nie zwraca bounding box.
Zazwyczaj tak, gdy pojawiają się w tej samej grze lub aplikacji, używać tej samej skali zrzutu ekranu, i muszą być wykryte w tym samym Flow. Oddzielne modele tylko wtedy, gdy sceny nie są powiązane, lista klas staje się bardzo duża, lub jedna grupa potrzebuje innego rozmiaru wejścia lub celu wydajności.
Zbierz ramki z dokładnego urządzenia, rozdzielczości, poziomu zoom i jakości wizualnej, które LaiCai zobaczy. Różnorodność ma więcej znaczenia niż ratowanie wielu kolejnych ram wideo, które wyglądają prawie identycznie.
Klasa powinna reprezentować jedną wizualną decyzję, którą Flow musi podjąć. Zachowaj nazwy krótkie, unikatowe i stabilne, ponieważ ta sama kolejność jest stosowana wYOLOetykiety, data.yaml, config.json i vision.detect selector klasy.
Jeśli zbierane zasoby nadal przypominają dostępne zasoby, należy oznaczyć oba stany, na przykład Copper i CopperDepleted. Nie oczekujcie, że sam próg ufności będzie niezawodnie oddzielał dwa rzeczywiste stany widzenia.

MakeSense.ai to darmowe narzędzie do etykiet oparte na przeglądarce. Dla modeli LaiCai wybierz Wykrywanie obiektów, użyj prostokątnych pól i eksportuYOLOadnotacje. (Object Detection)
Otwórz MakeSense.ai i przesłać zdjęcia źródłowe. Zachowaj oryginalny folder obrazkowy; eksportowana etykieta ZIP go nie zastępuje.
Wybierz wykrywanie obiektów, nie rozpoznawanie obrazów. (Object Detection · Image Recognition)
Utwórz ostateczną listę klas w stałej kolejności, a następnie narysuj prostokąt wokół każdej instancji docelowej.
Przejrzyj puste obrazy, pominięte obiekty, złe klasy i luźne pola przed wywozem.
Eksportuj adnotacje Rect jako pakiet ZIP wYOLOformat. (Rect annotations)
Powiąż każdy obraz z pliku etykiet .txt o tej samej nazwie. Podział przez nagrywanie sesji lub zakresu czasowego, a nie przez losowo rozrzucanie sąsiadujących ram wideo przez pociąg i walidację.
dataset/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
└── data.yamlpath: /absolute/path/to/dataset
train: images/train
val: images/val
names:
0: Copper
1: CopperDepleted
2: Wood
3: MonsterPraktyczny rozłam początkowy to 80% pociągów i 20% walidacji. Zestaw walidacji musi zawierać rzeczywiście niewidoczne sceny.

Poniższy przykład wykorzystuje wersje zweryfikowane przy pomocy tego przepływu pracy. Model Nano jest najbezpieczniejszym punktem wyjściowym dla ciągłego wykrywania. Użyj 640 px dla większych obiektów i 960 px, gdy ważne cele są małe.
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| Parametr | Wartość wyjściowa | Dlaczego? |
|---|---|---|
model | YOLO26n | Wystarczająco mały i szybki jak na pierwszą iterację. |
imgsz | 960 / 640 | Użyj 960 dla małych celów; użyj 640, gdy cele są większe lub prędkość ma większe znaczenie. |
epochs | 200 | Ustawia hojny sufit, podczas gdy wcześniejsze zatrzymanie może skończyć się wcześniej. |
patience | 40 | Zatrzymanie po walidacji nie poprawiło się przez 40 epok. |
batch | 8 | Zmniejszyć do 4 lub 2, jeśli skończy się pamięć; zwiększyć tylko po zmierzeniu. |
device | mps / 0 / cpu | Krzem jabłkowy używa pomp, NVIDIA używa 0, a każda maszyna może używać cpu. |
workers | 4 | Konserwatywny punkt wyjścia. |
seed | 42 | Ułatwia odtwarzanie zbioru danych i porównań treningowych. |
close_mosaic | 15 | Wyłącza mozaikę przy końcu, więc ostateczne epoki widzą więcej naturalnych obrazów. |
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,
)Użyj najlepszego punktu kontrolnego, sprawdź przewidywania na niewidocznych zrzutach ekranu i przejrzyj każdą klasę oddzielnie. Wysoki wynik globalny może ukryć słabe rzadkie klasy.


LaiCai importuje ONNX, a nie plik szkoleniowy .pt. Eksportuj jedno statyczne wejście NCHW RGB, partię 1, float32 lub float16 oraz surowe przewidywania jednogłośne, tak aby LaiCai mógł zastosować filtrowanie zaufania i NMS.
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,
)Wybierz sam katalog w bibliotece modelu LaiCai. Katalog musi zawierać config.json i plik ONNX nazwany przez modelFile. Identyfikatory klasy muszą zaczynać się od 0 i pozostać spójne.
game-objects/
├── config.json
└── model.onnx{
"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
}
}Jeśli LaiCai twierdzi, że config.json zaginął lub nie jest do odczytu, wybrałeś plik ONNX lub niekompletny folder. Importuj kompletny katalog modelu i upewnij się, że id2label lub label2id definiuje każdą klasę.
OtwórzLaiCai Flow, przejść do biblioteki Model, zaimportować przygotowany katalog, i potwierdzić, że model jest oznaczony kompatybilny przed użyciem go w wizji. wykryć. (vision.detect)
Zapisz oryginalne obrazy,YOLOetykiety, lista klas, dane. Yaml, dowództwo treningowe i best.pt razem. Te pliki są Twoim źródłem danych wielokrotnego użytku; sam eksportowany plik ONNX nie wystarczy do niezawodnego przekwalifikowania. (data.yaml)
Nie. Napisz nową partię, wyeksportuj i połącz ją z zapisanym starym zbiorem danych. Ponowne importowanie starych danych tylko wtedy, gdy trzeba skorygować stare adnotacje.
Tak, ale dołącz go po istniejących klasach i remap nowy eksport według nazwy klasy. Następnie przetrenuj na pełnym zbiorze danych, aby stare klasy pozostały reprezentowane.
Oba stany są podobne wizualnie i model nie nauczył się rozróżnienia. Dodaj oddzielną klasę stanu wyczerpanego lub zweryfikowane trudne-negatywne przykłady, a następnie przeszkolenie i przegląd matrycy dezorientacji.
Nie. Próg może handlować pamięcią o dokładności, ale nie może zastąpić brakujących klas, niespójnych etykiet lub mylących negatywnych przykładów.
Polecenia i opcje kompatybilności zawarte w niniejszym przewodniku zostały sprawdzone pod kątem aktualnej oficjalnej dokumentacji i umowy modelu LaiCai.
Po kompatybilności modelu, użyj wizji. wykryj, aby wybrać region klasy, progu i ekranu, a następnie podłącz ścieżkę sukcesu lub porażki do następnego działania Flow. (vision.detect)