OnnxCatalog.ApplyOnnxModel 메서드

정의

오버로드

ApplyOnnxModel(TransformsCatalog, OnnxOptions)

지정한 을 OnnxScoringEstimator 사용하여 만듭니다 OnnxOptions. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, String, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the input column. 입력/출력 열은 제공된 ONNX 모델의 입력/출력 열에 따라 결정됩니다. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the input column. 입력/출력 열은 제공된 ONNX 모델의 입력/출력 열에 따라 결정됩니다. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, String, String, String, Nullable<Int32>, Boolean)

OnnxScoringEstimator- 미리 학습된 Onnx 모델을 열에 적용합니다inputColumnName. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, String[], String[], String, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the inputColumnNames columns. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, String, String, String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean)

OnnxScoringEstimator- 미리 학습된 Onnx 모델을 열에 적용합니다inputColumnName. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, String[], String[], String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the inputColumnNames columns. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, String[], String[], String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean, Int32)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the inputColumnNames columns. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

ApplyOnnxModel(TransformsCatalog, OnnxOptions)

지정한 을 OnnxScoringEstimator 사용하여 만듭니다 OnnxOptions. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, Microsoft.ML.Transforms.Onnx.OnnxOptions options);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * Microsoft.ML.Transforms.Onnx.OnnxOptions -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, options As OnnxOptions) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

options
OnnxOptions

에 대한 OnnxScoringEstimator옵션입니다.

반환

설명

옵션인 경우 GpuDeviceId 값은 null 값이 MLContext.GpuDeviceId 아닌 null경우 사용됩니다.

적용 대상

ApplyOnnxModel(TransformsCatalog, String, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the input column. 입력/출력 열은 제공된 ONNX 모델의 입력/출력 열에 따라 결정됩니다. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, string modelFile, int? gpuDeviceId = default, bool fallbackToCpu = false);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * string * Nullable<int> * bool -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, modelFile As String, Optional gpuDeviceId As Nullable(Of Integer) = Nothing, Optional fallbackToCpu As Boolean = false) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

modelFile
String

ONNX 모델을 포함하는 파일의 경로입니다.

gpuDeviceId
Nullable<Int32>

CPU에서 null 실행하기 위해 실행을 실행할 선택적 GPU 디바이스 ID입니다.

fallbackToCpu
Boolean

GPU 오류가 발생하는 경우 예외를 발생하거나 CPU로 대체합니다.

반환

예제

using System;
using System.IO;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;

namespace Samples.Dynamic
{
    public static class ApplyOnnxModel
    {
        public static void Example()
        {
            // Download the squeeznet image model from ONNX model zoo, version 1.2
            // https://github.com/onnx/models/tree/master/squeezenet or
            // https://s3.amazonaws.com/download.onnx/models/opset_8/squeezenet.tar.gz
            // or use Microsoft.ML.Onnx.TestModels nuget.
            var modelPath = @"squeezenet\00000001\model.onnx";

            // Create ML pipeline to score the data using OnnxScoringEstimator
            var mlContext = new MLContext();

            // Generate sample test data.
            var samples = GetTensorData();
            // Convert training data to IDataView, the general data type used in
            // ML.NET.
            var data = mlContext.Data.LoadFromEnumerable(samples);
            // Create the pipeline to score using provided onnx model.
            var pipeline = mlContext.Transforms.ApplyOnnxModel(modelPath);
            // Fit the pipeline and get the transformed values
            var transformedValues = pipeline.Fit(data).Transform(data);
            // Retrieve model scores into Prediction class
            var predictions = mlContext.Data.CreateEnumerable<Prediction>(
                transformedValues, reuseRowObject: false);

            // Iterate rows
            foreach (var prediction in predictions)
            {
                int numClasses = 0;
                foreach (var classScore in prediction.softmaxout_1.Take(3))
                {
                    Console.WriteLine("Class #" + numClasses++ + " score = " +
                        classScore);
                }
                Console.WriteLine(new string('-', 10));
            }

            // Results look like below...
            // Class #0 score = 4.544065E-05
            // Class #1 score = 0.003845858
            // Class #2 score = 0.0001249467
            // ----------
            // Class #0 score = 4.491953E-05
            // Class #1 score = 0.003848222
            // Class #2 score = 0.0001245592
            // ----------
        }

