Zelfstudie: Stoptekens in afbeeldingen detecteren met Model Builder

Meer informatie over het bouwen van een objectdetectiemodel met behulp van ML.NET Model Builder en Azure Machine Learning om stopaantekens in afbeeldingen te detecteren en te vinden.

In deze zelfstudie leert u het volgende:

  • De gegevens voorbereiden en begrijpen
  • Een configuratiebestand voor de opbouwfunctie voor modellen maken
  • Kies het scenario
  • De trainingsomgeving kiezen
  • De gegevens laden
  • Het model trainen
  • Het model evalueren
  • Het model gebruiken voor voorspellingen

Vereisten

Ga naar de Installatiehandleiding voor Model Builder voor een lijst met vereisten en installatie-instructies.

Overzicht van objectdetectie van Model Builder

Objectdetectie is een probleem met Computer Vision. Hoewel objectdetectie nauw verwant is aan afbeeldingsclassificatie, wordt afbeeldingsclassificatie op een meer gedetailleerde schaal uitgevoerd. Objectdetectie zoekt en categoriseert entiteiten in afbeeldingen. Objectdetectiemodellen worden doorgaans getraind met behulp van deep learning en neurale netwerken. Zie Deep learning versus machine learning voor meer informatie.

Gebruik objectdetectie wanneer afbeeldingen meerdere objecten van verschillende typen bevatten.

Schermopnamen van afbeeldingsclassificatie versus objectclassificatie.

Enkele gebruiksvoorbeelden voor objectdetectie zijn:

  • Self-Driving Auto's
  • Robotica
  • Gezichtsdetectie
  • Veiligheid op de werkplek
  • Object tellen
  • Activiteitsherkenning

In dit voorbeeld wordt een C# .NET Core-consoletoepassing gemaakt waarmee stoptekens in afbeeldingen worden gedetecteerd met behulp van een machine learning-model dat is gebouwd met Model Builder. U vindt de broncode voor deze zelfstudie in de GitHub-opslagplaats dotnet/machinelearning-samples .

De gegevens voorbereiden en begrijpen

De gegevensset Stop Sign bestaat uit 50 afbeeldingen die zijn gedownload van Unsplash, die elk ten minste één stopteken bevatten.

Een nieuw VoTT-project maken

  1. Download de gegevensset van 50 stoptekenafbeeldingen en pak het uit.

  2. Download VoTT (Visual Object Tagging Tool).

  3. Open VoTT en selecteer Nieuw project.

    VoTT-startscherm

  4. Wijzig in Projectinstellingen de weergavenaam in StopSignObjDetection.

  5. Wijzig het beveiligingstoken inNieuw beveiligingstoken genereren.

  6. Selecteer naast Bronverbinding de optie Verbinding toevoegen.

  7. Wijzig in Verbindingsinstellingen de weergavenaam voor de bronverbinding in StopSignImages en selecteer Lokaal bestandssysteem als provider. Selecteer voor Mappad de map Stop-Signs met de 50 trainingsafbeeldingen en selecteer verbinding opslaan.

    Dialoogvenster Nieuwe voTT-verbinding

  8. Wijzig in Projectinstellingen de bronverbinding in StopSignImages (de verbinding die u zojuist hebt gemaakt).

  9. Wijzig de doelverbinding ook in StopSignImages . Uw projectinstellingen moeten er nu uitzien zoals in deze schermafbeelding:

    Dialoogvenster Instellingen voTT-project

  10. Selecteer Project opslaan.

Tag- en labelafbeeldingen toevoegen

U ziet nu een venster met voorbeeldafbeeldingen van alle trainingsafbeeldingen aan de linkerkant, een voorbeeld van de geselecteerde afbeelding in het midden en een kolom Tags aan de rechterkant. Dit scherm is de Tags-editor.

  1. Selecteer het eerste pictogram (plusteken) op de werkbalk Tags om een nieuwe tag toe te voegen.

    VoTT-pictogram voor nieuwe tag

  2. Geef de tag de naam Stop-Sign en druk op Enter op het toetsenbord.

    Nieuwe VoTT-tag

  3. Klik en sleep om een rechthoek rond elk stopteken in de afbeelding te tekenen. Als u met de cursor geen rechthoek kunt tekenen, selecteert u het hulpmiddel Rechthoek tekenen op de werkbalk bovenaan of gebruikt u de sneltoets R.

  4. Nadat u de rechthoek hebt getekend, selecteert u de tag Stop-Sign die u in de vorige stappen hebt gemaakt om de tag toe te voegen aan het begrenzingsvak.

  5. Klik op de voorbeeldafbeelding voor de volgende afbeelding in de gegevensset en herhaal dit proces.

  6. Ga door met stap 3-4 voor elke stop-aanmelding in elke afbeelding.

    VoTT-aantekeningen toevoegen aan afbeeldingen

