Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pelajari cara melatih model pembelajaran mendalam kustom menggunakan pembelajaran transfer, model TensorFlow yang telah dilatih sebelumnya, dan API Klasifikasi Gambar ML.NET untuk mengklasifikasikan gambar permukaan beton sebagai retak atau tidak terklasifikasi.
Dalam tutorial ini, Anda mempelajari cara:
- Memahami masalahnya
- Pelajari tentang API Klasifikasi Gambar ML.NET
- Memahami model yang sudah dilatih sebelumnya
- Menggunakan pembelajaran transfer untuk melatih model klasifikasi gambar TensorFlow kustom
- Mengklasifikasikan gambar dengan model kustom
Prasyarat
Memahami masalahnya
Klasifikasi gambar adalah masalah visi komputer. Klasifikasi gambar mengambil gambar sebagai input dan mengategorikannya ke dalam kelas yang ditentukan. Model klasifikasi gambar umumnya dilatih menggunakan jaringan pembelajaran mendalam dan neural. Untuk informasi selengkapnya, lihat Pembelajaran mendalam vs. pembelajaran mesin.
Beberapa skenario di mana klasifikasi gambar berguna meliputi:
- Pengenalan wajah
- Deteksi emosi
- Diagnosa medis
- Deteksi penanda lokasi
Tutorial ini melatih model klasifikasi gambar kustom untuk melakukan pemeriksaan visual otomatis dek jembatan untuk mengidentifikasi struktur yang rusak oleh retakan.
API Klasifikasi Gambar ML.NET
ML.NET menyediakan berbagai cara untuk melakukan klasifikasi gambar. Tutorial ini menerapkan pembelajaran transfer menggunakan API Klasifikasi Gambar. API Klasifikasi Gambar menggunakan TensorFlow.NET, pustaka tingkat rendah yang menyediakan pengikatan C# untuk API TensorFlow C++.
Apa itu pembelajaran transfer?
Pembelajaran transfer menerapkan pengetahuan yang diperoleh dari memecahkan satu masalah ke masalah terkait lainnya.
Melatih model pembelajaran mendalam dari awal memerlukan pengaturan beberapa parameter, sejumlah besar data pelatihan berlabel, dan sejumlah besar sumber daya komputasi (ratusan jam GPU). Menggunakan model yang telah dilatih sebelumnya bersama dengan pembelajaran transfer memungkinkan Anda mempercepat proses pelatihan.
Proses pelatihan
API Klasifikasi Gambar memulai proses pelatihan dengan memuat model TensorFlow yang telah dilatih sebelumnya. Proses pelatihan terdiri dari dua langkah:
- Fase penyempitan.
- Fase pelatihan.
Langkah Pelatihan
Fase penyempitan
Selama fase penyempitan, set gambar pelatihan dimuat dan nilai piksel digunakan sebagai input, atau fitur, untuk lapisan beku dari model yang telah dilatih sebelumnya. Lapisan beku mencakup semua lapisan dalam jaringan neural hingga lapisan penultimate, secara informal dikenal sebagai lapisan penyempitan. Lapisan-lapisan ini disebut sebagai beku karena tidak ada pelatihan yang akan dilakukan pada lapisan-lapisan ini dan operasinya dilalui begitu saja. Di lapisan beku inilah pola tingkat lebih rendah yang membantu model mendiferensiasi antara kelas yang berbeda dihitung. Semakin besar jumlah lapisan, semakin intensif komputasi langkah ini. Untungnya, karena ini adalah perhitungan satu kali, hasilnya dapat di-cache dan digunakan dalam eksekusi nanti saat bereksperimen dengan parameter yang berbeda.
Fase pelatihan
Setelah nilai output dari fase penyempitan dihitung, nilai tersebut digunakan sebagai input untuk melatih kembali lapisan akhir model. Proses ini berulang dan berjalan untuk berapa kali ditentukan oleh parameter model. Selama setiap eksekusi, kerugian dan akurasi dievaluasi. Kemudian, penyesuaian yang sesuai dilakukan untuk meningkatkan model dengan tujuan meminimalkan kerugian dan memaksimalkan akurasi. Setelah pelatihan selesai, dua format model dihasilkan. Salah satunya adalah versi .pb dari model tersebut, dan yang lainnya adalah versi .zip dari model yang diserialisasikan dengan ML.NET. Saat bekerja di lingkungan yang didukung oleh ML.NET, disarankan untuk menggunakan versi model yang .zip. Namun, di lingkungan di mana ML.NET tidak didukung, Anda memiliki opsi untuk menggunakan versi .pb.
Memahami model yang sudah dilatih sebelumnya
Model yang telah dilatih sebelumnya yang digunakan dalam tutorial ini adalah varian lapisan 101 dari model Residual Network (ResNet) v2. Model asli dilatih untuk mengklasifikasikan gambar ke dalam seribu kategori. Model ini mengambil sebagai input gambar ukuran 224 x 224 dan menghasilkan probabilitas kelas untuk setiap kelas yang dilatihnya. Bagian dari model ini digunakan untuk melatih model baru menggunakan gambar kustom untuk membuat prediksi antara dua kelas.
Membuat aplikasi konsol
Sekarang setelah Anda memiliki pemahaman umum tentang pembelajaran transfer dan API Klasifikasi Gambar, saatnya untuk membangun aplikasi.
Buat sebuah Aplikasi Konsol C# yang dinamai "DeepLearning_ImageClassification_Binary". Klik tombol Berikutnya.
Pilih .NET 8 sebagai kerangka kerja yang akan digunakan, lalu pilih Buat.
Instalasi Paket NuGet Microsoft.ML:
Nota
Sampel ini menggunakan versi stabil terbaru dari paket NuGet yang disebutkan kecuali dinyatakan lain.
- Di Penjelajah Solusi, klik kanan proyek Anda dan pilih Kelola Paket NuGet.
- Pilih "nuget.org" sebagai sumber Paket.
- Pilih tab Telusuri.
- Centang kotak Sertakan prarilis.
- Cari Microsoft.ML.
- Pilih tombol Instal.
- Pilih tombol Saya Terima pada dialog Penerimaan Lisensi jika Anda setuju dengan ketentuan lisensi untuk paket yang tercantum.
- Ulangi langkah-langkah ini untuk Microsoft.ML.Vision, SciSharp.TensorFlow.Redist (versi 2.3.1), dan paket Microsoft.ML.ImageAnalytics NuGet.
Menyiapkan dan memahami data
Nota
Himpunan data untuk tutorial ini berasal dari Maguire, Marc; Dorafshan, Sattar; dan Thomas, Robert J., "SDNET2018: Himpunan data gambar retak konkret untuk aplikasi pembelajaran mesin" (2018). Telusuri semua Himpunan Data. Kertas 48. https://digitalcommons.usu.edu/all_datasets/48
SDNET2018 adalah himpunan data gambar yang berisi anotasi untuk struktur beton retak dan tidak retak (dek jembatan, dinding, dan trotoar).
Data diatur dalam tiga subdirektori:
- D berisi gambar dek jembatan
- P berisi gambar trotoar
- W berisi gambar dinding
Masing-masing subdirektori ini berisi dua subdirektori awalan tambahan:
- C adalah awalan yang digunakan untuk permukaan retak
- U adalah awalan yang digunakan untuk permukaan yang tidak retak
Dalam tutorial ini, hanya gambar dek jembatan yang digunakan.
- Unduh himpunan data dan ekstrak.
- Buat direktori bernama "Aset" di proyek Anda untuk menyimpan file himpunan data Anda.
- Salin subdirektori CD dan subdirektori UD dari direktori yang baru saja di-unzip ke direktori Aset.
Membuat kelas input dan output
Buka file Program.cs dan ganti konten yang ada dengan arahan
usingberikut:using Microsoft.ML; using Microsoft.ML.Vision; using static Microsoft.ML.DataOperationsCatalog;Buat kelas yang disebut
ImageData. Kelas ini digunakan untuk mewakili data yang awalnya dimuat.class ImageData { public string? ImagePath { get; set; } public string? Label { get; set; } }ImageDataberisi properti berikut:-
ImagePathadalah jalur yang sepenuhnya memenuhi syarat tempat gambar disimpan. - Gambar ini termasuk dalam kategori
Label. Ini adalah nilai yang akan diprediksi.
-
Buat kelas untuk data input dan output Anda.
Di bawah kelas
ImageData, tentukan skema data input Anda di kelas baru yang disebutModelInput.class ModelInput { public byte[]? Image { get; set; } public uint LabelAsKey { get; set; } public string? ImagePath { get; set; } public string? Label { get; set; } }ModelInputberisi properti berikut:-
Imageadalah representasibyte[]dari gambar. Model ini mengharapkan data gambar dari jenis ini dalam pelatihan. -
LabelAsKeyadalah representasi numerik dariLabel. -
ImagePathadalah jalur yang sepenuhnya memenuhi syarat tempat gambar disimpan. - Gambar ini termasuk dalam kategori
Label. Nilai ini yang akan diprediksi.
Hanya
ImagedanLabelAsKeyyang digunakan untuk melatih model dan membuat prediksi. PropertiImagePathdanLabeldisimpan untuk kenyamanan mengakses nama dan kategori file gambar asli.-
Kemudian, di bawah kelas
ModelInput, tentukan skema data output Anda di kelas baru yang disebutModelOutput.class ModelOutput { public string? ImagePath { get; set; } public string? Label { get; set; } public string? PredictedLabel { get; set; } }ModelOutputberisi properti berikut:-
ImagePathadalah jalur yang sepenuhnya memenuhi syarat tempat gambar disimpan. -
Labeladalah kategori asli tempat gambar berada. Ini adalah nilai yang akan diprediksi. -
PredictedLabeladalah nilai yang diprediksi oleh model.
Mirip dengan
ModelInput, hanyaPredictedLabelyang diperlukan untuk membuat prediksi karena berisi prediksi yang dibuat oleh model. PropertiImagePathdanLabeldipertahankan untuk kenyamanan mengakses nama dan kategori file gambar asli.-
Menentukan jalur dan menginisialisasi variabel
Di bawah arahan
using, tambahkan kode berikut ke:Tentukan lokasi aset.
Inisialisasikan variabel
mlContextdengan instance baru dari MLContext.Kelas MLContext adalah titik awal untuk semua operasi ML.NET, dan menginisialisasi mlContext membuat lingkungan ML.NET baru yang dapat dibagikan di seluruh objek alur kerja pembuatan model. Ini mirip, secara konseptual, untuk
DbContextdalam Entity Framework.
var projectDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "../../../")); var assetsRelativePath = Path.Combine(projectDirectory, "Assets"); MLContext mlContext = new();
Muat datanya
Membuat metode utilitas pemuatan data
Gambar disimpan dalam dua subdirektori. Sebelum memuat data, data perlu diformat ke dalam daftar objek ImageData. Untuk melakukannya, buat metode 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
};
}
}
Metode LoadImagesFromDirectory:
- Mendapatkan semua jalur berkas dari semua subdirektori.
- Melakukan iterasi melalui setiap file menggunakan pernyataan
foreachdan memeriksa apakah ekstensi file didukung. API Klasifikasi Gambar mendukung format JPEG dan PNG. - Mengambil label dari file. Jika parameter
useFolderNameAsLabeldiatur ketrue, maka direktori induk tempat file disimpan digunakan sebagai label. Jika tidak, label diharapkan menjadi awalan nama file atau nama file itu sendiri. - Membuat instans baru
ModelInput.
Menyiapkan data
Tambahkan kode berikut setelah baris di mana Anda membuat instans baru MLContext.
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;
Kode sebelumnya:
Memanggil metode utilitas
LoadImagesFromDirectoryuntuk mendapatkan daftar gambar yang digunakan untuk pelatihan setelah menginisialisasi variabelmlContext.Memuat gambar ke dalam
IDataViewmenggunakan metodeLoadFromEnumerable.Mengacak data menggunakan metode
ShuffleRows. Data dimuat dalam urutan dibaca dari direktori. Pengacakan dilakukan untuk menyeimbangkan.Melakukan beberapa pra-pemrosesan pada data sebelum pelatihan. Ini dilakukan karena model pembelajaran mesin mengharapkan input berada dalam format numerik. Kode pra-pemrosesan membuat
EstimatorChainterdiri dari transformasiMapValueToKeydanLoadRawImageBytes. TransformasiMapValueToKeymengambil nilai kategoris di kolomLabel, mengonversinya menjadi nilaiKeyTypenumerik dan menyimpannya di kolom baru yang disebutLabelAsKey.LoadImagesmengambil nilai dari kolomImagePathbersama dengan parameterimageFolderuntuk memuat gambar untuk pelatihan.Menggunakan metode
Fituntuk menerapkan data kepreprocessingPipelineEstimatorChaindiikuti dengan metodeTransform, yang mengembalikanIDataViewyang berisi data yang telah diproses sebelumnya.Membagi data menjadi set pelatihan, set validasi, dan set data uji.
Untuk melatih model, penting untuk memiliki himpunan data pelatihan serta himpunan data validasi. Model ini dilatih pada set pelatihan. Seberapa baik prediksi pada data yang tidak terlihat diukur oleh performa terhadap set validasi. Berdasarkan hasil performa tersebut, model membuat penyesuaian pada apa yang telah dipelajarinya dalam upaya untuk meningkatkan. Kumpulan validasi dapat berasal dari memisahkan himpunan data asli Anda atau dari sumber lain yang telah disisihkan untuk tujuan ini.
Contoh kode ini melakukan dua kali pemisahan. Pertama, data yang telah diproscesikan sebelumnya dibagi dan 70% digunakan untuk pelatihan sementara 30% sisanya digunakan untuk validasi. Kemudian, set validasi 30% dibagi lebih lanjut menjadi validasi dan set pengujian di mana 90% digunakan untuk validasi dan 10% digunakan untuk pengujian.
Salah satu cara untuk memikirkan tujuan partisi data ini adalah mengikuti ujian. Saat belajar untuk ujian, Anda meninjau catatan, buku, atau sumber daya lainnya untuk memahami konsep yang ada pada ujian. Ini adalah tujuan dari rangkaian kereta. Kemudian, Anda mungkin mengikuti ujian tiruan untuk memvalidasi pengetahuan Anda. Di sinilah kegunaan set validasi. Anda ingin memeriksa apakah Anda memiliki pemahaman konsep yang baik sebelum mengikuti ujian aktual. Berdasarkan hasil tersebut, Anda mencatat kesalahan Anda atau hal-hal yang tidak Anda mengerti dengan baik dan menggabungkan perubahan tersebut saat Anda meninjau untuk ujian sesungguhnya. Akhirnya, Anda mengambil ujian. Set pengujian ini digunakan untuk ini. Anda belum pernah melihat pertanyaan yang ada pada ujian dan sekarang menggunakan apa yang Anda pelajari dari pelatihan dan validasi untuk menerapkan pengetahuan Anda ke tugas yang ditangani.
Menetapkan partisi nilai masing-masing untuk data pelatihan, validasi, dan pengujian.
Menentukan alur pelatihan
Pelatihan model terdiri dari dua langkah. Pertama, API Klasifikasi Gambar digunakan untuk melatih model. Kemudian, label yang dikodekan di kolom PredictedLabel dikonversi kembali ke nilai kategoris aslinya menggunakan transformasi MapKeyToValue.
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);
Kode sebelumnya:
Membuat variabel baru untuk menyimpan sekumpulan parameter yang diperlukan dan opsional untuk ImageClassificationTrainer. ImageClassificationTrainer mengambil beberapa parameter opsional:
-
FeatureColumnNameadalah kolom yang digunakan sebagai input untuk model. -
LabelColumnNameadalah kolom untuk nilai yang akan diprediksi. -
ValidationSetadalahIDataViewyang berisi data validasi. -
Archmendefinisikan arsitektur model mana yang telah dilatih sebelumnya untuk digunakan. Tutorial ini menggunakan varian lapisan 101 dari model ResNetv2. -
MetricsCallbackmengikat fungsi untuk melacak kemajuan selama pelatihan. -
TestOnTrainSetmemberi tahu model untuk mengukur performa terhadap set pelatihan ketika tidak ada set validasi yang ada. -
ReuseTrainSetBottleneckCachedValuesmemberi tahu model apakah akan menggunakan nilai cache dari fase bottleneck dalam pengoperasian selanjutnya. Fase kemacetan adalah perhitungan satu kali yang membutuhkan banyak sumber daya komputasi saat pertama kali dilakukan. Jika data pelatihan tidak berubah dan Anda ingin bereksperimen menggunakan jumlah epoch atau ukuran batch yang berbeda, menggunakan nilai cache secara signifikan mengurangi jumlah waktu yang diperlukan untuk melatih model. -
ReuseValidationSetBottleneckCachedValuesmirip denganReuseTrainSetBottleneckCachedValueshanya dalam hal ini untuk himpunan data validasi.
-
Menentukan alur pelatihan
EstimatorChainyang terdiri darimapLabelEstimatordan ImageClassificationTrainer.Menggunakan metode
Fituntuk melatih model.
Gunakan model
Sekarang setelah Anda melatih model, saatnya untuk menggunakannya untuk mengklasifikasikan gambar.
Buat metode utilitas baru yang disebut OutputPrediction untuk menampilkan informasi prediksi di konsol.
static void OutputPrediction(ModelOutput prediction)
{
string? imageName = Path.GetFileName(prediction.ImagePath);
Console.WriteLine($"Image: {imageName} | Actual Value: {prediction.Label} | Predicted Value: {prediction.PredictedLabel}");
}
Mengklasifikasikan satu gambar
Buat metode yang disebut
ClassifySingleImageuntuk membuat dan menghasilkan prediksi gambar tunggal.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); }Metode
ClassifySingleImage:- Membuat
PredictionEnginedi dalam metodeClassifySingleImage.PredictionEngineadalah API yang memudahkan Anda untuk memasukkan dan kemudian melakukan prediksi pada satu instans data. - Untuk mengakses instans
ModelInputtunggal, mengonversidataIDataViewmenjadiIEnumerablemenggunakan metodeCreateEnumerablelalu mendapatkan pengamatan pertama. - Menggunakan metode
Predictuntuk mengklasifikasikan gambar. - Menghasilkan prediksi ke konsol dengan metode
OutputPrediction.
- Membuat
Panggil
ClassifySingleImagesetelah Anda memanggil metodeFitmenggunakan kumpulan gambar pengujian.ClassifySingleImage(mlContext, testSet, trainedModel);
Mengklasifikasikan beberapa gambar
Buat metode yang disebut
ClassifyImagesuntuk membuat dan menghasilkan beberapa prediksi gambar.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); } }Metode
ClassifyImages:- Membuat
IDataViewyang berisi prediksi dengan menggunakan metodeTransform. - Untuk melakukan iterasi atas prediksi, mengonversi
predictionDataIDataViewmenjadiIEnumerablemenggunakan metodeCreateEnumerabledan kemudian mendapatkan 10 pengamatan pertama. - Melakukan iterasi dan mengeluarkan label asli dan label yang diprediksi.
- Membuat
Panggil
ClassifyImagessetelah Anda memanggil metodeClassifySingleImage()menggunakan kumpulan gambar pengujian.ClassifyImages(mlContext, testSet, trainedModel);
Jalankan aplikasi
Jalankan aplikasi konsol Anda. Output harus mirip dengan output berikut.
Nota
Anda mungkin melihat peringatan atau pesan pemrosesan; pesan tersebut telah dihapus dari hasil berikut demi kejelasan. Untuk singkatnya, output telah dipadatkan.
Tahap Kemacetan
Tidak ada nilai yang dicetak untuk nama gambar karena gambar dimuat sebagai byte[] oleh karena itu tidak ada nama gambar untuk ditampilkan.
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
fase Pelatihan
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
Mengklasifikasikan output gambar
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
Setelah pemeriksaan gambar 7001-220.jpg, Anda dapat memverifikasi bahwa gambar tersebut tidak retak, seperti yang diprediksi model.
gambar himpunan data 
Selamat! Anda sekarang telah berhasil membangun model pembelajaran mendalam untuk mengklasifikasikan gambar.
Tingkatkan model
Jika Anda tidak puas dengan hasil model, Anda dapat mencoba meningkatkan performanya dengan mencoba beberapa pendekatan berikut:
- Lebih Banyak Data: Semakin banyak contoh yang dipelajari model, semakin baik performanya. Unduh himpunan data lengkap SDNET2018 dan gunakan untuk melatih.
- Menambah data: Teknik umum untuk menambahkan variasi ke data adalah dengan menambah data dengan mengambil gambar dan menerapkan transformasi yang berbeda (memutar, membalik, menggeser, memangkas). Ini menambahkan contoh yang lebih bervariasi agar model dapat dipelajari.
- Berlatih untuk waktu yang lebih lama: Semakin lama Anda berlatih, semakin baik model tersebut akan disesuaikan. Meningkatkan jumlah epoch mungkin dapat meningkatkan performa model Anda.
- Eksperimen dengan parameter hiper: Selain parameter yang digunakan dalam tutorial ini, parameter lain dapat disetel untuk berpotensi meningkatkan performa. Mengubah tingkat pembelajaran, yang menentukan besarnya pembaruan yang dilakukan pada model setelah setiap epoch, dapat meningkatkan performa.
- Gunakan arsitektur model yang berbeda: Bergantung pada tampilan data Anda, model yang paling dapat mempelajari fitur-fiturnya mungkin berbeda. Jika Anda tidak puas dengan performa model Anda, coba ubah arsitektur.
Langkah berikutnya
Dalam tutorial ini, Anda mempelajari cara membangun model pembelajaran mendalam kustom menggunakan pembelajaran transfer, model TensorFlow klasifikasi gambar yang telah dilatih sebelumnya, dan API Klasifikasi Gambar ML.NET untuk mengklasifikasikan gambar permukaan beton sebagai retak atau tidak terklasifikasi.
Lanjutkan ke tutorial berikutnya untuk mempelajari lebih lanjut.