        // inputSize is the overall dimensions of the model input tensor.
        private const int inputSize = 224 * 224 * 3;

        // A class to hold sample tensor data. Member name should match
        // the inputs that the model expects (in this case, data_0)
        public class TensorData
        {
            [VectorType(inputSize)]
            public float[] data_0 { get; set; }
        }

        // Method to generate sample test data. Returns 2 sample rows.
        public static TensorData[] GetTensorData()
        {
            // This can be any numerical data. Assume image pixel values.
            var image1 = Enumerable.Range(0, inputSize).Select(x => (float)x /
                inputSize).ToArray();

            var image2 = Enumerable.Range(0, inputSize).Select(x => (float)(x +
                10000) / inputSize).ToArray();

            return new TensorData[] { new TensorData() { data_0 = image1 }, new
                TensorData() { data_0 = image2 } };
        }

        // Class to contain the output values from the transformation.
        // This model generates a vector of 1000 floats.
        class Prediction
        {
            [VectorType(1000)]
            public float[] softmaxout_1 { get; set; }
        }
    }
}

설명

입력 열의 이름/형식은 ONNX 모델 입력의 이름/형식과 정확히 일치해야 합니다. 생성된 출력 열의 이름/형식은 ONNX 모델 출력의 이름/형식과 일치합니다. gpuDeviceId 값이면 값이 nullMLContext.GpuDeviceId 사용되지 않으면 null사용됩니다.

적용 대상

ApplyOnnxModel(TransformsCatalog, String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the input column. 입력/출력 열은 제공된 ONNX 모델의 입력/출력 열에 따라 결정됩니다. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, string modelFile, System.Collections.Generic.IDictionary<string,int[]> shapeDictionary, int? gpuDeviceId = default, bool fallbackToCpu = false);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * string * System.Collections.Generic.IDictionary<string, int[]> * Nullable<int> * bool -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, modelFile As String, shapeDictionary As IDictionary(Of String, Integer()), Optional gpuDeviceId As Nullable(Of Integer) = Nothing, Optional fallbackToCpu As Boolean = false) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

modelFile
String

ONNX 모델을 포함하는 파일의 경로입니다.

shapeDictionary
IDictionary<String,Int32[]>

에서 로드된 modelFile셰이프보다 사용할 ONNX 셰이프입니다. 키의 경우 ONNX 모델에 명시된 대로 이름(예: "input")을 사용합니다. 이 매개 변수를 사용하여 셰이프를 나타내는 것은 가변 차원 입력 및 출력을 사용하는 데 특히 유용합니다.

gpuDeviceId
Nullable<Int32>

CPU에서 null 실행하기 위해 실행을 실행할 선택적 GPU 디바이스 ID입니다.

fallbackToCpu
Boolean

GPU 오류가 발생하는 경우 예외를 발생하거나 CPU로 대체합니다.

반환

예제

using System;
using System.IO;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;

