Aracılığıyla paylaş


Öğretici: ML.NET Görüntü Sınıflandırma API'si ile aktarım öğrenmesi kullanarak otomatik görsel inceleme

Aktarım öğrenmesi, önceden eğitilmiş bir TensorFlow modeli ve beton yüzeylerin görüntülerini çatlak veya çatlaksız olarak sınıflandırmak için ML.NET Görüntü Sınıflandırma API'sini kullanarak özel bir derin öğrenme modelini eğitmeyi öğrenin.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Sorunu anlama
  • ML.NET Görüntü Sınıflandırma API'si hakkında bilgi edinin
  • Önceden eğitilmiş modeli anlama
  • Özel TensorFlow görüntü sınıflandırma modelini eğitmek için aktarım öğrenmesini kullanma
  • Özel modelle görüntüleri sınıflandırma

Önkoşullar

Sorunu anlama

Görüntü sınıflandırması bir görüntü işleme sorunudur. Görüntü sınıflandırması bir görüntüyü giriş olarak alır ve bunu belirlenmiş bir sınıfa kategorilere ayırır. Görüntü sınıflandırma modelleri genellikle derin öğrenme ve sinir ağları kullanılarak eğitilir. Daha fazla bilgi için bkz . Derin öğrenme ve makine öğrenmesi.

Görüntü sınıflandırmanın yararlı olduğu bazı senaryolar şunlardır:

  • Yüz tanıma
  • Duygu algılama
  • Tıbbi tanı
  • Yer işareti algılama

Bu öğreticide, çatlaklardan zarar gören yapıları belirlemek için köprü kaplamalarında otomatik görsel inceleme yapmak amacıyla özel bir görüntü sınıflandırma modeli eğitilir.

ML.NET Görüntü Sınıflandırma API'si

ML.NET, görüntü sınıflandırması gerçekleştirmenin çeşitli yollarını sağlar. Bu öğretici, Görüntü Sınıflandırma API'sini kullanarak öğrenme aktarımını uygular. Görüntü Sınıflandırma API'si , TensorFlow C++ API'si için C# bağlamaları sağlayan düşük düzeyli bir kitaplık olan TensorFlow.NET kullanır.

Öğrenme aktarımı nedir?

Öğrenme aktarımı, bir sorunun çözümünden elde edilen bilgileri ilgili başka bir soruna uygular.

Derin öğrenme modelini sıfırdan eğitme, çeşitli parametreler, büyük miktarda etiketlenmiş eğitim verileri ve çok miktarda işlem kaynağı (yüzlerce GPU saati) ayarlamayı gerektirir. Aktarım öğrenmesi ile birlikte önceden eğitilmiş bir model kullanmak, eğitim sürecine kısayol oluşturmanıza olanak tanır.

Eğitim süreci

Görüntü Sınıflandırma API'si, önceden eğitilmiş bir TensorFlow modeli yükleyerek eğitim sürecini başlatır. Eğitim süreci iki adımdan oluşur:

  1. Performans sorunu evresi.
  2. Eğitim aşaması.

Eğitim Adımları

Performans sorunu aşaması

Performans sorunu aşamasında eğitim görüntüleri kümesi yüklenir ve piksel değerleri önceden eğitilen modelin dondurulmuş katmanları için giriş veya özellik olarak kullanılır. Donmuş katmanlar, sinir ağındaki tüm katmanları, resmi olmayan bir şekilde performans sorunu katmanı olarak bilinen, en son katmana kadar içerir. Bu katmanlarda eğitim gerçekleşmeyeceği ve işlemlerin doğrudan gerçekleştirildiği için bu katmanlar donduruldu olarak adlandırılır. Modelin farklı sınıflar arasında ayrım gerçekleştirmesine yardımcı olan alt düzey desenlerin hesaplandığı bu donmuş katmanlarda bulunur. Katman sayısı ne kadar fazlaysa, bu adım o kadar yoğun işlem gücü kullanır. Neyse ki, bu tek seferlik bir hesaplama olduğundan sonuçlar önbelleğe alınıp farklı parametrelerle denemeler yapılırken sonraki çalıştırmalarda kullanılabilir.

Eğitim aşaması

Darboğaz aşamasındaki çıkış değerleri hesaplandıktan sonra, modelin son katmanını yeniden eğitmek için giriş olarak kullanılır. Bu işlem yinelenir ve model parametreleri tarafından belirtilen sayıda çalıştırılır. Her çalıştırma sırasında kayıp oranı ve doğruluk değerlendirilir. Ardından, kaybı en aza indirmek ve doğruluğu en üst düzeye çıkarmak amacıyla modeli geliştirmek için uygun ayarlamalar yapılır. Eğitim tamamlandıktan sonra iki model biçimi çıkışlanır. Bunlardan biri modelin .pb sürümü, diğeri de modelin .zip serileştirilmiş ML.NET sürümüdür. ML.NET tarafından desteklenen ortamlarda çalışırken modelin .zip sürümünün kullanılması önerilir. Ancak, ML.NET desteklenmeyen ortamlarda sürümü kullanma .pb seçeneğiniz vardır.

Önceden eğitilmiş modeli anlama

Bu öğreticide kullanılan önceden eğitilmiş model, Artık Ağ (ResNet) v2 modelinin 101 katmanlı değişkenidir. Özgün model, görüntüleri bin kategoriye ayıracak şekilde eğitilir. Model giriş olarak 224 x 224 boyutunda bir görüntü alır ve eğitilen sınıfların her biri için sınıf olasılıklarını verir. Bu modelin bir bölümü, iki sınıf arasında tahmin yapmak üzere özel görüntüler kullanarak yeni bir model eğitmek için kullanılır.

Konsol uygulaması oluşturma

Artık öğrenme aktarımı ve Görüntü Sınıflandırma API'sini genel olarak kavradığınıza göre uygulamayı derlemenin zamanı geldi.

  1. "DeepLearning_ImageClassification_Binary" adlı bir C# Konsol Uygulaması oluşturun. İleri düğmesine tıklayın.

  2. Kullanılacak çerçeve olarak .NET 8'i ve ardından Oluştur'u seçin.

  3. Microsoft.ML NuGet Paketini yükleyin:

    Uyarı

    Bu örnek, aksi belirtilmedikçe bahsedilen NuGet paketlerinin en son kararlı sürümünü kullanır.

    1. Çözüm Gezgini'nde projenize sağ tıklayın ve NuGet Paketlerini Yönetseçin.
    2. Paket kaynağı olarak "nuget.org" seçeneğini belirleyin.
    3. Gözat sekmesini seçin.
    4. Ön sürümü dahil et onay kutusunu işaretleyin.
    5. Microsoft.ML arayın.
    6. Yükle düğmesini seçin.
    7. Listelenen paketlerin lisans koşullarını kabul ediyorsanız Lisans Kabulü iletişim kutusunda Kabul Ediyorum düğmesini seçin.
    8. Microsoft.ML.Vision, SciSharp.TensorFlow.Redist (sürüm 2.3.1) ve Microsoft.ML.ImageAnalytics NuGet paketleri için bu adımları yineleyin.

Verileri hazırlama ve anlama

Uyarı

Bu öğretici için kullanılan veri kümeleri, Maguire, Marc; Dorafshan, Sattar; ve Thomas, Robert J. tarafından hazırlanan "SDNET2018: Makine öğrenmesi uygulamaları için beton çatlak görüntü veri kümesi" (2018) çalışmasından alınmıştır. Tüm Veri Kümelerine göz atın. Kağıt 48. https://digitalcommons.usu.edu/all_datasets/48

SDNET2018, çatlak ve çatlamamış beton yapılar (köprü desteleri, duvarlar ve kaldırımlar) için ek açıklamalar içeren bir görüntü veri kümesidir.

SDNET2018 veri kümesi köprü destesi örnekleri

Veriler üç alt dizinde düzenlenir:

  • D, köprü destesi görüntüleri içerir
  • P, kaldırım görüntüleri içerir
  • W duvar görüntüleri içerir

Bu alt dizinlerin her biri iki ek ön ekli alt dizin içerir:

  • C, çatlak yüzeyler için kullanılan ön ektir
  • U, kaplanmamış yüzeyler için kullanılan ön ektir

