LaiCai Flow지도자
YOLO · ONNX · LaiCai Flow

사용자 정의 객체 감지 모델을 훈련합니다.LaiCai Flow

이 가이드에서는 원본 스크린샷에서 LaiCai 호환 ONNX 모델로 이동합니다. 실제 소규모 게임 데이터 세트를 작업 예제로 사용하지만, 동일한 프로세스는 앱 제어, 제품, 아이콘, 도구 및 기타 표시 가능한 대상에도 적용됩니다.

테스트한 레시피YOLO26n · 960 px · 17 클래스 · 데스크탑 및 안드로이드 에이전트 모델 계약 (Android Agent)
광석, 나무, 몬스터 주변에 탐지 상자가 있는 일반적인 게임 장면
한 모델은 자원, 캐릭터, 객체 상태와 같은 같은 장면에서 여러 관련 클래스를 감지할 수 있다.
사용자 정의 객체 감지 모델을 훈련합니다.LaiCai Flow
YouTube

완전한 경로

  1. 잡다다양한 프레임 수집하기
  2. 라벨긴장을 풀고 있는 상자를 그립니다.
  3. 합병하다클래스 ID를 안정적으로 유지하세요.
  4. 기차보이지 않는 프레임에서 검증하기
  5. 수출원시 ONNX 출력을 생성하다
  6. 수입config.json 추가

시작하기 전에

LaiCai가 화면에서 물체가 어디에 있는지 찾아야 할 때 객체 탐지를 사용합니다. 이미지 분류는 전체 이미지에 무엇이 포함되어 있는지만 답하고 경계 박스를 반환하지 않습니다.

광석, 나무, 몬스터는 하나의 모델에 있어야 하나요?

일반적으로 같은 게임이나 앱에 나타나고, 동일한 스크린샷 스케일을 사용하고, 동일한 플로우에서 감지되어야 할 때 예입니다. 장면과 관련이 없을 때, 클래스 목록이 매우 커질 때, 또는 한 그룹이 다른 입력 크기나 성능 목표를 필요로 할 때에만 별도의 모델을 사용합니다.

01

유용한 스크린샷을 준비하세요

LaiCai가 볼 수 있는 정확한 장치, 해상도, 줌 수준 및 시각적 품질의 프레임들을 수집하세요. 연속적으로 거의 동일한 비디오 프레임을 저장하는 것보다 다양성이 더 중요합니다.

  • 다른 위치, 크기, 조명, 배경, 애니메이션 프레임, 부분 가려짐을 포함하세요.
  • 어려운 예제를 계속 유지하세요: 작은 물체, 모서리 물체, 흐림, 팝업 및 시각적으로 유사한 타겟이 아닌 물체.
  • 대상 클래스가 나타나지 않는 배경 이미지를 추가합니다. 해당 레이블 파일은 비어 있습니다.
  • 범용적인 최소값은 없습니다. 첫 번째 테스트를 위해, 각 수업당 최소 50개의 다양한 상자를 목표로 하세요; 어려운 수업이나 비슷한 수업은 보통 100~200개 이상이 필요합니다.
02

라벨링하기 전에 수업 목록을 디자인합니다.

클래스는 Flow가 내려야 할 한 가지 시각적 결정을 나타내야 합니다. 동일한 순서가 사용되기 때문에 이름은 짧고 고유하며 안정적이어야 합니다.YOLO레이블, data.yaml, config.json, 그리고 vision.detect 클래스 선택기.

시각적으로 다른 상태를 별도의 클래스로 취급합니다.

수집된 리소스가 여전히 사용 가능한 리소스와 유사하다면, 예를 들어 Copper와 CopperDepleted이라는 두 상태를 모두 레이블링하십시오. 단독으로 신뢰 수준만으로는 두 가지 실제 시각적 상태를 확실하게 구분할 수 있다고 기대하지 마십시오.

각각 별도의 감지 상자가 있는 사용 가능한 구리 자원과 고갈된 자원의 옆으로 비교
자동화가 두 상태에 다르게 반응해야 할 때 별도의 클래스를 사용하십시오.
  • 모든 대상 클래스의 모든 가시적인 인스턴스는 라벨이 지정되어야 합니다. 라벨이 지정되지 않은 대상은 배경으로 학습됩니다.
  • 모든 곳에서 동일한 상자 정책을 사용하세요: 눈에 보이는 물체 주위에 꽉 끼우되 큰 마진을 두지 마세요.
  • 라벨링 도구가 공백을 변경할 때 CopperDepleted 또는 copper_depleted과 같은 이름을 선호합니다.
03

MakeSense.ai에서 레이블 지정하기

MakeSense.ai는 무료 브라우저 기반 레이블링 도구입니다. LaiCai 모델의 경우 객체 검출을 선택하고 직사각형 상자를 사용하고 내보냅니다.YOLO주석. (Object Detection)

  1. 1

    MakeSense.ai를 열고 소스 이미지를 업로드하세요. 원본 이미지 폴더를 그대로 두세요. 내보낸 레이블 ZIP 파일은 이를 대체하지 않습니다.

  2. 2

    이미지 인식 대신 객체 검출을 선택하세요. (Object Detection · Image Recognition)

  3. 3

    고정된 순서로 최종 클래스 목록을 생성한 다음 각 대상 인스턴스 주위에 직사각형을 그립니다.

  4. 4

    내보내기 전에 빈 이미지, 놓친 물체, 잘못된 클래스, 그리고 느슨한 상자를 검토하세요.

  5. 5

    Rect 주석을 ZIP 패키지로 내보내기YOLO형식. (Rect annotations)

04

한 개를 깨끗하게 만드세요YOLO데이터 세트

각 이미지를 동일한 이름의 .txt 레이블 파일과 짝을 지어라. 트레이인과 검증에 인접한 비디오 프레임들을 무작위로 분산시키지 말고, 레코딩 세션이나 시간 범위로 나누어라.

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

실용적인 시작 분할은 80% 훈련과 20% 검증입니다. 검증 세트는 진정으로 본 적이 없는 장면을 포함해야 합니다.

  • 새로운 주석 배치에 대해서는, 오래된 이미지를 MakeSense.ai에 다시 업로드할 필요가 없습니다.
  • 새 이미지와 레이블을 오프라인으로 병합한 다음, 원래 순서가 변경되지 않도록 클래스 이름으로 숫자 클래스 ID를 다시 매핑합니다.
  • 전체적인 기존 + 새로운 데이터셋으로 재훈련하세요. 새로운 이미지에만 훈련하면 기존 클래스가 배경처럼 동작할 수 있습니다.
예시YOLO클래스당 레이블이 지정된 인스턴스 수와 상자 크기를 보여주는 데이터 세트 차트
훈련 전에 수업 수를 확인하세요. 몇 가지 예만 있는 수업은 전체 점수가 좋더라도 불안정한 메트릭을 생성합니다.
05

Ultralytics를 설치하고 훈련하세요.

아래 예시는 이 워크플로로 검증된 버전을 사용합니다. 나노 모델은 연속적인 검사에 가장 안전한 시작점입니다. 큰 물체는 640px, 중요한 표적이 작을 때는 960px를 사용합니다.

고립된 환경을 생성하다
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

추천되는 시작 매개변수

매개 변수시작 가치
modelYOLO26n첫 번째 반복하기에 충분히 작고 빠릅니다.
imgsz960 / 640작은 목표물을 위해 960을 사용하세요; 목표물이 더 크고 속도가 더 중요한 경우 640을 사용하세요.
epochs200자주 멈출 수 있는 것이 더 빨리 끝날 수 있도록 관대한 상한선을 설정합니다.
patience4040개의 에포크 동안 검증이 개선되지 않으면 중지됩니다.
batch8메모리가 부족하면 4 또는 2로 줄이고, 측정한 후에만 늘리세요.
devicemps / 0 / cpu애플 실리콘은 mps를 사용하며, 엔비디아는 0을 사용하고, 어떤 기계든 cpu를 사용할 수 있다.
workers4보수적인 크로스 플랫폼 시작점.
seed42데이터셋과 훈련 비교를 복제하기 더 쉽게 만듭니다.
close_mosaic15마지막 끝에 있는 모자이크를 비활성화하여 최종 에포크가 더 자연스러운 이미지를 볼 수 있도록 합니다.
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

손실 곡선뿐만 아니라 모델을 검증하세요.

최고의 체크포인트로 사용하고, 보이지 않는 스크린샷에서 예측을 점검하고, 각 클래스를 따로 검토하세요. 높은 글로벌 점수는 약한 희귀 클래스를 숨길 수 있습니다.

  • 정밀도: 보고된 검출 중 몇 개가 정확한지.
  • 기억하기: 몇 개의 실제 물체가 발견되었는지.
  • mAP50과 mAP50-95: 임계값 전반에 걸쳐 전반적인 로컬라이제이션 및 분류 품질.
  • 혼란 매트릭스: 어떤 클래스가 서로 또는 배경과 혼동되는지.
예시 울트라리틱스 훈련 손실 및 검증 지표 곡선 (Ultralytics)
훈련 손실은 검증 지표가 안정화되는 동안 하락하는 경향이 있어야 합니다. 자동적으로 마지막 에포크가 아닌 저장된 best.pt를 사용하십시오.
다중 클래스 게임 객체 탐지기의 정규화된 혼란 매트릭스 예시
대각선과 배경 행과 열을 검사하십시오. 유사한 상태 클래스는 자체 검사를 받을 자격이 있습니다.
07

