モデルオプションの設定
| 項目 | 値 |
|---|---|
| カテゴリ | モデルと推論 |
| 難易度 | 初級 |
| 推定所要時間 | 5 minutes |
| ラベル | model-options, configuration, contracts |
第 001 章では、適切なデフォルト値を持つモデルをロードします。特に YOLOv8 のような検出モデルの場合、入力がどのようなピクセル形式とサイズで到着するか、どのように正規化されるか、そして生のネッ トワーク出力がどのようにフィルタリングされたボックスに変換されるかを 宣言 する必要があります。ModelOptions は、それらすべてを 1 つの構造体にまとめ、構築前に値を設定します。
この章では、YOLOv8 モデルを最初から最後まで設定し、次にランタイムがこれらのオプションから解決した契約を調べます。最後に、入力、前処理、および後処理のパラメータを設定し、解決された input_specs()/output_specs()/metadata を読み取り、設定されたモデルを通じて 1 つの決定的なフレームを実行します。
ウォークスルー
入力と前処理を宣言
最初のブロックでは、フレームがどのようなもので、ネットワークに備えるためにどのように準備するかを記述します。format (BGR、ここでは) と input_max_width/height/depth の範囲は、ランタイムが検証し、バッファのサイズを決定する入力契約を設定します。正規化フィールドは、モデルがトレーニングされたときに使用された、チャネルごとの平均値と標準偏差を提供するため、生のピクセルはネットワークが期待する範囲にスケーリングされます。
フィールドは opt.preprocess.* の下にあります: kind = InputKind::Image、color_convert.input_format = PreprocessColorFormat::BGR、および normalize.enable = AutoFlag::On。mean/stddev は std::array<float, 3> として定義されます。
opt.preprocess.kind = simaai::neat::InputKind::Image;
opt.preprocess.color_convert.input_format = simaai::neat::PreprocessColorFormat::BGR;
opt.preprocess.input_max_width = 640;
opt.preprocess.input_max_height = 640;
opt.preprocess.input_max_depth = 3;
opt.preprocess.normalize.enable = simaai::neat::AutoFlag::On;
opt.preprocess.normalize.mean = std::array<float, 3>{0.485f, 0.456f, 0.406f};
opt.preprocess.normalize.stddev = std::array<float, 3>{0.229f, 0.224f, 0.225f};
後処理を宣言
2 番目のブロックは、検出器の出力を調整します。decode_type は YOLOv8 ボックスデコードパスを選択し、score_threshold、nms_iou_threshold、および top_k は生の検出をフィルタリングします。これにより、信頼度の低いボックスが削除され、重複するボックスがマージされ、残るボックスの数が制限されます。boxdecode_original_width/boxdecode_original_height は、デコーダーに、正規化された座標をピクセルにマッピングするために必要なソースフレームのジオメトリを提供し、name_suffix は生成されたステージ名を安定化させ、他のものと組み合わせたときにパイプラインのグラフが読みやすくなるようにします。
decode_type = BoxDecodeType::YoloV8。ジオメトリフィールドは boxdecode_original_width/boxdecode_original_height です。
opt.decode_type = simaai::neat::BoxDecodeType::YoloV8;
opt.score_threshold = 0.55f;
opt.nms_iou_threshold = 0.45f;
opt.top_k = 100;
opt.boxdecode_original_width = 640;
opt.boxdecode_original_height = 640;
opt.name_suffix = "_chapter";
解決されたコントラクトをロードして確認する
これらのオプションを使用して Model を構築すると、コントラクトがモデルアーカイブに対して解決されます。次に、それを読み戻します。input_specs() と output_specs() は、ネゴシエートされたテンソルの制約を報告し、metadata() は、アーカイブに組み込まれたキー/値のコントラクトを公開し ます。ロード後にこれらを検査することで、ランタイムがオプションを受け入れたこと、および使用する具体的な形状が確認され、それらの形状がわかります。
仕様は TensorConstraint の値です。具体的な形状を出力します。
simaai::neat::Model model(model_path, opt);
print_spec("input_specs[0]", model.input_specs().front());
print_spec("output_specs[0]", model.output_specs().front());
std::cout << "metadata_keys=" << model.metadata().size() << "\n";