Uw VoTT JSON exporteren

Zodra u al uw trainingsafbeeldingen hebt gelabeld, kunt u het bestand exporteren dat door Model Builder wordt gebruikt voor training.

  1. Selecteer het vierde pictogram in de linkerwerkbalk (het pictogram met de diagonale pijl in een vak) om naar exportinstellingen te gaan.

  2. Laat providerop VoTT JSON staan.

  3. Wijzig de assetstatus inAlleen gelabelde assets.

  4. Schakel Het selectievakje Installatiekopieën opnemen uit. Als u de afbeeldingen opneemt, worden de trainingsafbeeldingen gekopieerd naar de exportmap die wordt gegenereerd, wat niet nodig is.

  5. Selecteer Exportinstellingen opslaan.

    VoTT-exportinstellingen

  6. Terug naar de Tags-editor (het tweede pictogram op de linkerwerkbalk in de vorm van een lint). Selecteer in de bovenste werkbalk het pictogram Project exporteren (het laatste pictogram in de vorm van een pijl in een vak) of gebruik de sneltoets Ctrl+E.

    Knop VoTT Exporteren

Met deze export wordt een nieuwe map met de naam vott-json-export gemaakt in de map Stop-Sign-Images en wordt een JSON-bestand met de naam StopSignObjDetection-export in die nieuwe map gegenereerd. U gebruikt dit JSON-bestand in de volgende stappen voor het trainen van een objectdetectiemodel in Model Builder.

Een consoletoepassing maken

Maak in Visual Studio een C# .NET Core-consoletoepassing met de naam StopSignDetection.

mbconfig Een bestand maken

  1. Klik in Solution Explorer met de rechtermuisknop op het project StopSignDetection en selecteerMachine Learning-modeltoevoegen>... om de gebruikersinterface van modelbouwer te openen.
  2. Geef in het dialoogvenster het project Model builder de naam StopSignDetection en klik op Toevoegen.

Een scenario kiezen

Voor dit voorbeeld is objectdetectie het scenario. Selecteer in de stap Scenario van Model builder het scenario Objectdetectie .

Model Builder wizard in Visual Studio

Als objectdetectie niet wordt weergegeven in de lijst met scenario's, moet u mogelijk uw versie van Model Builder bijwerken.

De trainingsomgeving kiezen

Momenteel ondersteunt Model Builder alleen trainingsobjectdetectiemodellen met Azure Machine Learning, dus de Azure-trainingsomgeving is standaard geselecteerd.

Selectie van Azure-trainingsomgeving

Als u een model wilt trainen met behulp van Azure ML, moet u een Azure ML-experiment maken vanuit Model builder.

Een Azure ML-experiment is een resource die de configuratie en resultaten voor een of meer machine learning-trainingsuitvoeringen omvat.

Als u een Azure ML-experiment wilt maken, moet u eerst uw omgeving in Azure configureren. Een experiment heeft het volgende nodig om uit te voeren:

  • Een Azure-abonnement
  • Een werkruimte: een Azure ML-resource die een centrale plaats biedt voor alle Azure ML-resources en -artefacten die zijn gemaakt als onderdeel van een trainingsuitvoering.
  • Een rekenproces: een Azure Machine Learning-berekening is een cloudgebaseerde Linux-VM die wordt gebruikt voor training. Meer informatie over rekentypen die worden ondersteund door Model Builder.

Een Azure ML-werkruimte instellen