namespace Samples.Dynamic
{
    public static class ApplyOnnxModel
    {
        public static void Example()
        {
            // Download the squeeznet image model from ONNX model zoo, version 1.2
            // https://github.com/onnx/models/tree/master/squeezenet or
            // https://s3.amazonaws.com/download.onnx/models/opset_8/squeezenet.tar.gz
            // or use Microsoft.ML.Onnx.TestModels nuget.
            var modelPath = @"squeezenet\00000001\model.onnx";

            // Create ML pipeline to score the data using OnnxScoringEstimator
            var mlContext = new MLContext();

            // Generate sample test data.
            var samples = GetTensorData();
            // Convert training data to IDataView, the general data type used in
            // ML.NET.
            var data = mlContext.Data.LoadFromEnumerable(samples);
            // Create the pipeline to score using provided onnx model.
            var pipeline = mlContext.Transforms.ApplyOnnxModel(modelPath);
            // Fit the pipeline and get the transformed values
            var transformedValues = pipeline.Fit(data).Transform(data);
            // Retrieve model scores into Prediction class
            var predictions = mlContext.Data.CreateEnumerable<Prediction>(
                transformedValues, reuseRowObject: false);

            // Iterate rows
            foreach (var prediction in predictions)
            {
                int numClasses = 0;
                foreach (var classScore in prediction.softmaxout_1.Take(3))
                {
                    Console.WriteLine("Class #" + numClasses++ + " score = " +
                        classScore);
                }
                Console.WriteLine(new string('-', 10));
            }

            // Results look like below...
            // Class #0 score = 4.544065E-05
            // Class #1 score = 0.003845858
            // Class #2 score = 0.0001249467
            // ----------
            // Class #0 score = 4.491953E-05
            // Class #1 score = 0.003848222
            // Class #2 score = 0.0001245592
            // ----------
        }

        // inputSize is the overall dimensions of the model input tensor.
        private const int inputSize = 224 * 224 * 3;

        // A class to hold sample tensor data. Member name should match
        // the inputs that the model expects (in this case, data_0)
        public class TensorData
        {
            [VectorType(inputSize)]
            public float[] data_0 { get; set; }
        }

        // Method to generate sample test data. Returns 2 sample rows.
        public static TensorData[] GetTensorData()
        {
            // This can be any numerical data. Assume image pixel values.
            var image1 = Enumerable.Range(0, inputSize).Select(x => (float)x /
                inputSize).ToArray();

            var image2 = Enumerable.Range(0, inputSize).Select(x => (float)(x +
                10000) / inputSize).ToArray();

            return new TensorData[] { new TensorData() { data_0 = image1 }, new
                TensorData() { data_0 = image2 } };
        }

        // Class to contain the output values from the transformation.
        // This model generates a vector of 1000 floats.
        class Prediction
        {
            [VectorType(1000)]
            public float[] softmaxout_1 { get; set; }
        }
    }
}

설명

입력 열의 이름/형식은 ONNX 모델 입력의 이름/형식과 정확히 일치해야 합니다. 생성된 출력 열의 이름/형식은 ONNX 모델 출력의 이름/형식과 일치합니다. gpuDeviceId 값이면 값이 nullMLContext.GpuDeviceId 사용되지 않으면 null사용됩니다.

적용 대상

ApplyOnnxModel(TransformsCatalog, String, String, String, Nullable<Int32>, Boolean)

OnnxScoringEstimator- 미리 학습된 Onnx 모델을 열에 적용합니다inputColumnName. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, string outputColumnName, string inputColumnName, string modelFile, int? gpuDeviceId = default, bool fallbackToCpu = false);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * string * string * string * Nullable<int> * bool -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, outputColumnName As String, inputColumnName As String, modelFile As String, Optional gpuDeviceId As Nullable(Of Integer) = Nothing, Optional fallbackToCpu As Boolean = false) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

outputColumnName
String

변환에서 생성된 출력 열입니다.

inputColumnName
String

입력 열입니다.

modelFile
String

ONNX 모델을 포함하는 파일의 경로입니다.

gpuDeviceId
Nullable<Int32>

CPU에서 null 실행하기 위해 실행을 실행할 선택적 GPU 디바이스 ID입니다.

fallbackToCpu
Boolean

GPU 오류가 발생하는 경우 예외를 발생하거나 CPU로 대체합니다.

반환

예제

using System;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Transforms.Image;

