Ejemplo n.º 1
0
        /// <summary>
        /// 学習開始
        /// </summary>
        /// <param name="batchSize"></param>
        /// <param name="epoch"></param>
        /// <param name="architecture"></param>
        /// <returns></returns>
        public Task Run(string batchSize, string epoch, string architecture)
        {
            var task = Task.Factory.StartNew(() =>
            {
                ImageClassificationTrainer.Architecture arch = GetArchitecture(architecture);
                var classifierOptions = new ImageClassificationTrainer.Options()
                {
                    FeatureColumnName = "Image",
                    LabelColumnName   = "LabelAsKey",
                    ValidationSet     = validationSet,
                    Arch            = arch,
                    MetricsCallback = (metrics) => LearningCallBack(metrics),
                    TestOnTrainSet  = false,
                    WorkspacePath   = workspaceRelativePath
                };

                var trainingPipeline = mlContext.MulticlassClassification.Trainers.ImageClassification(classifierOptions)
                                       .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

                ITransformer trainedModel = trainingPipeline.Fit(trainSet);
            });

            return(task);
        }
Ejemplo n.º 2
0
        public static IEstimator <ITransformer> BuildTrainingPipeline(MLContext mlContext, ImageClassificationTrainer.Architecture architecture)
        {
            // Data process configuration with pipeline data transformations
            var dataProcessPipeline = mlContext.Transforms.Conversion.MapValueToKey("Label", "Label")
                                      .Append(mlContext.Transforms.LoadRawImageBytes("ImageSourceTemp", null, "ImageSource"))
                                      .Append(mlContext.Transforms.CopyColumns("Features", "ImageSourceTemp"));
            // Set the training algorithm
            var trainer = mlContext.MulticlassClassification.Trainers.ImageClassification(
                new ImageClassificationTrainer.Options()
            {
                Arch              = architecture,
                LabelColumnName   = "Label",
                FeatureColumnName = "Features"
            }).Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel", "PredictedLabel"));

            var trainingPipeline = dataProcessPipeline.Append(trainer);

            return(trainingPipeline);
        }
Ejemplo n.º 3
0
        public static void CreateModel(string savePath, string modelName, IEnumerable <ModelInput> images, ImageClassificationTrainer.Architecture architecture)
        {
            // Load Data

            IDataView trainingDataView = mlContext.Data.LoadFromEnumerable(images);

            // Build training pipeline
            IEstimator <ITransformer> trainingPipeline = BuildTrainingPipeline(mlContext, architecture);

            // Train Model
            ITransformer mlModel = TrainModel(mlContext, trainingDataView, trainingPipeline);

            // Evaluate quality of Model
            Evaluate(mlContext, trainingDataView, trainingPipeline, savePath + $"\\{modelName}_log.txt");

            // Save model
            SaveModel(mlContext, mlModel, savePath + $"\\{modelName}.zip", trainingDataView.Schema);
        }
Ejemplo n.º 4
0
        private static ITransformer TrainModel(MLContext mlContext, IDataView dataView, string dataSetDir, ImageClassificationTrainer.Architecture architecture, int epochs, double testFraction)
        {
            IDataView shuffledData          = mlContext.Data.ShuffleRows(dataView);
            var       preprocessingPipeline = mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "Label",
                                                                                            outputColumnName: "LabelKey")
                                              .Append(mlContext.Transforms.LoadRawImageBytes(outputColumnName: "Img",
                                                                                             imageFolder: dataSetDir,
                                                                                             inputColumnName: "ImgPath"));    // > InputData.cs
            IDataView preProcData = preprocessingPipeline.Fit(shuffledData).Transform(shuffledData);

            DataOperationsCatalog.TrainTestData trainSplit          = mlContext.Data.TrainTestSplit(data: preProcData, testFraction: testFraction);
            DataOperationsCatalog.TrainTestData validationTestSplit = mlContext.Data.TrainTestSplit(trainSplit.TestSet);

            IDataView trainSet      = trainSplit.TrainSet;
            IDataView validationSet = validationTestSplit.TrainSet;
            IDataView testSet       = validationTestSplit.TestSet;

            var classifierOptions = new ImageClassificationTrainer.Options
            {
                FeatureColumnName = "Img",
                LabelColumnName   = "LabelKey",
                ValidationSet     = validationSet,
                Arch            = architecture,
                MetricsCallback = metrics => Console.WriteLine(metrics),
                TestOnTrainSet  = false,
                ReuseTrainSetBottleneckCachedValues      = true,
                ReuseValidationSetBottleneckCachedValues = true,
                Epoch = epochs,
            };

            var trainingPipeline = mlContext.MulticlassClassification.Trainers.ImageClassification(classifierOptions)
                                   .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

            return(trainingPipeline.Fit(trainSet));
        }
 public GpuSupportedModelRetrainStrategy(ImageClassificationTrainer.Architecture architecture, ILogger logger)
 {
     _architecture = architecture;
     _logger       = logger;
 }
Ejemplo n.º 6
0
    static (ITransformer mlModel, IReadOnlyList <TrainCatalogBase.CrossValidationResult <MulticlassClassificationMetrics> > evaluation) TrainModel(ImageClassificationTrainer.Architecture architecture, int epoch)
    {
        // To suppress errors from the TensorFlow library, set $env:TF_CPP_MIN_LOG_LEVEL = 2
        var inputs = new List <ModelInput>();

        foreach (var subDir in Directory.GetDirectories(inputDataDirectoryPath))
        {
            foreach (var file in Directory.GetFiles(subDir))
            {
                inputs.Add(new ModelInput()
                {
                    Label = subDir.Split("\\").Last(), ImageSource = file
                });
            }
        }
        var trainingDataView    = mlContext.Data.LoadFromEnumerable <ModelInput>(inputs);
        var dataProcessPipeline = mlContext.Transforms.Conversion.MapValueToKey("Label", "Label")
                                  .Append(mlContext.Transforms.LoadRawImageBytes("ImageSource_featurized", null, "ImageSource"))
                                  .Append(mlContext.Transforms.CopyColumns("Features", "ImageSource_featurized"));
        var trainer = mlContext.MulticlassClassification.Trainers.ImageClassification(
            new ImageClassificationTrainer.Options()
        {
            Arch              = architecture,
            Epoch             = epoch,
            FeatureColumnName = "Features",
            LabelColumnName   = "Label",
        })
                      .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel", "PredictedLabel"));
        IEstimator <ITransformer> trainingPipeline = dataProcessPipeline.Append(trainer);
        var mlModel    = trainingPipeline.Fit(trainingDataView);
        var evaluation = mlContext.MulticlassClassification.CrossValidate(trainingDataView, trainingPipeline, numberOfFolds: 5, labelColumnName: "Label");

        return(mlModel, evaluation);
    }