Почему для ML. Net требуются файлы .tsv для классификации изображений, когда обучение работает с изображениями .png - PullRequest
0 голосов
/ 20 апреля 2020

Поэтому я использовал ML. NET ModelBuilder для обучения нейронной сети, чтобы классифицировать набор изображений как «нормальный» и «ненормальный». Изображения изначально были сохранены в формате .png. Обучение работает просто отлично, но после генерации кода я обнаружил нечто совершенно неожиданное.

По умолчанию сгенерированный сегмент кода, который используется для прогнозирования класса изображений, содержит следующую строку:

private const string DATA_FILEPATH = @"C:\Users\Christian\AppData\Local\Temp\8d55cfe5-25d3-4c16-bc7e-185ea11f936c.tsv"

Полная программа выглядит следующим образом

// This file was auto-generated by ML.NET Model Builder. 

using System;
using System.IO;
using System.Linq;
using Microsoft.ML;
using NormalAbnormalBearML.Model;

namespace NormalAbnormalBearML.ConsoleApp
{
    class Program
{
    //Dataset to use for predictions 
    private const string DATA_FILEPATH = @"C:\Users\Christian\AppData\Local\Temp\8d55cfe5-25d3-4c16-bc7e-185ea11f936c.tsv";

    static void Main(string[] args)
    {
        // Create single instance of sample data from first line of dataset for model input
        ModelInput sampleData = CreateSingleDataSample(DATA_FILEPATH);

        // Make a single prediction on the sample data and print results
        var predictionResult = ConsumeModel.Predict(sampleData);

        Console.WriteLine("Using model to make single prediction -- Comparing actual Label with predicted Label from sample data...\n\n");
        Console.WriteLine($"ImageSource: {sampleData.ImageSource}");
        Console.WriteLine($"\n\nActual Label: {sampleData.Label} \nPredicted Label value {predictionResult.Prediction} \nPredicted Label scores: [{String.Join(",", predictionResult.Score)}]\n\n");
        Console.WriteLine("=============== End of process, hit any key to finish ===============");
        Console.ReadKey();
    }

    // Change this code to create your own sample data
    #region CreateSingleDataSample
    // Method to load single row of dataset to try a single prediction
    private static ModelInput CreateSingleDataSample(string dataFilePath)
    {
        // Create MLContext
        MLContext mlContext = new MLContext();

        // Load dataset
        IDataView dataView = mlContext.Data.LoadFromTextFile<ModelInput>(
                                        path: dataFilePath,
                                        hasHeader: true,
                                        separatorChar: '\t',
                                        allowQuoting: true,
                                        allowSparse: false);

        // Use first line of dataset as model input
        // You can replace this with new test data (hardcoded or from end-user application)
        ModelInput sampleForPrediction = mlContext.Data.CreateEnumerable<ModelInput>(dataView, false)
                                                                    .First();
        return sampleForPrediction;
    }
    #endregion
}

Теперь, когда я запускаю эту программу, она берет реальный образ из тех, которые я предоставил для обучения, и классифицирует его. Однако я понятия не имею, как был создан DATA_FILEPATH. Почему это относится к пути .tsv, поскольку изображения изначально в формате .png. Что еще более странно, когда я заменяю путь DATA_FILEPATH некоторым путем к одному из исходных изображений .png, я получаю следующий ответ:

ml.net Expected image (JPEG, PNG, or GIF), got empty file

Поиск по Inte rnet Я нашел несколько статей о ML. net, который также говорит о файлах .tsv. Тем не менее, они никогда не объясняют причину использования этого типа формата. Также имейте в виду, что для обучения модели достаточно предоставить ей пути к папкам, содержащим изображения .png, так почему же она не работает таким образом в сгенерированном коде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...