namespace Samples.Dynamic
{
    public static class ApplyOnnxModelWithInMemoryImages
    {
        // Example of applying ONNX transform on in-memory images.
        public static void Example()
        {
            // Download the squeeznet image model from ONNX model zoo, version 1.2
            // https://github.com/onnx/models/tree/master/vision/classification/squeezenet or use
            // Microsoft.ML.Onnx.TestModels nuget.
            // It's a multiclass classifier. It consumes an input "data_0" and
            // produces an output "softmaxout_1".
            var modelPath = @"squeezenet\00000001\model.onnx";

            // Create ML pipeline to score the data using OnnxScoringEstimator
            var mlContext = new MLContext();

            // Create in-memory data points. Its Image/Scores field is the
            // input /output of the used ONNX model.
            var dataPoints = new ImageDataPoint[]
            {
                new ImageDataPoint(red: 255, green: 0, blue: 0), // Red color
                new ImageDataPoint(red: 0, green: 128, blue: 0)  // Green color
            };

            // Convert training data to IDataView, the general data type used in
            // ML.NET.
            var dataView = mlContext.Data.LoadFromEnumerable(dataPoints);

            // Create a ML.NET pipeline which contains two steps. First,
            // ExtractPixle is used to convert the 224x224 image to a 3x224x224
            // float tensor. Then the float tensor is fed into a ONNX model with an
            // input called "data_0" and an output called "softmaxout_1". Note that
            // "data_0" and "softmaxout_1" are model input and output names stored
            // in the used ONNX model file. Users may need to inspect their own
            // models to get the right input and output column names.
            // Map column "Image" to column "data_0"
            // Map column "data_0" to column "softmaxout_1"
            var pipeline = mlContext.Transforms.ExtractPixels("data_0", "Image")
                .Append(mlContext.Transforms.ApplyOnnxModel("softmaxout_1",
                "data_0", modelPath));

            var model = pipeline.Fit(dataView);
            var onnx = model.Transform(dataView);

            // Convert IDataView back to IEnumerable<ImageDataPoint> so that user
            // can inspect the output, column "softmaxout_1", of the ONNX transform.
            // Note that Column "softmaxout_1" would be stored in ImageDataPont
            //.Scores because the added attributed [ColumnName("softmaxout_1")]
            // tells that ImageDataPont.Scores is equivalent to column
            // "softmaxout_1".
            var transformedDataPoints = mlContext.Data.CreateEnumerable<
                ImageDataPoint>(onnx, false).ToList();

            // The scores are probabilities of all possible classes, so they should
            // all be positive.
            foreach (var dataPoint in transformedDataPoints)
            {
                var firstClassProb = dataPoint.Scores.First();
                var lastClassProb = dataPoint.Scores.Last();
                Console.WriteLine("The probability of being the first class is " +
                    (firstClassProb * 100) + "%.");

                Console.WriteLine($"The probability of being the last class is " +
                    (lastClassProb * 100) + "%.");
            }

            // Expected output:
            //  The probability of being the first class is 0.002542659%.
            //  The probability of being the last class is 0.0292684%.
            //  The probability of being the first class is 0.02258059%.
            //  The probability of being the last class is 0.394428%.
        }

        // This class is used in Example() to describe data points which will be
        // consumed by ML.NET pipeline.
        private class ImageDataPoint
        {
            // Height of Image.
            private const int height = 224;

            // Width of Image.
            private const int width = 224;

            // Image will be consumed by ONNX image multiclass classification model.
            [ImageType(height, width)]
            public MLImage Image { get; set; }

            // Expected output of ONNX model. It contains probabilities of all
            // classes. Note that the ColumnName below should match the output name
            // in the used ONNX model file.
            [ColumnName("softmaxout_1")]
            public float[] Scores { get; set; }

            public ImageDataPoint()
            {
                Image = null;
            }

            public ImageDataPoint(byte red, byte green, byte blue)
            {
                byte[] imageData = new byte[width * height * 4]; // 4 for the red, green, blue and alpha colors
                for (int i = 0; i < imageData.Length; i += 4)
                {
                    // Fill the buffer with the Bgra32 format
                    imageData[i] = blue;
                    imageData[i + 1] = green;
                    imageData[i + 2] = red;
                    imageData[i + 3] = 255;
                }

                Image = MLImage.CreateFromPixels(width, height, MLPixelFormat.Bgra32, imageData);
            }
        }
    }
}

설명

gpuDeviceId 값이면 값이 nullMLContext.GpuDeviceId 사용되지 않으면 null사용됩니다.

적용 대상

ApplyOnnxModel(TransformsCatalog, String[], String[], String, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the inputColumnNames columns. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, string[] outputColumnNames, string[] inputColumnNames, string modelFile, int? gpuDeviceId = default, bool fallbackToCpu = false);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * string[] * string[] * string * Nullable<int> * bool -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, outputColumnNames As String(), inputColumnNames As String(), modelFile As String, Optional gpuDeviceId As Nullable(Of Integer) = Nothing, Optional fallbackToCpu As Boolean = false) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

outputColumnNames
String[]

변환에서 생성된 출력 열입니다.

inputColumnNames
String[]

입력 열입니다.

modelFile
String

ONNX 모델을 포함하는 파일의 경로입니다.

gpuDeviceId
Nullable<Int32>

CPU에서 null 실행하기 위해 실행을 실행할 선택적 GPU 디바이스 ID입니다.

fallbackToCpu
Boolean

GPU 오류가 발생하는 경우 예외를 발생하거나 CPU로 대체합니다.

반환

설명

gpuDeviceId 값이면 값이 nullMLContext.GpuDeviceId 사용되지 않으면 null사용됩니다.

적용 대상

ApplyOnnxModel(TransformsCatalog, String, String, String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean)

OnnxScoringEstimator- 미리 학습된 Onnx 모델을 열에 적용합니다inputColumnName. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, string outputColumnName, string inputColumnName, string modelFile, System.Collections.Generic.IDictionary<string,int[]> shapeDictionary, int? gpuDeviceId = default, bool fallbackToCpu = false);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * string * string * string * System.Collections.Generic.IDictionary<string, int[]> * Nullable<int> * bool -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, outputColumnName As String, inputColumnName As String, modelFile As String, shapeDictionary As IDictionary(Of String, Integer()), Optional gpuDeviceId As Nullable(Of Integer) = Nothing, Optional fallbackToCpu As Boolean = false) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

outputColumnName
String

변환에서 생성된 출력 열입니다.

inputColumnName
String

입력 열입니다.

modelFile
String

ONNX 모델을 포함하는 파일의 경로입니다.

shapeDictionary
IDictionary<String,Int32[]>

에서 로드된 modelFile셰이프보다 사용할 ONNX 셰이프입니다. 키의 경우 ONNX 모델에 명시된 대로 이름(예: "input")을 사용합니다. 이 매개 변수를 사용하여 셰이프를 나타내는 것은 가변 차원 입력 및 출력을 사용하는 데 특히 유용합니다.

gpuDeviceId
Nullable<Int32>

CPU에서 null 실행하기 위해 실행을 실행할 선택적 GPU 디바이스 ID입니다.

fallbackToCpu
Boolean

GPU 오류가 발생하는 경우 예외를 발생하거나 CPU로 대체합니다.

반환

예제

using System;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Transforms.Image;

