Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- Performans sorunu evresi.
- Eğitim aşaması.
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.
"DeepLearning_ImageClassification_Binary" adlı bir C# Konsol Uygulaması oluşturun. İleri düğmesine tıklayın.
Kullanılacak çerçeve olarak .NET 8'i ve ardından Oluştur'u seçin.
Microsoft.ML NuGet Paketini yükleyin:
Uyarı
Bu örnek, aksi belirtilmedikçe bahsedilen NuGet paketlerinin en son kararlı sürümünü kullanır.
- Çözüm Gezgini'nde projenize sağ tıklayın ve NuGet Paketlerini Yönetseçin.
- Paket kaynağı olarak "nuget.org" seçeneğini belirleyin.
- Gözat sekmesini seçin.
- Ön sürümü dahil et onay kutusunu işaretleyin.
- Microsoft.ML arayın.
- Yükle düğmesini seçin.
- Listelenen paketlerin lisans koşullarını kabul ediyorsanız Lisans Kabulü iletişim kutusunda Kabul Ediyorum düğmesini seçin.
- 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.
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.
- Veri kümesini indirin ve sıkıştırmasını açın.
- Veri kümesi dosyalarınızı kaydetmek için projenizde "Varlıklar" adlı bir dizin oluşturun.
- 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
Program.cs dosyasını açın ve mevcut içeriği aşağıdaki
usingyönergelerle değiştirin:using Microsoft.ML; using Microsoft.ML.Vision; using static Microsoft.ML.DataOperationsCatalog;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; } }ImageDataaşağıdaki özellikleri içerir:-
ImagePathgö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.
-
Giriş ve çıkış verileriniz için sınıflar oluşturun.
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; } }ModelInputaşağıdaki özellikleri içerir:-
Imagebyte[]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österimidirLabel. -
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
ImageveLabelAsKeymodeli 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 veLabelözellikleri kolaylık sağlamak için tutulur.-
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; } }ModelOutputaşağıdaki özellikleri içerir:-
ImagePath, görüntünün depolandığı tam yoldur. -
Labelgörüntünün ait olduğu özgün kategoridir. Bu, tahmin etmek için gereken değerdir. -
PredictedLabelmodel tarafından tahmin edilen değerdir.
benzer şekilde
ModelInput, model tarafından yapılan tahmini içerdiğinden yalnızcaPredictedLabeltahmin yapmak için gereklidir.ImagePathözgün görüntü dosyası adına ve kategorisine erişmek için veLabelözellikleri kolaylık sağlamak için korunur.-
Yolları tanımlama ve değişkenleri başlatma
Yönergelerin
usingaltında aşağıdaki kodu ekleyin:Varlıkların konumunu tanımlayın.
mlContextDeğ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
DbContextbenzer, 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
foreachdeyimi 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.
useFolderNameAsLabelparametresi 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:
mlContextdeğişkenini başlattıktan sonra eğitim için kullanılan görüntülerin listesini almak içinLoadImagesFromDirectoryyardımcı yöntemini çağırır.yöntemini kullanarak
IDataViewgörüntüleri içineLoadFromEnumerableyü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
EstimatorChaindönüşümlerindenMapValueToKeyoluşan birLoadRawImageBytesoluşturur. Dönüşüm,MapValueToKeysütundakiLabelkategorik değeri alır, sayısalKeyTypebir değere dönüştürür ve adlıLabelAsKeyyeni bir sütunda depolar.LoadImages,ImagePathsütunundaki değerleri veimageFolderparametresini alarak eğitim için görüntüleri yükler.Fityöntemini kullanarak, önceden işlenmiş verileri içeren birpreprocessingPipelineveri döndüren ve ardından yöntemineEstimatorChainverileriTransformIDataViewuygular.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. -
LabelColumnNamedeğerin tahmin edileceği sütundur. -
ValidationSetIDataView, 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. -
MetricsCallbackeğitim sırasında ilerleme durumunu izlemek için bir işlev bağlar. -
TestOnTrainSetmodele, doğrulama kümesi olmadığında eğitim kümesine göre performansı ölçmesini söyler. -
ReuseTrainSetBottleneckCachedValuesmodele 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. -
ReuseValidationSetBottleneckCachedValuesyalnızca bu durumda doğrulama veri kümesine benzerReuseTrainSetBottleneckCachedValues.
-
EstimatorChainhem hemmapLabelEstimatorde ImageClassificationTrainer öğesinden oluşan eğitim işlem hattını tanımlar.FitModeli 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
Tek bir görüntü tahmini yapmak ve çıktısını almak için adlı
ClassifySingleImagebir 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); }ClassifySingleImageyöntemi:- yönteminin
PredictionEngineiçinde birClassifySingleImageoluşturur. ,PredictionEnginetek bir veri örneğinde geçiş yapmanızı ve ardından tahmin gerçekleştirmenizi sağlayan kullanışlı bir API'dir. - Tek
ModelInputbir örneğe erişmek için yöntemini kullanarakdataöğesiniIDataViewIEnumerableöğesineCreateEnumerabledönüştürür ve ardından ilk gözlemi alır. -
PredictGörüntüyü sınıflandırmak için yöntemini kullanır. - yöntemiyle konsola tahminin çıkışını alır
OutputPrediction.
- yönteminin
Test görüntü kümesini kullanarak
Fityöntemini çağırdıktan sonraClassifySingleImageçağırın.ClassifySingleImage(mlContext, testSet, trainedModel);
Birden çok görüntüyü sınıflandırma
Birden çok görüntü tahmini yapmak ve çıktısını almak için adlı
ClassifyImagesbir 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); } }ClassifyImagesyöntemi:- yöntemini kullanarak
IDataViewtahminleri içeren birTransformoluşturur. - Tahminleri yinelemek için
predictionDataveIDataViewöğeleriniCreateEnumerableyöntemi ile birIEnumerableiç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.
- yöntemini kullanarak
Önce
ClassifySingleImage()yöntemini görüntü test kümesini kullanarak çağırdıktan sonraClassifyImagesç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.
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.