Bu öğreticide yalnızca köprü destesi görüntüleri kullanılır.

  1. Veri kümesini indirin ve sıkıştırmasını açın.
  2. Veri kümesi dosyalarınızı kaydetmek için projenizde "Varlıklar" adlı bir dizin oluşturun.
  3. Cd ve UD alt dizinlerini yakın zamanda sıkıştırması açılmış dizinden Assets dizinine kopyalayın.

Giriş ve çıkış sınıfları oluşturma

  1. Program.cs dosyasını açın ve mevcut içeriği aşağıdaki using yönergelerle değiştirin:

    using Microsoft.ML;
    using Microsoft.ML.Vision;
    using static Microsoft.ML.DataOperationsCatalog;
    
  2. adlı ImageDatabir sınıf oluşturun. Bu sınıf, ilk yüklenen verileri temsil etmek için kullanılır.

    class ImageData
    {
        public string? ImagePath { get; set; }
        public string? Label { get; set; }
    }
    

    ImageData aşağıdaki özellikleri içerir:

    • ImagePath görüntünün depolandığı tam nitelikli yoldur.
    • Label , görüntünün ait olduğu kategoridir. Bu, tahmin etmek için gereken değerdir.
  3. Giriş ve çıkış verileriniz için sınıflar oluşturun.

    1. sınıfının altında ImageData , adlı ModelInputyeni bir sınıfta giriş verilerinizin şemasını tanımlayın.

      class ModelInput
      {
          public byte[]? Image { get; set; }
          public uint LabelAsKey { get; set; }
          public string? ImagePath { get; set; }
          public string? Label { get; set; }
      }
      

      ModelInput aşağıdaki özellikleri içerir:

      • Image byte[] görüntünün gösterimidir. Model, eğitim için görüntü verilerinin bu türde olmasını bekler.
      • LabelAsKey , sayısal gösterimidir Label.
      • ImagePath , görüntünün depolandığı tam yoldur.
      • Label , görüntünün ait olduğu kategoridir. Bu, tahmin etmek için gereken değerdir.

      Yalnızca Image ve LabelAsKey modeli eğitmek ve tahminlerde bulunmak için kullanılır. ImagePath özgün görüntü dosyası adına ve kategorisine erişmek için ve Label özellikleri kolaylık sağlamak için tutulur.

    2. Ardından sınıfının altında ModelInput çıkış verilerinizin şemasını adlı ModelOutputyeni bir sınıfta tanımlayın.

      class ModelOutput
      {
          public string? ImagePath { get; set; }
          public string? Label { get; set; }
          public string? PredictedLabel { get; set; }
      }
      

      ModelOutput aşağıdaki özellikleri içerir:

      • ImagePath , görüntünün depolandığı tam yoldur.
      • Label görüntünün ait olduğu özgün kategoridir. Bu, tahmin etmek için gereken değerdir.
      • PredictedLabel model tarafından tahmin edilen değerdir.

      benzer şekilde ModelInput, model tarafından yapılan tahmini içerdiğinden yalnızca PredictedLabel tahmin yapmak için gereklidir. ImagePath özgün görüntü dosyası adına ve kategorisine erişmek için ve Label özellikleri kolaylık sağlamak için korunur.

Yolları tanımlama ve değişkenleri başlatma

  1. Yönergelerin using altında aşağıdaki kodu ekleyin:

    • Varlıkların konumunu tanımlayın.

    • mlContext Değişkeni mlContext'in yeni bir örneğiyle başlatın.

      MLContext sınıfı tüm ML.NET işlemleri için bir başlangıç noktasıdır ve mlContext'i başlatmak, model oluşturma iş akışı nesneleri arasında paylaşılabilen yeni bir ML.NET ortamı oluşturur. Entity Framework'tekine DbContext benzer, kavramsal olarak.

    var projectDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "../../../"));
    var assetsRelativePath = Path.Combine(projectDirectory, "Assets");
    
    MLContext mlContext = new();
    

Verileri yükleme

Veri yükleme yardımcı programı oluşturma yöntemi