namespace Samples.Dynamic
{
    public static class ApplyOnnxModelWithInMemoryImages
    {
        // Example of applying ONNX transform on in-memory images.
        public static void Example()
        {
            // Download the squeeznet image model from ONNX model zoo, version 1.2
            // https://github.com/onnx/models/tree/master/vision/classification/squeezenet or use
            // Microsoft.ML.Onnx.TestModels nuget.
            // It's a multiclass classifier. It consumes an input "data_0" and
            // produces an output "softmaxout_1".
            var modelPath = @"squeezenet\00000001\model.onnx";

            // Create ML pipeline to score the data using OnnxScoringEstimator
            var mlContext = new MLContext();

            // Create in-memory data points. Its Image/Scores field is the
            // input /output of the used ONNX model.
            var dataPoints = new ImageDataPoint[]
            {
                new ImageDataPoint(red: 255, green: 0, blue: 0), // Red color
                new ImageDataPoint(red: 0, green: 128, blue: 0)  // Green color
            };

            // Convert training data to IDataView, the general data type used in
            // ML.NET.
            var dataView = mlContext.Data.LoadFromEnumerable(dataPoints);

            // Create a ML.NET pipeline which contains two steps. First,
            // ExtractPixle is used to convert the 224x224 image to a 3x224x224
            // float tensor. Then the float tensor is fed into a ONNX model with an
            // input called "data_0" and an output called "softmaxout_1". Note that
            // "data_0" and "softmaxout_1" are model input and output names stored
            // in the used ONNX model file. Users may need to inspect their own
            // models to get the right input and output column names.
            // Map column "Image" to column "data_0"
            // Map column "data_0" to column "softmaxout_1"
            var pipeline = mlContext.Transforms.ExtractPixels("data_0", "Image")
                .Append(mlContext.Transforms.ApplyOnnxModel("softmaxout_1",
                "data_0", modelPath));

            var model = pipeline.Fit(dataView);
            var onnx = model.Transform(dataView);

            // Convert IDataView back to IEnumerable<ImageDataPoint> so that user
            // can inspect the output, column "softmaxout_1", of the ONNX transform.
            // Note that Column "softmaxout_1" would be stored in ImageDataPont
            //.Scores because the added attributed [ColumnName("softmaxout_1")]
            // tells that ImageDataPont.Scores is equivalent to column
            // "softmaxout_1".
            var transformedDataPoints = mlContext.Data.CreateEnumerable<
                ImageDataPoint>(onnx, false).ToList();

            // The scores are probabilities of all possible classes, so they should
            // all be positive.
            foreach (var dataPoint in transformedDataPoints)
            {
                var firstClassProb = dataPoint.Scores.First();
                var lastClassProb = dataPoint.Scores.Last();
                Console.WriteLine("The probability of being the first class is " +
                    (firstClassProb * 100) + "%.");

                Console.WriteLine($"The probability of being the last class is " +
                    (lastClassProb * 100) + "%.");
            }

            // Expected output:
            //  The probability of being the first class is 0.002542659%.
            //  The probability of being the last class is 0.0292684%.
            //  The probability of being the first class is 0.02258059%.
            //  The probability of being the last class is 0.394428%.
        }

        // This class is used in Example() to describe data points which will be
        // consumed by ML.NET pipeline.
        private class ImageDataPoint
        {
            // Height of Image.
            private const int height = 224;

            // Width of Image.
            private const int width = 224;

            // Image will be consumed by ONNX image multiclass classification model.
            [ImageType(height, width)]
            public MLImage Image { get; set; }

            // Expected output of ONNX model. It contains probabilities of all
            // classes. Note that the ColumnName below should match the output name
            // in the used ONNX model file.
            [ColumnName("softmaxout_1")]
            public float[] Scores { get; set; }

            public ImageDataPoint()
            {
                Image = null;
            }

            public ImageDataPoint(byte red, byte green, byte blue)
            {
                byte[] imageData = new byte[width * height * 4]; // 4 for the red, green, blue and alpha colors
                for (int i = 0; i < imageData.Length; i += 4)
                {
                    // Fill the buffer with the Bgra32 format
                    imageData[i] = blue;
                    imageData[i + 1] = green;
                    imageData[i + 2] = red;
                    imageData[i + 3] = 255;
                }

                Image = MLImage.CreateFromPixels(width, height, MLPixelFormat.Bgra32, imageData);
            }
        }
    }
}

설명

gpuDeviceId 값이면 값이 nullMLContext.GpuDeviceId 사용되지 않으면 null사용됩니다.

적용 대상

ApplyOnnxModel(TransformsCatalog, String[], String[], String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the inputColumnNames columns. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, string[] outputColumnNames, string[] inputColumnNames, string modelFile, System.Collections.Generic.IDictionary<string,int[]> shapeDictionary, int? gpuDeviceId = default, bool fallbackToCpu = false);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * string[] * string[] * string * System.Collections.Generic.IDictionary<string, int[]> * Nullable<int> * bool -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, outputColumnNames As String(), inputColumnNames As String(), modelFile As String, shapeDictionary As IDictionary(Of String, Integer()), Optional gpuDeviceId As Nullable(Of Integer) = Nothing, Optional fallbackToCpu As Boolean = false) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

