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.
Model pembelajaran mesin memiliki fitur input dan output, yang meneruskan informasi ke dalam dan ke luar model.
Setelah memuat model sebagai LearningModel, Anda dapat menggunakan LearningModel.InputFeatures dan LearningModel.OutputFeatures untuk mendapatkan objek ILearningModelFeatureDescriptor . Ini mencantumkan jenis fitur input dan output model yang diharapkan.
Anda menggunakan LearningModelBinding untuk mengikat nilai ke fitur, merujuk ILearningModelFeatureDescriptor dengan properti Nama-nya .
Video berikut memberikan gambaran singkat tentang fitur pengikatan model pembelajaran mesin.
Jenis fitur
Windows ML mendukung semua jenis fitur ONNX, yang dijumlahkan dalam LearningModelFeatureKind. Ini dipetakan ke kelas deskriptor fitur yang berbeda:
- Tensor: TensorFeatureDescriptor
- Urutan: SequenceFeatureDescriptor
- Peta: MapFeatureDescriptor
- Gambar: ImageFeatureDescriptor
Tensor
Tensor adalah array multi-dimensi, dan tensor yang paling umum adalah tensor dengan tipe data float 32-bit. Dimensi tensor berupa row-major, dengan data kontigu yang dikemas rapat untuk mewakili setiap dimensi. Ukuran total tensor adalah produk dari ukuran setiap dimensi.
Urutan-urutan
Urutan adalah vektor nilai. Penggunaan umum tipe urutan adalah vektor probabilitas float, yang diberikan oleh beberapa model klasifikasi untuk menunjukkan peringkat akurasi untuk setiap prediksi.
Peta
Peta adalah pasangan kunci/nilai informasi. Model klasifikasi umumnya mengembalikan peta string/float yang menjelaskan probabilitas float untuk setiap nama klasifikasi berlabel. Misalnya, output model yang mencoba memprediksi jenis anjing dalam gambar mungkin .["Boston terrier", 90.0], ["Golden retriever", 7.4], ["Poodle", 2.6]
Skalar
Sebagian besar peta dan urutan akan memiliki nilai yang merupakan skalar. Ini muncul di mana TensorFeatureDescriptor.Shape.Size adalah nol (0). Dalam hal ini, peta atau urutan akan menjadi jenis skalar. Yang paling umum adalah float. Misalnya, pemetaan string ke float adalah:
MapFeatureDescriptor.KeyKind == TensorKind.String
MapFeatureDescriptor.ValueDescriptor.Kind == LearningModelFeatureKind.Tensor
MapFeatureDescriptor.ValueDescriptor.as<TensorFeatureDescriptor>().Shape.Size == 0
Nilai fitur peta aktual akan menjadi IMap<string, float>.
Urutan peta
Urutan peta hanyalah vektor pasangan kunci/nilai. Misalnya, urutan peta string-ke-float akan berjenis IVector<IMap<string, float>>. Output prediksi ras anjing di atas adalah contoh dari urutan peta.
Gambar
Saat bekerja dengan gambar, Anda harus mengetahui format dan tensorisasi gambar.
Format gambar
Model dilatih dengan data pelatihan gambar, dan bobot disimpan dan disesuaikan untuk set pelatihan tersebut. Saat Anda meneruskan input gambar ke dalam model, formatnya harus cocok dengan format gambar pelatihan.
Dalam banyak kasus, model menjelaskan format gambar yang diharapkan; Model ONNX dapat menggunakan metadata untuk menjelaskan format gambar yang diharapkan.
Sebagian besar model menggunakan format berikut, tetapi ini tidak universal untuk semua model:
- Gambar.BitmapPixelFormat: Bgr8
- Gambar.ColorSpaceGamma: SRGB
- Image.NominalPixelRange: NominalRange_0_255
Tensorisasi
Gambar diwakili dalam Windows ML dalam format tensor. Tensorisasi adalah proses mengonversi gambar menjadi tensor dan terjadi selama pengikatan.
Windows ML mengonversi gambar menjadi tensor 4 dimensi float 32-bit dalam "format tensor NCHW":
- N: Ukuran batch (atau jumlah gambar). Windows ML saat ini mendukung ukuran batch N 1.
- C: Jumlah saluran (1 untuk Gray8, 3 untuk Bgr8).
- H: Tinggi.
- W: Lebar.
Setiap piksel gambar adalah angka warna 8-bit yang disimpan dalam kisaran 0-255 dan dikemas ke dalam float 32-bit.
Cara memasukkan gambar ke model
Ada dua cara untuk meneruskan gambar ke model.
-
Sebaiknya gunakan ImageFeatureValue untuk mengikat gambar sebagai input dan output, karena mengurus konversi dan tensorisasi, sehingga gambar cocok dengan format gambar model yang diperlukan. Jenis format model yang saat ini didukung adalah Gray8, Rgb8, dan Bgr8, dan rentang piksel yang saat ini didukung adalah 0-255.
Anda dapat membuat ImageFeatureValue menggunakan metode statis ImageFeatureValue.CreateFromVideoFrame.
Untuk mengetahui format apa yang dibutuhkan model, WinML menggunakan logika dan urutan prioritas berikut:
- Bind(String, Object, IPropertySet) akan mengambil alih semua pengaturan gambar.
- Metadata model kemudian akan diperiksa dan digunakan jika tersedia.
- Jika tidak ada metadata model yang disediakan, atau tidak ada properti yang disediakan pemanggil, runtime akan mencoba membuat pencocokan terbaik.
- Jika tensor terlihat seperti NCHW (float32 4 dimensi, N==1), runtime akan mengasumsikan Gray8 (C==1) atau Bgr8 (C==3) tergantung pada jumlah saluran.
- NominalRange_0_255 akan diasumsikan
- SRGB akan diasumsikan
Ada beberapa properti opsional yang dapat Anda teruskan ke Bind(String, Object, IPropertySet):
- BitmapBounds: Jika ditentukan, ini adalah batas pemotongan yang akan diterapkan sebelum mengirim gambar ke model.
- BitmapPixelFormat: Jika ditentukan, ini adalah format piksel yang akan digunakan sebagai format piksel model selama konversi gambar.
Untuk bentuk gambar, model dapat menentukan bentuk tertentu yang diperlukan (misalnya, SqueezeNet mengambil 224.224), atau model dapat menentukan dimensi bebas untuk gambar bentuk apa pun (banyak model jenis StyleTransfer dapat mengambil gambar berukuran variabel). Pemanggil dapat menggunakan BitmapBounds untuk memilih bagian gambar mana yang ingin mereka gunakan. Jika tidak ditentukan, runtime akan menskalakan gambar ke ukuran model (mempertahankan rasio aspek) lalu memangkas bagian tengah.
-
Jika Windows ML tidak mendukung format warna atau rentang piksel model Anda, maka Anda dapat menerapkan konversi dan tensorisasi. Anda akan membuat tensor empat dimensi NCHW untuk float 32-bit untuk nilai input Anda. Lihat Sampel Tensorisasi Kustom untuk contoh cara melakukannya.
Ketika metode ini digunakan, metadata gambar apa pun pada model diabaikan.
Contoh
Contoh berikut menunjukkan cara mengikat input model. Dalam hal ini, kami membuat pengikatan dari sesi, membuat ImageFeatureValue dari inputFrame, dan mengikat gambar ke input model, inputName.
private void BindModel(
LearningModelSession session,
VideoFrame inputFrame,
string inputName)
{
// Create a binding object from the session
LearningModelBinding binding = new LearningModelBinding(session);
// Create an image tensor from a video frame
ImageFeatureValue image =
ImageFeatureValue.CreateFromVideoFrame(inputFrame);
// Bind the image to the input
binding.Bind(inputName, image);
}
Lihat juga
- Sebelumnya: Membuat sesi
- Berikutnya: Mengevaluasi input model
Nota
Gunakan sumber daya berikut untuk bantuan dengan Windows ML:
- Untuk mengajukan atau menjawab pertanyaan teknis tentang Windows ML, silakan gunakan tag windows-machine-learning di Stack Overflow.
- Untuk melaporkan bug, silakan ajukan masalah di GitHub kami.