Görüntüler iki alt dizinde depolanır. Verileri yüklemeden önce, bir nesne listesine ImageData biçimlendirilmesi gerekir. Bunu yapmak için yöntemini oluşturun LoadImagesFromDirectory :

static IEnumerable<ImageData> LoadImagesFromDirectory(string folder, bool useFolderNameAsLabel = true)
{
    var files = Directory.GetFiles(folder, "*",
        searchOption: SearchOption.AllDirectories);

    foreach (var file in files)
    {
        if ((Path.GetExtension(file) != ".jpg") && (Path.GetExtension(file) != ".png"))
            continue;

        var label = Path.GetFileName(file);

        if (useFolderNameAsLabel)
            label = Directory.GetParent(file)?.Name;
        else
        {
            for (int index = 0; index < label.Length; index++)
            {
                if (!char.IsLetter(label[index]))
                {
                    label = label[..index];
                    break;
                }
            }
        }

        yield return new ImageData()
        {
            ImagePath = file,
            Label = label
        };
    }
}

LoadImagesFromDirectory yöntemi:

  • Alt dizinlerden tüm dosya yollarını alır.
  • Bir foreach deyimi kullanarak dosyaların her birinde döngü yapar ve dosya uzantılarının desteklenip desteklenmediğini kontrol eder. Görüntü Sınıflandırma API'si JPEG ve PNG biçimlerini destekler.
  • Dosyanın etiketini alır. useFolderNameAsLabel parametresi olarak ayarlanırsatrue, etiket olarak dosyanın kaydedildiği üst dizin kullanılır. Aksi takdirde, etiketin dosya adının veya dosya adının kendisinin bir ön eki olmasını bekler.
  • öğesinin yeni bir örneğini ModelInputoluşturur.

Verileri hazırlama

Yeni örneğini MLContextoluşturduğunuz satırın arkasına aşağıdaki kodu ekleyin.

IEnumerable<ImageData> images = LoadImagesFromDirectory(folder: assetsRelativePath, useFolderNameAsLabel: true);

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

IDataView shuffledData = mlContext.Data.ShuffleRows(imageData);

var preprocessingPipeline = mlContext.Transforms.Conversion.MapValueToKey(
        inputColumnName: "Label",
        outputColumnName: "LabelAsKey")
    .Append(mlContext.Transforms.LoadRawImageBytes(
        outputColumnName: "Image",
        imageFolder: assetsRelativePath,
        inputColumnName: "ImagePath"));

IDataView preProcessedData = preprocessingPipeline
                    .Fit(shuffledData)
                    .Transform(shuffledData);

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

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