outputColumnNames
String[]

변환에서 생성된 출력 열입니다.

inputColumnNames
String[]

입력 열입니다.

modelFile
String

ONNX 모델을 포함하는 파일의 경로입니다.

shapeDictionary
IDictionary<String,Int32[]>

에서 로드된 modelFile셰이프보다 사용할 ONNX 셰이프입니다. 키의 경우 ONNX 모델에 명시된 대로 이름(예: "input")을 사용합니다. 이 매개 변수를 사용하여 셰이프를 나타내는 것은 가변 차원 입력 및 출력을 사용하는 데 특히 유용합니다.

gpuDeviceId
Nullable<Int32>

CPU에서 null 실행하기 위해 실행을 실행할 선택적 GPU 디바이스 ID입니다.

fallbackToCpu
Boolean

GPU 오류가 발생하는 경우 예외를 발생하거나 CPU로 대체합니다.

반환

설명

gpuDeviceId 값이면 값이 nullMLContext.GpuDeviceId 사용되지 않으면 null사용됩니다.

적용 대상

ApplyOnnxModel(TransformsCatalog, String[], String[], String, IDictionary<String,Int32[]>, Nullable<Int32>, Boolean, Int32)

Create a OnnxScoringEstimator, which applies a pre-trained Onnx model to the inputColumnNames columns. 필요한 종속성 및 GPU에서 실행하는 방법에 대해 자세히 알아보려면 참조 OnnxScoringEstimator 하세요.

public static Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator ApplyOnnxModel (this Microsoft.ML.TransformsCatalog catalog, string[] outputColumnNames, string[] inputColumnNames, string modelFile, System.Collections.Generic.IDictionary<string,int[]> shapeDictionary, int? gpuDeviceId = default, bool fallbackToCpu = false, int recursionLimit = 100);
static member ApplyOnnxModel : Microsoft.ML.TransformsCatalog * string[] * string[] * string * System.Collections.Generic.IDictionary<string, int[]> * Nullable<int> * bool * int -> Microsoft.ML.Transforms.Onnx.OnnxScoringEstimator
<Extension()>
Public Function ApplyOnnxModel (catalog As TransformsCatalog, outputColumnNames As String(), inputColumnNames As String(), modelFile As String, shapeDictionary As IDictionary(Of String, Integer()), Optional gpuDeviceId As Nullable(Of Integer) = Nothing, Optional fallbackToCpu As Boolean = false, Optional recursionLimit As Integer = 100) As OnnxScoringEstimator

매개 변수

catalog
TransformsCatalog

변환의 카탈로그입니다.

outputColumnNames
String[]

변환에서 생성된 출력 열입니다.

inputColumnNames
String[]

입력 열입니다.

modelFile
String

ONNX 모델을 포함하는 파일의 경로입니다.

shapeDictionary
IDictionary<String,Int32[]>

에서 로드된 modelFile셰이프보다 사용할 ONNX 셰이프입니다. 키의 경우 ONNX 모델에 명시된 대로 이름(예: "input")을 사용합니다. 이 매개 변수를 사용하여 셰이프를 나타내는 것은 가변 차원 입력 및 출력을 사용하는 데 특히 유용합니다.

gpuDeviceId
Nullable<Int32>

CPU에서 null 실행하기 위해 실행을 실행할 선택적 GPU 디바이스 ID입니다.

fallbackToCpu
Boolean

GPU 오류가 발생하는 경우 예외를 발생하거나 CPU로 대체합니다.

recursionLimit
Int32

선택 사항으로 Protobuf CodedInputStream 재귀 제한을 지정합니다. 기본값은 100입니다.

반환

설명

gpuDeviceId 값이면 값이 nullMLContext.GpuDeviceId 사용되지 않으면 null사용됩니다.

적용 대상