LaiCai 호환 ONNX 모델을 내보내기

LaiCai는 훈련 .pt 파일을 아니라 ONNX를 가져옵니다. LaiCai가 신뢰도 필터링과 NMS를 적용할 수 있도록 하나의 정적 NCHW RGB 입력, 배치 1, 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,
)

모델 디렉토리를 패키지화하다

LaiCai의 모델 라이브러리에서 디렉토리를 직접 선택합니다. 디렉토리에 config.json과 modelFile로 이름이 지정된 ONNX 파일이 있어야 합니다. 클래스 ID는 0부터 시작해야 하며 연속되어야 합니다.

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

경고 사항이 있는 상태로 가져온 것입니까?

LaiCai가 config.json이 누락되었거나 읽을 수 없다고 말하면, 당신은 ONNX 파일이나 불완전한 폴더를 선택했습니다. 완전한 모델 디렉토리를 가져오고 id2label 또는 label2id가 모든 클래스를 정의하는지 확인하십시오.

08

LaiCai에서 가져오고 테스트하세요.

열다LaiCai Flow, 모델 라이브러리로 이동하여 준비된 디렉토리를 가져오고, vision.detect에서 사용하기 전에 모델이 호환 가능으로 표시되었는지 확인합니다.

  • 모델 라이브러리에서 모델을 선택하고 입력, 출력, 출력 형식 및 클래스 목록을 확인합니다.
  • 클래스와 0.5와 같은 합리적인 시작 임계값을 사용하여 테스트 현재 화면을 사용합니다.
  • 양성 프레임과 부정 또는 혼란스러운 프레임 모두를 테스트합니다. 성공적인 추론 호출은 감지된 객체와 동일하지 않습니다.
  • 데스크탑 검증 후, Flow가 휴대폰에서 실행될 경우 동일한 모델을 Android Agent에서 별도로 테스트합니다.
V2+

다음 버전을 개선하는 방법

원본 이미지를 저장하세요,YOLO레이블, 클래스 목록, data.yaml, 훈련 명령, 그리고 best.pt가 함께 있습니다. 이 파일들은 당신의 재사용 가능한 데이터셋 소스입니다; 내보낸 ONNX 파일만으로는 신뢰할 수 있는 재훈련을 위해서는 충분하지 않습니다.

  1. 실제 실행에서 가짜 양성, 놓친 물체, 새로운 환경 및 새로운 시각 상태를 수집합니다.
  2. MakeSense.ai에서 최종 클래스 정책을 사용하여 새 이미지만 레이블 지정하세요.
  3. 구형 데이터와 신형 데이터를 병합하고, 이름별로 클래스 ID를 보존한 다음, 세션별로 다시 분리합니다.
  4. 클래스 매핑이 호환되는 경우 이전 best.pt에서 새 실행을 시작하고 기존 및 새 케이스를 검증합니다.
새 이미지에 눈에 띄는 오래된 클래스를 레이블 없이 남겨두지 마십시오. 그들은 훈련 중에 배경으로 처리됩니다.

일반적인 질문들

모든 오래된 이미지를 MakeSense.ai에 다시 가져오야 하나요?

아니요. 새 배치에 레이블을 붙이고, 내보내고, 오프라인으로 저장된 기존 데이터셋과 병합합니다. 기존 주석을 수정해야 할 때만 기존 데이터를 다시 가져오세요.

새로운 수업을 하나만 추가해도 될까요?

네, 하지만 기존 클래스 뒤에 추가하고 새로운 내보내기를 클래스 이름으로 다시 매핑하세요. 그런 다음 전체 데이터셋에서 다시 훈련하여 기존 클래스가 그대로 나타날 수 있도록 하세요.

왜 모델이 여전히 수집된 리소스를 감지합니까?

두 상태는 시각적으로 유사하며 모델은 그 차이를 배운 적이 없습니다. 별도의 소진 상태 클래스나 검증된 하드 음성 예제를 추가한 다음 다시 훈련하고 혼란 매트릭스를 검토합니다.

모든 잘못된 양성 반응을 수정하기 위해 신뢰도 임계를 높여야 합니까?

아니요. 임계값은 회수의 정확성을 위해 회수를 교환할 수 있지만, 누락된 클래스, 일관성 없는 레이블, 또는 혼란스러운 부정 사례를 대체할 수는 없습니다.

공식 참조

이 가이드의 명령과 호환성 선택은 현재 공식 문서와 LaiCai 모델 계약에 대해 확인되었습니다.

계속 진행하세요LaiCai Flow

모델이 호환되면 vision.detect를 사용하여 클래스, 임계값 및 화면 영역을 선택하고 성공 또는 실패 경로를 다음 Flow 작업에 연결합니다.