Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En maskininlärningsmodell har indata- och utdatafunktioner som skickar information till och från modellen.
När du har läst in din modell som en LearningModel kan du använda LearningModel.InputFeatures och LearningModel.OutputFeatures för att hämta ILearningModelFeatureDescriptor-objekt . Dessa visar modellens förväntade funktionstyper för in- och utdata.
Du använder en LearningModelBinding för att binda värden till en funktion och refererar till ILearningModelFeatureDescriptor med dess namnegenskap .
Följande video ger en kort översikt över bindningsfunktioner i maskininlärningsmodeller.
Typer av funktioner
Windows ML stöder alla ONNX-funktionstyper som räknas upp i LearningModelFeatureKind. Dessa mappas till olika funktionsbeskrivningsklasser:
- Tensor: TensorFeatureDescriptor
- Sekvens: SequenceFeatureDescriptor
- Karta: MapFeatureDescriptor
- Bild: ImageFeatureDescriptor
Tensorer
Tensorer är flerdimensionella matriser och den vanligaste tensorn är en tensor med 32-bitarsflöt. Dimensionerna för tensorer är i radordning, med tätt packade sammanhängande data som representerar varje dimension. Tensorns totala storlek är produkten av storleken på varje dimension.
Sekvenser
Sekvenser är värdens vektorer. En vanlig användning av sekvenstyper är en vektor av flyttalsannolikheter, som vissa klassificeringsmodeller returnerar för att indikera noggrannhetsklassificeringen för varje förutsägelse.
Kartor
Kartor är nyckel/värde-par med information. Klassificeringsmodeller returnerar ofta en karta av strängar och flyttal som beskriver flyttalssannolikheten för varje märkt klassificeringsetikett. Till exempel kan utdata från en modell som försöker förutsäga hundrasen i en bild vara ["Boston terrier", 90.0], ["Golden retriever", 7.4], ["Poodle", 2.6].
Skalärer
De flesta kartor och sekvenser har värden som är skalärer. Dessa visar var TensorFeatureDescriptor.Shape.Size är noll (0). I det här fallet kommer kartan eller sekvensen att vara av skalärtyp. Den vanligaste är float. Till exempel skulle en karta från sträng till flyttal vara:
MapFeatureDescriptor.KeyKind == TensorKind.String
MapFeatureDescriptor.ValueDescriptor.Kind == LearningModelFeatureKind.Tensor
MapFeatureDescriptor.ValueDescriptor.as<TensorFeatureDescriptor>().Shape.Size == 0
Det faktiska kartfunktionsvärdet blir ett IMap<string, float>.
Sekvens av kartor
En sekvens med kartor är bara en vektor med nyckel/värde-par. Till exempel skulle en sekvens med sträng-till-flyttal-kartor vara av typen IVector<IMap<string, float>>. Ovanstående utdata från förutsägelser för hundraser ["Boston terrier", 90.0], ["Golden retriever", 7.4], ["Poodle", 2.6] är ett exempel på en sekvens med kartor.
Avbildningar
När du arbetar med bilder måste du vara medveten om bildformat och tensorisering.
Bildformat
Modeller tränas med bildträningsdata och vikterna sparas och skräddarsys för den träningsuppsättningen. När du skickar in en bild till modellen måste dess format matcha träningsbildernas format.
I många fall beskriver modellen det förväntade bildformatet. ONNX-modeller kan använda metadata för att beskriva förväntade bildformat.
De flesta modeller använder följande format, men detta är inte universellt för alla modeller:
- Image.BitmapPixelFormat: Bgr8
- Image.ColorSpaceGamma: SRGB
- Image.NominalPixelRange: NominalRange_0_255
Tensorisering
Bilder representeras i Windows ML i tensorformat. Tensorkonvertering är processen att omvandla en bild till en tensor och sker vid bindning.
Windows ML konverterar bilder till fyrdimensionella tensorer med 32-bitars flyttal i "NCHW-tensorformatet".
- N: Batchstorlek (eller antal bilder). Windows ML stöder för närvarande en batchstorlek N på 1.
- C: Kanalantal (1 för Gray8, 3 för Bgr8).
- H: Höjd.
- W: Bredd.
Varje bildpunkt i bilden är ett 8-bitars färgnummer som lagras i intervallet 0–255 och packas till en 32-bitars float.
Så här skickar du bilder till modellen
Det finns två sätt att skicka bilder till modeller:
ImageFeatureValue (ImageFeatureVärde)
Vi rekommenderar att du använder ImageFeatureValue för att binda bilder som indata och utdata, eftersom det tar hand om både konvertering och tensorisering, så att bilderna matchar modellens nödvändiga bildformat. De modellformattyper som stöds för närvarande är Gray8, Rgb8 och Bgr8, och det pixelintervall som stöds för närvarande är 0–255.
Du kan skapa en ImageFeatureValue med den statiska metoden ImageFeatureValue.CreateFromVideoFrame.
För att ta reda på vilket format modellen behöver använder WinML följande logik och prioritetsordning:
- Bind(String, Object, IPropertySet) åsidosätter alla bildinställningar.
- Modellmetadata kontrolleras och används om de är tillgängliga.
- Om inga modellmetadata tillhandahålls och inga egenskaper för anroparen har angetts, kommer körningstiden att försöka göra en bästa möjliga matchning.
- Om tensorn ser ut som NCHW (4-dimensionell float32, N==1) förutsätter körningen antingen Gray8 (C==1) eller Bgr8 (C==3) beroende på kanalantalet.
- NominalRange_0_255 kommer att antas
- SRGB kommer att antas
Det finns flera valfria egenskaper som du kan skicka till Bind(String, Object, IPropertySet):
- BitmapBounds: Om det anges är dessa beskärningsgränser som ska tillämpas innan avbildningen skickas till modellen.
- BitmapPixelFormat: Om det anges är det här pixelformatet som ska användas som modellpixelformat under bildkonverteringen.
För bildformer kan modellen antingen ange en specifik form som den tar (till exempel SqueezeNet tar 224 224), eller så kan modellen ange fria dimensioner för alla formbilder (många Modeller av StyleTransfer-typ kan ta bilder av variabel storlek). Anroparen kan använda BitmapBounds för att välja vilket avsnitt av avbildningen de vill använda. Om inget anges kommer körningen att skala bilden till modellstorlek (med respekt för proportioner) och sedan centrera beskärningen.
-
Om Windows ML inte stöder modellens färgformat eller pixelintervall kan du implementera konverteringar och tensorisering. Du skapar en fyrdimensionell NCHW-tensor för 32-bitars flyttal för ditt indatavärde. Se Exempel på anpassad tensorisering för ett exempel på hur du gör detta.
När den här metoden används ignoreras alla bildmetadata i modellen.
Exempel
I följande exempel visas hur du binder till en modells indata. I det här fallet skapar vi en bindning från session, skapar en ImageFeatureValue från inputFrame och binder avbildningen till modellens indata, 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);
}
Se även
- Föregående: Skapa en session
- Nästa: Utvärdera modellindata
Anmärkning
Använd följande resurser för hjälp med Windows ML:
- Om du vill ställa eller besvara tekniska frågor om Windows ML använder du taggen windows-machine-learning på Stack Overflow-.
- Om du vill rapportera en bugg, skicka in en felrapport på vår GitHub-sida .