Önceki kod:

  • mlContext değişkenini başlattıktan sonra eğitim için kullanılan görüntülerin listesini almak için LoadImagesFromDirectory yardımcı yöntemini çağırır.

  • yöntemini kullanarak IDataView görüntüleri içine LoadFromEnumerable yükler.

  • yöntemini kullanarak verileri karıştırıyor ShuffleRows . Veriler dizinlerden okunma sırasına göre yüklenir. Karıştırma, dengelemek için gerçekleştirilir.

  • Eğitimden önce veriler üzerinde bazı ön işlemler gerçekleştirir. Bunun nedeni makine öğrenmesi modellerinin girişin sayısal biçimde olmasını beklemesidir. Ön işleme kodu, ve EstimatorChain dönüşümlerinden MapValueToKey oluşan bir LoadRawImageBytes oluşturur. Dönüşüm, MapValueToKey sütundaki Label kategorik değeri alır, sayısal KeyType bir değere dönüştürür ve adlı LabelAsKeyyeni bir sütunda depolar. LoadImages, ImagePath sütunundaki değerleri ve imageFolder parametresini alarak eğitim için görüntüleri yükler.

  • Fit yöntemini kullanarak, önceden işlenmiş verileri içeren bir preprocessingPipeline veri döndüren ve ardından yöntemine EstimatorChain verileri TransformIDataView uygular.

  • Verileri eğitim, doğrulama ve test kümelerine böler.

    Modeli eğitmek için hem eğitim veri kümesine hem de doğrulama veri kümesine sahip olmak önemlidir. Model, eğitim kümesinde eğitilir. Görünmeyen veriler üzerinde ne kadar iyi tahminler yaptığı, doğrulama kümesine göre performansla ölçülür. Bu performansın sonuçlarına bağlı olarak model, geliştirme çabası içinde öğrendiklerinde ayarlamalar yapar. Doğrulama kümesi, özgün veri kümenizi bölme veya bu amaçla ayrılmış başka bir kaynaktan gelebilir.

    Kod örneği iki bölme gerçekleştirir. İlk olarak, önceden işlenmiş veriler bölünür ve eğitim için 70% kullanılırken, kalan 30% doğrulama için kullanılır. Ardından, 30% doğrulama kümesi doğrulama ve test kümelerine bölünür ve burada doğrulama için 90% ve test için 10% kullanılır.

    Bu veri bölümlerinin amacını düşünmenin bir yolu sınav yapmaktır. Sınava çalışırken, sınavdaki kavramları anlamak için notlarınızı, kitaplarınızı veya diğer kaynaklarınızı gözden geçirirsiniz. Tren seti bunun için. Ardından, bilginizi doğrulamak için sahte bir sınava girişebilirsiniz. Doğrulama kümesinin kullanışlı olduğu yer burasıdır. Gerçek sınava girmeden önce kavramları iyi kavrayıp kavrayamayacağınızı kontrol etmek istiyorsunuz. Bu sonuçlara bağlı olarak, hatalı yaptıklarınızı veya iyi anlamadıklarınızı not alır ve gerçek sınav için gözden geçirirken değişikliklerinizi uygularsınız. Sonunda sınava girdin. Test kümesi bunun için kullanılır. Sınavda olan soruları hiç görmediniz ve şimdi eğitim ve doğrulamadan öğrendiklerinizi eldeki göreve uygulamak için kullanıyorsunuz.

  • Bölümlere eğitim, doğrulama ve test verileri için ilgili değerlerini atar.

Eğitim işlem hattını tanımlama

Model eğitimi iki adımdan oluşur. İlk olarak, modeli eğitmek için Görüntü Sınıflandırma API'si kullanılır. Ardından, PredictedLabel sütunundaki kodlanmış etiketler, MapKeyToValue dönüştürme kullanılarak orijinal kategorik değerlerine geri dönüştürülür.

var classifierOptions = new ImageClassificationTrainer.Options()
{
    FeatureColumnName = "Image",
    LabelColumnName = "LabelAsKey",
    ValidationSet = validationSet,
    Arch = ImageClassificationTrainer.Architecture.ResnetV2101,
    MetricsCallback = (metrics) => Console.WriteLine(metrics),
    TestOnTrainSet = false,
    ReuseTrainSetBottleneckCachedValues = true,
    ReuseValidationSetBottleneckCachedValues = true
};

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

ITransformer trainedModel = trainingPipeline.Fit(trainSet);

Önceki kod:

  • bir için gerekli ve isteğe bağlı parametreler kümesini depolamak için yeni bir ImageClassificationTrainerdeğişken oluşturur. birkaç ImageClassificationTrainer isteğe bağlı parametre alır:

    • FeatureColumnName , model için giriş olarak kullanılan sütundur.
    • LabelColumnName değerin tahmin edileceği sütundur.
    • ValidationSet IDataView, doğrulama verilerini içerendir.
    • Arch , önceden eğitilmiş model mimarilerinden hangisinin kullanılacağını tanımlar. Bu öğreticide ResNetv2 modelinin 101 katmanlı değişkeni kullanılır.
    • MetricsCallback eğitim sırasında ilerleme durumunu izlemek için bir işlev bağlar.
    • TestOnTrainSet modele, doğrulama kümesi olmadığında eğitim kümesine göre performansı ölçmesini söyler.
    • ReuseTrainSetBottleneckCachedValues modele sonraki çalıştırmalarda performans sorunu aşamasından önbelleğe alınmış değerlerin kullanılıp kullanılmayacağını bildirir. Performans sorunu aşaması, ilk kez gerçekleştirildiğinde hesaplama açısından yoğun olan tek seferlik bir geçişli hesaplamadır. Eğitim verileri değişmezse ve farklı sayıda dönem veya toplu iş boyutu kullanarak denemeler yapmak istiyorsanız, önbelleğe alınan değerlerin kullanılması modeli eğitmek için gereken süreyi önemli ölçüde azaltır.
    • ReuseValidationSetBottleneckCachedValues yalnızca bu durumda doğrulama veri kümesine benzer ReuseTrainSetBottleneckCachedValues .
  • EstimatorChain hem hem mapLabelEstimatorde ImageClassificationTrainer öğesinden oluşan eğitim işlem hattını tanımlar.

  • Fit Modeli eğitmek için yöntemini kullanır.

Modeli kullanma

Artık modeli eğitdiğinize göre, görüntüleri sınıflandırmak için bu modeli kullanmanın zamanı geldi.

Konsolda tahmin bilgilerini görüntülemek için adlı OutputPrediction yeni bir yardımcı program yöntemi oluşturun.

static void OutputPrediction(ModelOutput prediction)
{
    string? imageName = Path.GetFileName(prediction.ImagePath);
    Console.WriteLine($"Image: {imageName} | Actual Value: {prediction.Label} | Predicted Value: {prediction.PredictedLabel}");
}

Tek bir görüntüyü sınıflandırma

  1. Tek bir görüntü tahmini yapmak ve çıktısını almak için adlı ClassifySingleImage bir yöntem oluşturun.

    static void ClassifySingleImage(MLContext mlContext, IDataView data, ITransformer trainedModel)
    {
        PredictionEngine<ModelInput, ModelOutput> predictionEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(trainedModel);
    
        ModelInput image = mlContext.Data.CreateEnumerable<ModelInput>(data, reuseRowObject: true).First();
    
        ModelOutput prediction = predictionEngine.Predict(image);
    
        Console.WriteLine("Classifying single image");
        OutputPrediction(prediction);
    }
    

    ClassifySingleImage yöntemi:

    • yönteminin PredictionEngine içinde bir ClassifySingleImage oluşturur. , PredictionEngine tek bir veri örneğinde geçiş yapmanızı ve ardından tahmin gerçekleştirmenizi sağlayan kullanışlı bir API'dir.
    • Tek ModelInput bir örneğe erişmek için yöntemini kullanarak data öğesini IDataViewIEnumerable öğesine CreateEnumerable dönüştürür ve ardından ilk gözlemi alır.
    • Predict Görüntüyü sınıflandırmak için yöntemini kullanır.
    • yöntemiyle konsola tahminin çıkışını alır OutputPrediction .
  2. Test görüntü kümesini kullanarak Fit yöntemini çağırdıktan sonra ClassifySingleImage çağırın.

    ClassifySingleImage(mlContext, testSet, trainedModel);
    

Birden çok görüntüyü sınıflandırma

  1. Birden çok görüntü tahmini yapmak ve çıktısını almak için adlı ClassifyImages bir yöntem oluşturun.

    static void ClassifyImages(MLContext mlContext, IDataView data, ITransformer trainedModel)
    {
        IDataView predictionData = trainedModel.Transform(data);
    
        IEnumerable<ModelOutput> predictions = mlContext.Data.CreateEnumerable<ModelOutput>(predictionData, reuseRowObject: true).Take(10);
    
        Console.WriteLine("Classifying multiple images");
        foreach (var prediction in predictions)
        {
            OutputPrediction(prediction);
        }
    }
    

    ClassifyImages yöntemi:

    • yöntemini kullanarak IDataView tahminleri içeren bir Transform oluşturur.
    • Tahminleri yinelemek için predictionData ve IDataView öğelerini CreateEnumerable yöntemi ile bir IEnumerable içerisine dönüştürür ve ardından ilk 10 gözlemi alır.
    • Tahminler için özgün ve tahmin edilen etiketleri yineleyerek çıktısını verir.
  2. Önce ClassifySingleImage() yöntemini görüntü test kümesini kullanarak çağırdıktan sonra ClassifyImages çağırın.

    ClassifyImages(mlContext, testSet, trainedModel);
    

Uygulamayı çalıştırma

Konsol uygulamanızı çalıştırın. Çıkış aşağıdaki çıkışa benzer olmalıdır.

Uyarı

Uyarılar veya işleme iletileri görebilirsiniz; bu iletiler netlik için aşağıdaki sonuçlardan çıkarılmıştır. Kısalık adına çıktı kısaltıldı.

Darboğaz aşaması

Görüntü adı için hiçbir değer yazdırılmaz çünkü görüntüler olarak yüklenir byte[] , bu nedenle görüntülenecek görüntü adı yoktur.

Phase: Bottleneck Computation, Dataset used:      Train, Image Index: 279
Phase: Bottleneck Computation, Dataset used:      Train, Image Index: 280
Phase: Bottleneck Computation, Dataset used: Validation, Image Index:   1
Phase: Bottleneck Computation, Dataset used: Validation, Image Index:   2

Eğitim aşaması

Phase: Training, Dataset used: Validation, Batch Processed Count:   6, Epoch:  21, Accuracy:  0.6797619
Phase: Training, Dataset used: Validation, Batch Processed Count:   6, Epoch:  22, Accuracy:  0.7642857
Phase: Training, Dataset used: Validation, Batch Processed Count:   6, Epoch:  23, Accuracy:  0.7916667

Görüntü sınıflandırma çıktısı

Classifying single image
Image: 7001-220.jpg | Actual Value: UD | Predicted Value: UD

Classifying multiple images
Image: 7001-220.jpg | Actual Value: UD | Predicted Value: UD
Image: 7001-163.jpg | Actual Value: UD | Predicted Value: UD
Image: 7001-210.jpg | Actual Value: UD | Predicted Value: UD

7001-220.jpg görüntüsü incelendikten sonra modelin tahmin edilen şekilde çatlamadığını doğrulayabilirsiniz.

Tahmin için kullanılan SDNET2018 veri kümesi görüntüsü

Tebrikler! Artık görüntüleri sınıflandırmak için başarıyla bir derin öğrenme modeli oluşturdunuz.

Modeli geliştirme

Modelin sonuçlarından memnun değilseniz, aşağıdaki yaklaşımlardan bazılarını deneyerek performansını iyileştirmeyi deneyebilirsiniz:

  • Daha Fazla Veri: Modelin öğrendiği örnekler ne kadar fazlaysa o kadar iyi performans gösterir. SDNET2018 veri kümesinin tamamını indirin ve eğitmek için kullanın.
  • Verileri artırma: Verilere çeşitlilik eklemenin yaygın bir tekniği, bir görüntü alıp farklı dönüşümler uygulayarak (döndürme, çevirme, kaydırma, kırpma) verileri büyütmektir. Bu, modelin öğrenmesi için daha çeşitli örnekler ekler.
  • Daha uzun süre eğitme: Ne kadar uzun süre eğiterseniz, model o kadar ayarlanmış olur. Dönem sayısını artırmak modelinizin performansını artırabilir.
  • Hiper parametrelerle denemeler yapın: Bu öğreticide kullanılan parametrelere ek olarak, diğer parametreler performansı geliştirecek şekilde ayarlanabilir. Her dönem sonrasında modelde yapılan güncelleştirmelerin büyüklüğünü belirleyen öğrenme oranının değiştirilmesi performansı artırabilir.
  • Farklı bir model mimarisi kullanın: Verilerinizin nasıl göründüğüne bağlı olarak, özelliklerini en iyi öğrenebilen model farklı olabilir. Modelinizin performansından memnun değilseniz mimariyi değiştirmeyi deneyin.

Sonraki adımlar

Bu öğreticide, öğrenme aktarımını, önceden eğitilmiş bir görüntü sınıflandırması TensorFlow modelini ve beton yüzeylerin görüntülerini çatlak veya çatlaksız olarak sınıflandırmak için ML.NET Görüntü Sınıflandırma API'sini kullanarak özel bir derin öğrenme modeli oluşturmayı öğrendiniz.

Daha fazla bilgi edinmek için sonraki öğreticiye geçin.

Ayrıca bkz.