visionvision.detect

vision.detect

vision.detect ノードで定義された入力、出力、実行環境を確認します。

動画チュートリアル

04

実際の LaiCai Flow ワークフローで vision.detect ノードを設定して実行する方法を動画で確認します。

ノードチュートリアル: Object Detect
YouTube で見る

入力

5
入力項目値の型必須区分利用可能なソース
modelIdstring必須literal
allClassesbool任意literal
classNamesarray任意literal
minScorenumber必須literal
roirect必須literal

出力

9
出力パス値の型座標空間
data.bestobject
data.best.scorenumber
data.best.modelIdstring
data.best.classNamestring
data.best.centerpointscreenRatio
data.best.center.xnumberscreenRatio
data.best.center.ynumberscreenRatio
data.best.rectrectscreenRatio
data.itemsarray

実行環境

デスクトップ対応
Android Agent対応

モデルの互換性と技術要件

拡張子が ONNX でも、それだけで互換性が保証されるわけではありません。LaiCai は入力、出力テンソル、ボックス座標、信頼度、クラス順を解釈できる必要があります。

カスタム検出モデルをトレーニングする

モデルファイル

ONNX にエクスポートした標準 YOLO 物体検出モデルを使用します。PyTorch の .pt、クラウド API のモデル ID、分類・セグメンテーション・姿勢・回転ボックスモデルは直接読み込めません。

.onnxtype: yolo

入力テンソル

3 チャンネルの NCHW RGB 入力を 1 つ使用し、float32 または float16 を 0–1 に正規化します。LaiCai は RGB 114 の letterbox で縦横比を維持し、動的サイズを特定できない場合は 640 × 640 を使います。

[1, 3, H, W]float32 / float16

クラス対応

クラス ID は 0 から連続し、学習時の順番と一致する必要があります。id2label と label2id を一致させ、className は設定済みラベルと完全一致させます。

id2labellabel2idclassName

サイズと速度

連続検出は Nano または Small から始めてください。大きいモデルは精度が上がる場合がありますが、メモリ消費と実行時間も増えます。実機のデスクトップと Android で測定してください。

n / s / m / l / x

対応する出力テンソル

出力テンソルは 1 つだけで、次のいずれかの形式が必要です。raw YOLO 出力には LaiCai が信頼度フィルターと NMS を適用します。

出力形式対応 shape意味
raw_yolo_no_objectness[1, 4 + nc, N] / [1, N, 4 + nc]独立した objectness を持たないボックスとクラススコア。
raw_yolo_with_objectness[1, 5 + nc, N] / [1, N, 5 + nc]ボックス、objectness、クラススコア。
postprocessed_xyxy[1, N, 6] / [N, 6]NMS 後の x1、y1、x2、y2、スコア、クラス ID。

インポート前の確認

  • ONNX 物体検出モデルであり、.pt やクラウド API ID ではない。
  • NCHW RGB 入力が 1 つ、対応出力テンソルが 1 つである。
  • INT8 / UINT8 ではなく float32 または float16 を使う。
  • クラス順と出力形式を確認し、単一クラスでは outputFormat を明示する。
  • モデルフォルダーの .onnx は 1 つ、または config.json の modelFile で指定する。
  • まずデスクトップの現在画面で試し、Android Agent でも別に検証する。

config.json の例

ラベルと outputFormat は例です。エクスポートしたモデルの実際のクラス順とテンソル形式に置き換えてください。

{
  "id": "game-objects",
  "name": "Game Objects",
  "type": "yolo",
  "modelFile": "model.onnx",
  "outputFormat": "raw_yolo_no_objectness",
  "id2label": {
    "0": "ore",
    "1": "tree"
  },
  "label2id": {
    "ore": 0,
    "tree": 1
  }
}