最初のグラフを作成する
| 項目 | 値 |
|---|---|
| カテゴリ | グラフとパイプライン |
| 難易度 | 初級 |
| 推定所要時間 | 5 minutes |
| ラベル | graph, build, run, pipeline |
第001章では、3行のコードでモデルを実行します。この簡潔さの裏には、すべての実用的な Neat プログラムが直接使用する2段階のライフサイクルが隠されています。まず、Graph としてパイプラインを記述し、次にその記述を、実行可能な Run に構築します。この章では、可能な限り小さなパイプライン(1つの入力ノードが1つの出力ノードに接続され、間にモデルがない)を構成し、単一のフレームをそのパイプラインに通すことで、このライフサイクルを可視化します。
その結果、概念的に理解しやすくなります。Graph は、一度構築して何度も実行できる再利用可能な定義であり、一度限りの呼び出しではありません。この章の終わりには、グラフを作成し、それを実行可能なパイプラインに変換し、出力テンソルのランクを読み出して、フレームが正常に処理されたことを証明します。
ウォークスルー
入力 を記述する
ノードを接続する前に、フレームがどのようなものか宣言します。InputOptions は、そのための契約です。ピクセルの format、width / height、チャンネルの depth、およびランタイムが各バッファにタイムスタンプを付与するかどうかを指定します。これらのオプションから構築された入力ノードは、受信フレームがパイプラインが期待する形状と一致するかどうかを検証します。
C++ では、さらに is_live = false を設定して、これを非リアルタイム(ファイル/テンソル)ソースとしてマークします。
simaai::neat::InputOptions in;
in.format = "RGB";
in.width = width;
in.height = height;
in.depth = 3;
in.is_live = false;
in.do_timestamp = true;
グラフを構成する
次に、構造を構築します。新しい Graph は、空の構成サーフェスであり、add() を使用してノードを順番に追加します。正確に2つのノード(上記で構成された入力ノードと、単なる出力ノード)を追加します。これが全体のトポロジーで す。フレームは入力から入り、出力から出て、その間に何もありません。これは、後続の章でモデルまたは前処理段階が挿入される場所です。
ノードは、simaai::neat::nodes::Input(...) と nodes::Output() から取得されます。
simaai::neat::Graph graph;
graph.add(simaai::neat::nodes::Input(in));
graph.add(simaai::neat::nodes::Output());