Självstudie: Identifiera stopptecken i avbildningar med Model Builder
Lär dig hur du skapar en objektidentifieringsmodell med ML.NET Model Builder och Azure Machine Learning för att identifiera och hitta stopptecken i avbildningar.
I den här guiden får du lära dig att:
- Förbereda och förstå data
- Skapa en model builder-konfigurationsfil
- Välj scenario
- Välj träningsmiljö
- Läsa in data
- Träna modellen
- Utvärdera modellen
- Använda modellen för förutsägelser
Krav
En lista över krav och installationsanvisningar finns i installationsguiden för Model Builder.
Översikt över objektidentifiering i Model Builder
Objektidentifiering är ett problem med visuellt innehåll. Objektidentifiering är nära relaterat till bildklassificering, men utför bildklassificering i en mer detaljerad skala. Objektidentifiering både hittar och kategoriserar entiteter i bilder. Objektidentifieringsmodeller tränas ofta med djupinlärning och neurala nätverk. Mer information finns i Djupinlärning kontra maskininlärning .
Använd objektidentifiering när bilder innehåller flera objekt av olika typer.
Några användningsfall för objektidentifiering är:
- Self-Driving bilar
- Robotics
- Ansiktsavkänning
- Arbetsplatssäkerhet
- Objekträkning
- Aktivitetsigenkänning
Det här exemplet skapar ett C# .NET Core-konsolprogram som identifierar stoppskyltar i avbildningar med hjälp av en maskininlärningsmodell som skapats med Model Builder. Du hittar källkoden för den här självstudien på GitHub-lagringsplatsen dotnet/machinelearning-samples .
Förbereda och förstå data
Datauppsättningen Stop Sign består av 50 bilder som hämtats från Unsplash, som var och en innehåller minst en stoppskylt.
Skapa ett nytt VoTT-projekt
Ladda ned datauppsättningen med 50 stoppsigneringsbilder och packa upp.
Ladda ned VoTT (Visual Object Tagging Tool).
Öppna VoTT och välj Nytt projekt.
I Projektinställningar ändrar du Visningsnamn till "StopSignObjDetection".
Ändra säkerhetstoken för att generera ny säkerhetstoken.
Bredvid Källanslutning väljer du Lägg till anslutning.
I Anslutningsinställningar ändrar du Visningsnamn för källanslutningen till "StopSignImages" och väljer Lokalt filsystem som Provider. För Mappsökväg väljer du mappen Stop-Signs som innehåller de 50 träningsbilderna och väljer sedan Spara anslutning.
I Projektinställningar ändrar du Källanslutning till StopSignImages (anslutningen som du nyss skapade).
Ändra även Målanslutning till StopSignImages . Dina projektinställningar bör nu se ut ungefär som på den här skärmbilden:
Välj Spara projekt.
Lägga till tagg- och etikettbilder
Nu bör du se ett fönster med förhandsgranskningsbilder av alla träningsbilder till vänster, en förhandsgranskning av den valda bilden i mitten och kolumnen Taggar till höger. Den här skärmen är Taggar-redigeraren.
Välj den första (plusformade) ikonen i verktygsfältet Taggar för att lägga till en ny tagg.
Ge taggen namnet "Stop-Sign" och tryck på Retur på tangentbordet.
Klicka och dra om du vill rita en rektangel runt varje stopptecken i bilden. Om markören inte låter dig rita en rektangel kan du prova att välja verktyget Rita rektangel från verktygsfältet längst upp eller använda kortkommandot R.
När du har ritat rektangeln väljer du taggen Stop-Sign som du skapade i föregående steg för att lägga till taggen i avgränsningsrutan.
Klicka på förhandsgranskningsbilden för nästa bild i datauppsättningen och upprepa den här processen.
Fortsätt steg 3–4 för varje stopptecken i varje bild.
Exportera din VoTT JSON
När du har märkt alla träningsbilder kan du exportera filen som ska användas av Model Builder för träning.
Välj den fjärde ikonen i det vänstra verktygsfältet (den med den diagonala pilen i en ruta) för att gå till Exportinställningar.
Lämna providern som VoTT JSON.
Ändra tillgångstillståndet till Endast taggade tillgångar.
Avmarkera Inkludera bilder. Om du inkluderar bilderna kopieras träningsbilderna till exportmappen som genereras, vilket inte är nödvändigt.
Välj Spara exportinställningar.
Gå tillbaka till redigeraren Taggar (den andra ikonen i det vänstra verktygsfältet formad som ett menyfliksområde). I det övre verktygsfältet väljer du ikonen Exportera projekt (den sista ikonen formad som en pil i en ruta) eller använder kortkommandot Ctrl+E.
Den här exporten skapar en ny mapp med namnet vott-json-export i mappen Stop-Sign-Images och genererar en JSON-fil med namnet StopSignObjDetection-export i den nya mappen. Du kommer att använda den här JSON-filen i nästa steg för att träna en objektidentifieringsmodell i Model Builder.
Skapa ett konsolprogram
I Visual Studio skapar du ett C# .NET Core-konsolprogram med namnet StopSignDetection.
Skapa en mbconfig
fil
- I Solution Explorer högerklickar du på projektet StopSignDetection och väljer Lägg till>maskininlärningsmodell... för att öppna användargränssnittet för Model Builder.
- I dialogrutan ger du Model Builder-projektet namnet StopSignDetection och klickar på Lägg till.
Välj ett scenario
I det här exemplet är scenariot objektidentifiering. I steget Scenario i Model Builder väljer du scenariot Objektidentifiering .
Om du inte ser Objektidentifiering i listan över scenarier kan du behöva uppdatera din version av Model Builder.
Välj träningsmiljö
Model Builder stöder för närvarande endast träning av objektidentifieringsmodeller med Azure Machine Learning, så Azure-träningsmiljön är vald som standard.
Om du vill träna en modell med Azure ML måste du skapa ett Azure ML-experiment från Model Builder.
Ett Azure ML-experiment är en resurs som kapslar in konfigurationen och resultaten för en eller flera träningskörningar för maskininlärning.
Om du vill skapa ett Azure ML-experiment måste du först konfigurera din miljö i Azure. Ett experiment behöver följande för att köras:
- En Azure-prenumeration
- En arbetsyta: en Azure ML-resurs som tillhandahåller en central plats för alla Azure ML-resurser och artefakter som skapats som en del av en träningskörning.
- En beräkning: en Azure Machine Learning-beräkning är en molnbaserad virtuell Linux-dator som används för träning. Läs mer om beräkningstyper som stöds av Model Builder.
Konfigurera en Azure ML-arbetsyta
Så här konfigurerar du din miljö:
Välj knappen Konfigurera arbetsyta .
I dialogrutan Skapa nytt experiment väljer du din Azure-prenumeration.
Välj en befintlig arbetsyta eller skapa en ny Azure ML-arbetsyta.
När du skapar en ny arbetsyta etableras följande resurser:
- Azure Machine Learning-arbetsyta
- Azure Storage
- Azure Application Insights
- Azure Container Registry
- Azure Key Vault
Därför kan den här processen ta några minuter.
Välj en befintlig beräkning eller skapa en ny Azure ML-beräkning. Den här processen kan ta ett par minuter.
Lämna standardnamnet för experimentet och välj Skapa.
Det första experimentet skapas och experimentnamnet registreras på arbetsytan. Alla efterföljande körningar (om samma experimentnamn används) loggas som en del av samma experiment. Annars skapas ett nytt experiment.
Om du är nöjd med konfigurationen väljer du knappen Nästa steg i Model Builder för att gå vidare till steget Data .
Läsa in data
I steget Data i Model Builder väljer du din träningsdatauppsättning.
Viktigt
Model Builder accepterar för närvarande endast formatet för JSON som genereras av VoTT.
Välj knappen i avsnittet Indata och använd Utforskaren för att hitta
StopSignObjDetection-export.json
som ska finnas i katalogen Stop-Signs/vott-json-export.Om dina data ser korrekta ut i dataförhandsgranskningen väljer du Nästa steg för att gå vidare till steget Träna .
Träna modellen
Nästa steg är att träna din modell.
På skärmen Model Builder Train (Träna modellbyggare) väljer du knappen Starta träning .
Nu laddas dina data upp till Azure Storage och träningsprocessen börjar i Azure ML.
Träningsprocessen tar lite tid och tiden kan variera beroende på storleken på den beräkning som valts samt mängden data. Första gången en modell tränas i Azure kan du förvänta dig en något längre träningstid eftersom resurser måste etableras. För det här exemplet på 50 bilder tog träningen cirka 16 minuter.
Du kan spåra förloppet för dina körningar i Azure Machine Learning-portalen genom att välja länken Övervaka aktuell körning i Azure Portal i Visual Studio.
När träningen är klar väljer du knappen Nästa steg för att gå vidare till steget Utvärdera .
Utvärdera modellen
På skärmen Utvärdera får du en översikt över resultaten från träningsprocessen, inklusive modellens noggrannhet.
I det här fallet säger noggrannheten 100 %, vilket innebär att modellen är mer än sannolikt överanpassad på grund av för få bilder i datauppsättningen.
Du kan använda prova din modell för att snabbt kontrollera om din modell fungerar som förväntat.
Välj Bläddra i en bild och ange en testbild, helst en som modellen inte använde som en del av träningen.
Poängen som visas på varje identifierad avgränsningsruta anger det identifierade objektets konfidens . I skärmbilden ovan visar till exempel poängen i avgränsningsrutan runt stopptecknet att modellen är 99 % säker på att det identifierade objektet är ett stopptecken.
Tröskelvärdet Poäng, som kan ökas eller minskas med skjutreglaget för tröskelvärde, lägger till och tar bort identifierade objekt baserat på deras poäng. Om tröskelvärdet till exempel är 0,51 visar modellen bara objekt som har förtroendepoängen 0,51 eller högre. När du ökar tröskelvärdet ser du mindre identifierade objekt, och när du minskar tröskelvärdet visas fler identifierade objekt.
Om du inte är nöjd med dina noggrannhetsmått är ett enkelt sätt att försöka förbättra modellens noggrannhet att använda mer data. Annars väljer du länken Nästa steg för att gå vidare till steget Förbruka i Model Builder.
(Valfritt) Använda modellen
Det här steget innehåller projektmallar som du kan använda för att använda modellen. Det här steget är valfritt och du kan välja den metod som bäst passar dina behov för hur modellen ska hanteras.
- Konsolapp
- Webb-API
Konsolapp
När du lägger till en konsolapp i din lösning uppmanas du att namnge projektet.
Ge konsolprojektet namnet StopSignDetection_Console.
Klicka på Lägg till i lösning för att lägga till projektet i den aktuella lösningen.
Kör appen.
Utdata som genereras av programmet bör se ut ungefär som kodfragmentet nedan:
Predicted Boxes: Top: 73.225296, Left: 256.89764, Right: 533.8884, Bottom: 484.24243, Label: stop-sign, Score: 0.9970765
Webb-API
När du lägger till ett webb-API i din lösning uppmanas du att namnge projektet.
Ge webb-API-projektet namnet StopSignDetection_API.
Klicka på Lägg till i lösning för att lägga till projektet i den aktuella lösningen.
Kör appen.
Öppna PowerShell och ange följande kod där PORT är den port som programmet lyssnar på.
$body = @{ ImageSource = <Image location on your local machine> } Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
Om det lyckas bör utdata se ut ungefär som texten nedan.
boxes labels scores boundingBoxes ----- ------ ------ ------------- {339.97797, 154.43184, 472.6338, 245.0796} {1} {0.99273646} {}
- Kolumnen
boxes
ger koordinaterna för avgränsningsrutan för objektet som identifierades. Värdena här tillhör koordinaterna till vänster, överkant, höger respektive nederkant. labels
är indexet för de förutsagda etiketterna. I det här fallet är värdet 1 ett stopptecken.scores
definierar hur säker modellen är på att avgränsningsrutan tillhör den etiketten.
Anteckning
(Valfritt) Koordinaterna för avgränsningsrutan normaliseras för en bredd på 800 bildpunkter och en höjd på 600 bildpunkter. Om du vill skala avgränsningsboxkoordinaterna för bilden i ytterligare efterbearbetning måste du:
- Multiplicera de övre och nedre koordinaterna med den ursprungliga bildhöjden och multiplicera de vänstra och högra koordinaterna med den ursprungliga bildbredden.
- Dela upp de övre och nedre koordinaterna med 600 och dividera koordinaterna för vänster och höger med 800.
Med tanke på de ursprungliga bilddimensionerna och , och med
ModelOutput
namnetprediction
, visar följande kodfragment hur du skalar koordinaternaBoundingBox
:actualImageWidth
actualImageHeight
var top = originalImageHeight * prediction.Top / 600; var bottom = originalImageHeight * prediction.Bottom / 600; var left = originalImageWidth * prediction.Left / 800; var right = originalImageWidth * prediction.Right / 800;
En bild kan ha fler än en avgränsningsruta, så samma process måste tillämpas på var och en av avgränsningsrutorna i bilden.
- Kolumnen
Grattis! Du har skapat en maskininlärningsmodell för att identifiera stopptecken i avbildningar med Hjälp av Model Builder. Du hittar källkoden för den här självstudien på GitHub-lagringsplatsen dotnet/machinelearning-samples .
Ytterligare resurser
Mer information om ämnen som nämns i den här självstudien finns i följande resurser: