Aracılığıyla paylaş


Modeli bağla

Makine öğrenmesi modeli, bilgileri modele aktaran ve modelden dışarı aktaran giriş ve çıkış özelliklerine sahiptir.

Modelinizi LearningModel olarak yükledikten sonra, ILearningModelFeatureDescriptor nesnelerini almak için LearningModel.InputFeatures ve LearningModel.OutputFeatures kullanabilirsiniz. Bunlar, modelin beklenen giriş ve çıkış özellik türlerini listeler.

Değerleri bir özelliğe bağlamak için bir LearningModelBinding kullanırsınız ve Name özelliğiyle ILearningModelFeatureDescriptor'a başvurursunuz.

Aşağıdaki video, makine öğrenmesi modellerinin bağlama özelliklerine kısa bir genel bakış sağlar.


Özellik türleri

Windows ML, LearningModelFeatureKind'de numaralandırılmış tüm ONNX özellik türlerini destekler. Bunlar farklı özellik tanımlayıcı sınıflarına eşlenir:

Tensorlar

Tensorlar çok boyutlu dizilerdir ve en yaygın tensor 32 bit float'ların tensor'ıdır. Tensorların boyutları, her boyutu temsil eden sıkı bir şekilde paketlenmiş bitişik veriler ile satır ana değerleridir. Tensor'un toplam boyutu, her boyutun boyutlarının çarpımlarıdır.

Sekanslar

Sıralar, değerlerin vektörleridir. Sıra türlerinin yaygın bir kullanımı, bazı sınıflandırma modellerinin her tahmin için doğruluk derecelendirmesini belirtmek üzere döndürdüğü kayan olasılık vektördür.

Haritalar

Haritalar, bilgilerin anahtar/değer çiftleridir. Sınıflandırma modelleri genellikle her etiketli sınıflandırma adı için kayan nokta olasılıklarını açıklayan bir dize-kayan nokta eşlemesi döndürür. Örneğin, bir resimdeki köpek türünü tahmin etmeye çalışan bir modelin çıktısı olabilir ["Boston terrier", 90.0], ["Golden retriever", 7.4], ["Poodle", 2.6].

Skalerler

Çoğu harita ve dizi skaler değerlere sahip olur. Bunlar , TensorFeatureDescriptor.Shape.Size öğesinin sıfır (0) olduğu yerleri gösterir. Bu durumda, harita veya sıra skaler türünde olacaktır. En yaygın olanıdır float. Örneğin, kayan eşlem için bir dize şöyle olabilir:

MapFeatureDescriptor.KeyKind == TensorKind.String
MapFeatureDescriptor.ValueDescriptor.Kind == LearningModelFeatureKind.Tensor
MapFeatureDescriptor.ValueDescriptor.as<TensorFeatureDescriptor>().Shape.Size == 0

Gerçek eşleme özellik değeri bir IMap<string, float>olacaktır.

Harita dizisi

Harita dizisi sadece anahtar/değer çiftlerinden oluşan bir vektördür. Örneğin, dize-float eşlemeleri dizisi türünde IVector<IMap<string, float>> olabilir. Köpek ırkı tahminlerinin ["Boston terrier", 90.0], ["Golden retriever", 7.4], ["Poodle", 2.6] yukarıdaki çıktısı bir harita dizisi örneğidir.

Resimler

Görüntülerle çalışırken görüntü biçimleri ve tensorizasyon konusunda bilgi sahibi olmanız gerekir.

Görüntü biçimleri

Modeller görüntü eğitim verileriyle eğitilir ve ağırlıklar kaydedilir ve bu eğitim kümesi için uyarlanır. Modele bir görüntü girişi geçirdiğinizde, biçimi eğitim görüntülerinin biçimiyle eşleşmelidir.

Çoğu durumda model beklenen görüntü biçimini açıklar; ONNX modelleri, beklenen görüntü biçimlerini açıklamak için meta verileri kullanabilir.

Çoğu model aşağıdaki biçimleri kullanır, ancak bu tüm modeller için evrensel değildir:

  • Image.BitmapPixelFormat: Bgr8
  • Image.ColorSpaceGamma: SRGB
  • Image.NominalPixelRange: NominalRange_0_255

Tensörleştirme

Görüntüler Windows ML'de tensor biçiminde temsil edilir. Tensorizasyon, bir görüntüyü tensöre dönüştürme işlemidir ve bağlama sırasında gerçekleşir.