Uw omgeving configureren:

  1. Selecteer de knop Werkruimte instellen .

  2. Selecteer uw Azure-abonnement in het dialoogvenster Nieuw experiment maken .

  3. Selecteer een bestaande werkruimte of maak een nieuwe Azure ML-werkruimte.

    Wanneer u een nieuwe werkruimte maakt, worden de volgende resources ingericht:

    • Azure Machine Learning-werkruimte
    • Azure Storage
    • Azure Application Insights
    • Azure Container Registry
    • Azure Key Vault

    Als gevolg hiervan kan dit proces enkele minuten duren.

  4. Selecteer een bestaande berekening of maak een nieuwe Azure ML-berekening. Dit proces kan enkele minuten duren.

  5. Laat de standaardnaam van het experiment staan en selecteer Maken.

    Dialoogvenster Voor het instellen van Azure-werkruimten

Het eerste experiment wordt gemaakt en de naam van het experiment wordt geregistreerd in de werkruimte. Eventuele volgende uitvoeringen (als dezelfde experimentnaam wordt gebruikt) worden geregistreerd als onderdeel van hetzelfde experiment. Anders wordt er een nieuw experiment gemaakt.

Als u tevreden bent met uw configuratie, selecteert u de knop Volgende stap in Modelbuilder om naar de stap Gegevens te gaan.

De gegevens laden

In de stap Gegevens van Model Builder selecteert u uw trainingsgegevensset.

Belangrijk

Model Builder accepteert momenteel alleen de indeling van JSON die is gegenereerd door VoTT.

  1. Selecteer de knop in de sectie Invoer en gebruik de Bestandenverkenner om de StopSignObjDetection-export.json te vinden die zich in de map Stop-Signs/vott-json-export bevindt.

    Gegevensstap modelbouwer

  2. Als uw gegevens er correct uitzien in het gegevensvoorbeeld, selecteert u Volgende stap om door te gaan naar de stap Trainen .

Het model trainen

De volgende stap is het trainen van uw model.

Selecteer in het scherm Training voor de opbouwfunctie voor modellen de knop Training starten .

Op dit moment worden uw gegevens geüpload naar Azure Storage en begint het trainingsproces in Azure ML.

Het trainingsproces duurt enige tijd en de hoeveelheid tijd kan variëren, afhankelijk van de geselecteerde rekenkracht en de hoeveelheid gegevens. De eerste keer dat een model wordt getraind in Azure, kunt u een iets langere trainingstijd verwachten omdat er resources moeten worden ingericht. Voor dit voorbeeld van 50 afbeeldingen duurde de training ongeveer 16 minuten.

U kunt de voortgang van uw uitvoeringen bijhouden in de Azure Machine Learning-portal door de koppeling Huidige uitvoering bewaken in Azure Portal in Visual Studio te selecteren.

Nadat de training is voltooid, selecteert u de knop Volgende stap om door te gaan naar de stap Evalueren .

Het model evalueren

In het scherm Evalueren krijgt u een overzicht van de resultaten van het trainingsproces, inclusief de nauwkeurigheid van het model.

Evaluatiestap voor modelbouwer

In dit geval is de nauwkeurigheid 100%, wat betekent dat het model meer dan waarschijnlijk overfit is vanwege te weinig afbeeldingen in de gegevensset.

U kunt de ervaring Uw model uitproberen gebruiken om snel te controleren of uw model naar verwachting presteert.

Selecteer Bladeren door een installatiekopie en geef een testafbeelding op, bij voorkeur een afbeelding die niet door het model is gebruikt als onderdeel van de training.

Modelbouwer Uw model uitproberen

De score die wordt weergegeven op elk gedetecteerd begrenzingsvak geeft de betrouwbaarheid van het gedetecteerde object aan. In de bovenstaande schermopname geeft de score op het begrenzingsvak rond het stopteken bijvoorbeeld aan dat het model 99% zeker is dat het gedetecteerde object een stopteken is.

Met de scoredrempelwaarde, die kan worden verhoogd of verlaagd met de schuifregelaar drempelwaarde, worden gedetecteerde objecten toegevoegd en verwijderd op basis van hun scores. Als de drempelwaarde bijvoorbeeld .51 is, toont het model alleen objecten met een betrouwbaarheidsscore van .51 of hoger. Wanneer u de drempelwaarde verhoogt, ziet u minder gedetecteerde objecten en naarmate u de drempelwaarde verlaagt, ziet u meer gedetecteerde objecten.

