動的な入出力形状を持つモデル
ONNXモデルには、例えば、-1 x 3 x 384 x 384
のように、その入出力形状に負の値を持つものがあります。
-1
は、その軸が「動的」であることを意味し、実行時にその軸に適切な整数値を指定する必要があります。
動的な入出力形状を持つモデルの使い方
Construct Onnx Tensor Info
ノードを呼び出し、適当な値をShapeに指定します。
得られたOnnx Tensor Info
を、ONNXモデルのBind Input/Output xxx Array
に指定します。
例えば、ここでは1次元目に10を指定します。
引数ありのFOnnxTensorInfo
のコンストラクタを呼び出し、適当なshapeを指定します。
そして、bindInput
またはbindOutput
の引数に、生成されたFOnnxTensorInfo
を指定します。
// For example, specify 10 for the first dimension
TArray<int64> dynamicShape = { 10, 3, 384, 384 };
// Construct Onnx Tensor Info
// FOnnxTensorInfo(const FString& name, const TArray<int64>& shape, const EOnnxTensorDataType dataType)
FOnnxTensorInfo dynamicShapeTensorInfo(name, dynamicShape, dataType);
// Specify the resultant `FOnnxTensorInfo` to `bindOutput` for the ONNX model
onnxModel->bindOutput(dynamicShapeTensorInfo, outputDataBuffer);
実装例
下記は、-1 x 384 x 384 x 3
の形状の1つの入力と、-1 x 17 x 2
と-1 x 17
の形状の2つの出力を持つモデルの実装例です。
(入出力の最初の次元は、いわゆるBatch size
です)