Windows ML, görüntüleri "NCHW tensör formatında" 32 bitlik kayan nokta sayılar dan oluşan 4 boyutlu tensörlere dönüştürür.

  • N: Toplu iş boyutu (veya görüntü sayısı). Windows ML şu anda 1'in N toplu iş boyutunu destekler.
  • C: Kanal sayısı (Gray8 için 1, Bgr8 için 3).
  • H: Yükseklik.
  • W: Genişlik.

Görüntünün her pikseli, 0-255 aralığında depolanan ve 32 bit float içine paketlenmiş 8 bit renk numarasıdır.

Görüntüleri modele nasıl geçirirsiniz?

Görüntüleri modellere geçirmenin iki yolu vardır:

  • ImageFeatureValue (Görüntü ÖzelliğiDeğeri)

    Görüntüleri giriş ve çıkış olarak bağlamak için ImageFeatureValue kullanmanızı öneririz, çünkü hem dönüştürme hem de tensorizasyonla ilgilenir, böylece görüntüler modelin gerekli görüntü biçimiyle eşleşir. Şu anda desteklenen model biçimi türleri Gray8, Rgb8 ve Bgr8'dir ve şu anda desteklenen piksel aralığı 0-255'tir.

    ImageFeatureValue.CreateFromVideoFrame statik yöntemini kullanarak bir ImageFeatureValue oluşturabilirsiniz.

    Modelin hangi biçime ihtiyacı olduğunu öğrenmek için WinML aşağıdaki mantığı ve öncelik sırasını kullanır:

    1. Bind(String, Object, IPropertySet) tüm görüntü ayarlarını geçersiz kılar.
    2. Model meta verileri daha sonra denetlenecek ve varsa kullanılacaktır.
    3. Model meta verileri sağlanmadıysa ve çağıran tarafından sağlanan özellikler de yoksa, çalışma zamanı en iyi eşleşmeyi yapmaya çalışır.
    • Tensor NCHW (4 boyutlu float32, N==1) gibi görünüyorsa, çalışma zamanı kanal sayısına bağlı olarak Gray8 (C==1) veya Bgr8 (C==3) varsayılır.
    • NominalRange_0_255 varsayılır
    • SRGB varsayılır

    Bind(String, Object, IPropertySet) içine geçirebileceğiniz birkaç isteğe bağlı özellik vardır:

    • BitmapBounds: Belirtilirse, bunlar görüntüyü modele göndermeden önce uygulanacak kırpma sınırlarıdır.
    • BitmapPixelFormat: Belirtilirse, görüntü dönüştürme sırasında model piksel biçimi olarak kullanılacak piksel biçimi budur.

    Görüntü şekilleri için model, aldığı belirli bir şekli belirtebilir (örneğin, SqueezeNet 224.224 alır) veya model herhangi bir şekil görüntüsü için ücretsiz boyutlar belirtebilir (birçok StyleTransfer türü model değişken boyutlu görüntüler alabilir). Çağıran, görüntünün hangi bölümünü kullanmak istediklerini seçmek için BitmapBounds kullanabilir. Belirtilmezse, çalışma süresi görüntüyü model boyutuna (en boy oranını koruyarak) ölçeklendirir ve ardından merkezden kırpar.

  • Tensör Şamandırası

    Windows ML modelinizin renk biçimini veya piksel aralığını desteklemiyorsa dönüştürmeleri ve tensorizasyonu uygulayabilirsiniz. 32-bitlik float'lar için giriş değeriyle dört boyutlu bir NCHW tensörü oluşturacaksınız. Bunun nasıl yapıldığını gösteren bir örnek için Bkz. Özel Tensorizasyon Örneği .

    Bu yöntem kullanıldığında modeldeki tüm görüntü meta verileri yoksayılır.

Örnek

Aşağıdaki örnekte bir modelin girişine nasıl bağlanacağınız gösterilmektedir. Bu durumda oturumdan bir bağlama oluşturur, inputFrame'den bir ImageFeatureValue oluşturur ve görüntüyü modelin inputName girişine bağlarız.

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);
}

Ayrıca bakınız

Uyarı

Windows ML ile ilgili yardım için aşağıdaki kaynakları kullanın:

  • Windows ML hakkında teknik sorular sormak veya yanıtlamak için stack overflow'dawindows-machine-learning etiketini kullanın.
  • Bir hatayı bildirmek için lütfen GitHub'ımızda bir sorun oluşturun.