#c# #.net #object-detection #ml.net #onnx
Вопрос:
в настоящее время я пишу программу для использования обученных моделей ONNX для обнаружения объектов. Я хочу иметь возможность изменять модель (в идеале во время выполнения), поэтому я не знаю всех свойств моделей во время компиляции, но хочу сохранить их в одной (или, в идеале, в нескольких) Объекты, которые создаются(создаются) из текстового файла при запуске программы (MachineLearningModelObject). Но ML.net заставляет меня использовать константу для имени столбца или типа вектора, который я хотел бы установить во время выполнения.
public MachineLearningModelObject MachineLearningModelObject = new MachineLearningModelObject();
public void LoadModel()
{
MLContext mLContext = new MLContext();
var pipeline = mLContext.Transforms.ResizeImages(inputColumnName: MachineLearningModelObject.ImageInputColumnName, outputColumnName: MachineLearningModelObject.ImageOutputColumnName, imageWidth: MachineLearningModelObject.ImageWidth, imageHeight: MachineLearningModelObject.ImageHeight, resizing: Microsoft.ML.Transforms.Image.ImageResizingEstimator.ResizingKind.Fill)
.Append(mLContext.Transforms.ExtractPixels(outputColumnName: MachineLearningModelObject.ImageOutputColumnName, scaleImage: 1f / 255f, interleavePixelColors: false))
.Append(mLContext.Transforms.ApplyOnnxModel(
shapeDictionary: new Dictionary<string, int[]>()
{
{ MachineLearningModelObject.ModelInputColumnName, MachineLearningModelObject.ModelInputVector },
{ MachineLearningModelObject.ModelOutputColumnName, MachineLearningModelObject.ModelOutputVector}
},
inputColumnName: MachineLearningModelObject.ModelInputColumnName,
outputColumnName: MachineLearningModelObject.ModelOutputColumnName,
modelFile: MachineLearningModelObject.ModelName
));
var model = pipeline.Fit(mLContext.Data.LoadFromEnumerable(new List<MLImageObject>()));
var predictionEngine = mLContext.Model.CreatePredictionEngine<MLImageObject, MLObjectDetectionPrediction>(model);
}
class MLObjectDetectionPrediction
{
[VectorType(MLObjectDetectionPipeline.MachineLearningModelObject.ModelInputVector)] //Must be a const?
[ColumnName(MLObjectDetectionPipeline.MachineLearningModelObject.ModelInputColumnName)] // Must be a const?
public float[] Output { get; set; }
[ColumnName("width")]
public float ImageWidth { get; set; }
[ColumnName("height")]
public float ImageHeight { get; set; }
}
Если я использую const, все работает нормально. Но я не могу понять, как установить эти переменные во время выполнения. Любые подсказки или примеры для моего кода приветствуются.