/// <summary> /// This method return a collection of DisposableNamedOnnxValue as in other interfaces /// Query names from OrtIoBinding object and pair then with the array of OrtValues returned /// from OrtIoBinding.GetOutputValues() /// /// </summary> /// <param name="runOptions">RunOptions</param> /// <param name="ioBinding">OrtIoBinding instance with bindings</param> /// <param name="names">optional parameter. If you already know the names of the outputs you can save a native /// call to retrieve output names. They will be paired with the returned OrtValues and combined into DisposbleNamedOnnxValues. /// Otherwise, the method will retrieve output names from the OrtIoBinding instance. /// It is an error if you supply a different number of names than the returned outputs</param> public IDisposableReadOnlyCollection <DisposableNamedOnnxValue> RunWithBindingAndNames(RunOptions runOptions, OrtIoBinding ioBinding, string[] names = null) { NativeApiStatus.VerifySuccess(NativeMethods.OrtRunWithBinding(Handle, runOptions.Handle, ioBinding.Handle)); using (var ortValues = ioBinding.GetOutputValues()) { string[] outputNames = names; if (outputNames == null) { outputNames = ioBinding.GetOutputNames(); } if (outputNames.Length != ortValues.Count) { throw new OnnxRuntimeException(ErrorCode.InvalidArgument, "Number of specified names: " + names.Length + " does not match the output number: " + ortValues.Count); } var result = new DisposableList <DisposableNamedOnnxValue>(outputNames.Length); try { for (int i = 0; i < outputNames.Length; ++i) { var ortValue = ortValues.ElementAt(i); result.Add(DisposableNamedOnnxValue.CreateTensorFromOnnxValue(outputNames[i], ortValue.Handle)); ortValue.Disown(); } } catch (Exception e) { result.Dispose(); throw e; } return(result); } }
/// <summary> /// This method runs inference on the OrtIoBinding instance /// The method does not return anything. This is a lightweight version of /// RunWithBindingAndNames(). When you bind pre-allocated buffers to the output values /// you may not want to fetch the outputs since you already have access to them so you can spare /// the expense of fetching them and pairing with names. /// You can still fetch the outputs by calling OrtIOBinding.GetOutputValues() /// </summary> /// <param name="runOptions"></param> /// <param name="ioBinding"></param> public void RunWithBinding(RunOptions runOptions, OrtIoBinding ioBinding) { NativeApiStatus.VerifySuccess(NativeMethods.OrtRunWithBinding(Handle, runOptions.Handle, ioBinding.Handle)); }