Als u niet tevreden bent met de nauwkeurigheid van uw metrische gegevens, kunt u proberen de nauwkeurigheid van het model te verbeteren door meer gegevens te gebruiken. Selecteer anders de koppeling Volgende stap om door te gaan naar de stap Verbruiken in modelbouwer.

(Optioneel) Het model gebruiken

Deze stap bevat projectsjablonen die u kunt gebruiken om het model te gebruiken. Deze stap is optioneel en u kunt de methode kiezen die het beste past bij uw behoeften voor het leveren van het model.

  • Console-app
  • Web-API

Console-app

Wanneer u een console-app toevoegt aan uw oplossing, wordt u gevraagd het project een naam te geven.

  1. Noem het consoleproject StopSignDetection_Console.

  2. Klik op Toevoegen aan oplossing om het project toe te voegen aan uw huidige oplossing.

  3. Voer de toepassing uit.

    De uitvoer die door het programma wordt gegenereerd, ziet er ongeveer als volgt uit:

    Predicted Boxes:
    
    Top: 73.225296, Left: 256.89764, Right: 533.8884, Bottom: 484.24243, Label: stop-sign, Score: 0.9970765
    

Web-API

Wanneer u een web-API toevoegt aan uw oplossing, wordt u gevraagd om het project een naam te geven.

  1. Noem het web-API-project StopSignDetection_API.

  2. Klik op Toevoegen aan oplossing om het project toe te voegen aan uw huidige oplossing.

  3. Voer de toepassing uit.

  4. Open PowerShell en voer de volgende code in, waarbij PORT de poort is waarop uw toepassing luistert.

    $body = @{
         ImageSource = <Image location on your local machine>
     }
    
     Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. Als dit lukt, moet de uitvoer er ongeveer uitzien als de onderstaande tekst.

    boxes                                      labels scores       boundingBoxes
    -----                                      ------ ------       -------------
    {339.97797, 154.43184, 472.6338, 245.0796} {1}    {0.99273646} {}
    
    • De boxes kolom bevat de coördinaten van het begrenzingsvak van het object dat is gedetecteerd. De waarden hier horen respectievelijk bij de coördinaten links, boven, rechts en onder.
    • De labels zijn de index van de voorspelde labels. In dit geval is de waarde 1 een stopteken.
    • De scores definieert hoe zeker het model is dat het begrenzingsvak tot dat label behoort.

    Notitie

    (Optioneel) De coördinaten van het begrenzingsvak worden genormaliseerd voor een breedte van 800 pixels en een hoogte van 600 pixels. Als u de coördinaten van het begrenzingsvak voor uw afbeelding wilt schalen in verdere naverwerking, moet u het volgende doen:

    1. Vermenigvuldig de bovenste en onderste coördinaten met de oorspronkelijke afbeeldingshoogte en vermenigvuldig de coördinaten links en rechts met de oorspronkelijke afbeeldingsbreedte.
    2. Deel de bovenste en onderste coördinaten door 600 en deel de coördinaten links en rechts door 800.

    Bijvoorbeeld, gezien de oorspronkelijke afbeeldingsdimensiesactualImageHeight , en actualImageWidth, en een ModelOutput met de naam prediction, laat het volgende codefragment zien hoe u de BoundingBox coördinaten kunt schalen:

    var top = originalImageHeight * prediction.Top / 600;
    var bottom = originalImageHeight * prediction.Bottom / 600;
    var left = originalImageWidth * prediction.Left / 800;
    var right = originalImageWidth * prediction.Right / 800;
    

    Een afbeelding kan meer dan één begrenzingsvak bevatten, dus hetzelfde proces moet worden toegepast op elk van de begrenzingsvakken in de afbeelding.

Gefeliciteerd U hebt een machine learning-model gemaakt om stoptekens in afbeeldingen te detecteren met Behulp van Model Builder. U vindt de broncode voor deze zelfstudie in de GitHub-opslagplaats dotnet/machinelearning-samples .

Aanvullende resources

Ga naar de volgende bronnen voor meer informatie over onderwerpen die in deze zelfstudie worden genoemd: