Megosztás a következőn keresztül:


Oktatóanyag: Automatizált vizuális ellenőrzés átviteles tanulással a ML.NET Képbesorolási API-val

Megtudhatja, hogyan taníthat be egyéni mélytanulási modellt a transfer learning, egy előre betanított TensorFlow-modell és a ML.NET Képbesorolási API használatával, a betonfelületek lemezképeinek repedtként vagy fel nem vettként való besorolásához.

Ebben az oktatóanyagban a következőket sajátíthatja el:

  • A probléma ismertetése
  • Tudnivalók a ML.NET Képosztályozási API-ról
  • Az előre betanított modell ismertetése
  • Átviteltanulás használata egyéni TensorFlow-rendszerkép-besorolási modell betanításához
  • Képek osztályozása az egyéni modellel

Előfeltételek

A probléma ismertetése

A képbesorolás számítógépes látási probléma. A képbesorolás bemenetként veszi fel a képet, és kategorizálja azt egy előírt osztályba. A képbesorolási modelleket általában mélytanulási és neurális hálózatok használatával tanítják be. További információ: Mély tanulás és gépi tanulás.

Néhány olyan forgatókönyv, ahol a képbesorolás hasznos:

  • Arcfelismerés
  • Érzelemészlelés
  • Orvosi diagnózis
  • Jellegzetesség észlelése

Ez az oktatóanyag betanított egy egyéni képbesorolási modellt a hídfedélzetek automatikus vizuális ellenőrzésére a repedések által sérült struktúrák azonosításához.

ML.NET Képbesorolási API

ML.NET a képbesorolás különböző módjait kínálja. Ez az oktatóanyag az Image Classification API használatával alkalmazza a transzfertanulást. A Képbesorolási API a TensorFlow.NET, egy alacsony szintű kódtárat használ, amely C#-kötéseket biztosít a TensorFlow C++ API-hoz.

Mi az a tudásátadás?

A tanulás átadása az egyik probléma megoldásából származó tudást egy másik kapcsolódó problémára alkalmazza.

A mélytanulási modell alapoktól való betanításához több paramétert, nagy mennyiségű címkézett betanítási adatot és nagy mennyiségű számítási erőforrást (több száz GPU-órát) kell beállítani. Az előre betanított modell és a transzfertanulás használata lehetővé teszi a betanítási folyamat gyorsítását.

Betanítási folyamat

A Képbesorolási API egy előre betanított TensorFlow-modell betöltésével indítja el a betanítási folyamatot. A betanítási folyamat két lépésből áll:

  1. Szűk keresztmetszeti fázis.
  2. Betanítási fázis.

Betanítási lépések

Szűk keresztmetszet fázis

A szűk keresztmetszeti fázisban a rendszer betölti a betanítási képek készletét, és a képpontértékeket használja bemenetként vagy jellemzőként az előre betanított modell fix rétegeihez. A fagyasztott rétegek magukban foglalják a neurális hálózat összes rétegét az utolsó előtti rétegig, ismertebb nevén a szűk keresztmetszeti réteg néven. Ezeket a rétegeket fagyasztottnak nevezzük, mert ezeken a rétegeken nem történik betanítás, és a műveletek átmennek. Ezekben a befagyott rétegekben vannak kiszámítva az alacsonyabb szintű minták, amelyek segítenek a modelleknek különbséget tenni a különböző osztályok között. Minél nagyobb a rétegek száma, annál nagyobb számítási igényű ez a lépés. Szerencsére, mivel ez egy egyszeri számítás, az eredmények gyorsítótárazhatók és felhasználhatók a későbbi futtatásokban, amikor különböző paraméterekkel kísérleteznek.

Betanítási fázis

A szűk keresztmetszeti fázis kimeneti értékeinek kiszámítása után a rendszer bemenetként használja őket a modell utolsó rétegének újratanításához. Ez a folyamat iteratív, és a modellparaméterek által megadott számú alkalommal fut. Minden futtatás során a rendszer kiértékeli a veszteséget és a pontosságot. Ezután a megfelelő módosításokat hajtjuk végre a modell javítása érdekében a veszteség minimalizálása és a pontosság maximalizálása érdekében. A betanítás befejezése után két modellformátum lesz kimenet. Az egyik a .pb modell verziója, a másik pedig a .zip modell ML.NET szerializált verziója. Ha ML.NET által támogatott környezetekben dolgozik, javasoljuk, hogy a .zip modell verzióját használja. Azokban a környezetekben azonban, ahol a ML.NET nem támogatott, lehetősége van a .pb verzió használatára.

Az előre betanított modell ismertetése

Az oktatóanyagban használt előre betanított modell a ResNet v2 modell 101 rétegű változata. Az eredeti modell be van tanítva, hogy a képeket ezer kategóriába sorolja. A modell bemenetként egy 224 x 224-es méretű képet vesz fel, és a betanított osztályok osztály-valószínűségeit adja ki. Ennek a modellnek egy részét arra használják, hogy egy új modellt képezzenek ki egyedi képek felhasználásával, és így előrejelzéseket készítsenek két osztály között.

Konzolalkalmazás létrehozása

Most, hogy általános ismereteket szerezhet a transzfertanulásról és a Képbesorolási API-ról, ideje létrehozni az alkalmazást.

  1. Hozzon létre egy "DeepLearning_ImageClassification_Binary" nevű C# -konzolalkalmazást . Kattintson a Tovább gombra.

  2. Válassza a .NET 8-at a használni kívánt keretrendszerként, majd válassza a Létrehozás lehetőséget.

  3. Telepítse a Microsoft.ML NuGet-csomagot:

    Megjegyzés

    Ez a minta az említett NuGet-csomagok legújabb stabil verzióját használja, hacsak másként nem rendelkezik.

    1. A Megoldáskezelőben kattintson a jobb gombbal a projektre, és válassza a NuGet-csomagok kezeléselehetőséget.
    2. Válassza a "nuget.org" lehetőséget a Csomag forrásaként.
    3. Válassza a Tallózás lapot.
    4. Jelölje be az Include prerelease (Előzetes befoglalás) jelölőnégyzetet.
    5. Keresse meg a Microsoft.ML.
    6. Válassza a Telepítés gombot.
    7. Ha elfogadja a felsorolt csomagok licencfeltételét, válassza az Elfogadom gombot a Licenc elfogadása párbeszédpanelen.
    8. Ismételje meg ezeket a lépéseket a Microsoft.ML.Vision, a SciSharp.TensorFlow.Redist (2.3.1-es verzió) és a Microsoft.ML.ImageAnalytics NuGet-csomagok esetében.

Az adatok előkészítése és értelmezése

Megjegyzés

Az oktatóanyaghoz tartozó adatkészletek Maguire, Marc; Dorafshan, Sattar; és Thomas, Robert J. "SDNET2018: Egy betonrepedés képadatkészlet gépi tanulási alkalmazásokhoz" (2018) származnak. Tallózás az összes adatkészlet között. Papír 48. https://digitalcommons.usu.edu/all_datasets/48

SDNET2018 egy képadatkészlet, amely széljegyzeteket tartalmaz repedezett és nem repedezett betonszerkezetekhez (hídfedések, falak és járda).

SDNET2018 adathalmaz hídfedélzet mintái

Az adatok három alkönyvtárban lesznek rendszerezve:

  • A D hídfedélzeti képeket tartalmaz
  • P járdaképeket tartalmaz
  • A W faliképeket tartalmaz

Ezek az alkönyvtárak két további előtagú alkönyvtárat tartalmaznak:

  • C a repedezett felületekhez használt előtag
  • U a törésmentes felületekhez használt előtag

Ebben az oktatóanyagban csak hídfedélzeti rendszerképeket használunk.

  1. Töltse le az adathalmazt, és bontsa ki.
  2. Hozzon létre egy "Assets" nevű könyvtárat a projektben az adathalmazfájlok mentéséhez.
  3. Másolja a CD- és UD-alkönyvtárakat a nemrég kicsomagolt könyvtárból az Assets könyvtárba.

Bemeneti és kimeneti osztályok létrehozása

  1. Nyissa meg a Program.cs fájlt, és cserélje le a meglévő tartalmat a következő using irányelvekre:

    using Microsoft.ML;
    using Microsoft.ML.Vision;
    using static Microsoft.ML.DataOperationsCatalog;
    
  2. Hozzon létre egy .ImageData Ez az osztály az eredetileg betöltött adatok megjelenítésére szolgál.

    class ImageData
    {
        public string? ImagePath { get; set; }
        public string? Label { get; set; }
    }
    

    ImageData a következő tulajdonságokat tartalmazza:

    • ImagePath a teljesen kvalifikált elérési út, ahol a képfájl tárolva van.
    • Label az a kategória, amelyhez a kép tartozik. Ezt az értéket kell előrejelezni.
  3. Osztályokat hozhat létre a bemeneti és kimeneti adatokhoz.

    1. ImageData Az osztály alatt definiálja a bemeneti adatok sémáját egy új, úgynevezett ModelInputosztályban.

      class ModelInput
      {
          public byte[]? Image { get; set; }
          public uint LabelAsKey { get; set; }
          public string? ImagePath { get; set; }
          public string? Label { get; set; }
      }
      

      ModelInput a következő tulajdonságokat tartalmazza:

      • Image a byte[] kép ábrázolása. A modell elvárja, hogy a képadatok ilyen típusúak legyenek a betanításhoz.
      • LabelAsKey a Label számszerű ábrázolása.
      • ImagePath a teljesen kvalifikált elérési út, ahol a képfájl tárolva van.
      • Label az a kategória, amelyhez a kép tartozik. Ezt az értéket kell előrejelezni.

      Csak Image és LabelAsKey kerülnek felhasználásra a modell betanításához és az előrejelzések készítéséhez. Az ImagePath és Label tulajdonságok megmaradnak, hogy kényelmesen elérhessük az eredeti képfájl nevét és kategóriáját.

    2. Ezután az ModelInput osztály alatt definiálja a kimeneti adatok sémáját egy új, úgynevezett ModelOutputosztályban.

      class ModelOutput
      {
          public string? ImagePath { get; set; }
          public string? Label { get; set; }
          public string? PredictedLabel { get; set; }
      }
      

      ModelOutput a következő tulajdonságokat tartalmazza:

      • ImagePath a teljesen kvalifikált elérési út, ahol a képfájl tárolva van.
      • Label az az eredeti kategória, amelyhez a kép tartozik. Ezt az értéket kell előrejelezni.
      • PredictedLabel a modell által előrejelzett érték.

      ModelInputEhhez hasonlóan csak az PredictedLabel előrejelzések készítéséhez szükséges, mivel a modell által készített előrejelzést tartalmazza. Az ImagePath és Label tulajdonságokat a rendszer megőrzi, hogy könnyebben hozzáférhessen az eredeti képfájl nevéhez és kategóriájához.

Elérési utak definiálása és változók inicializálása

  1. using Az utasítások alatt adja hozzá a következő kódot:

    • Határozza meg az eszközök helyét.

    • Inicializálja a mlContext változót az MLContext új példányával.

      Az MLContext osztály az összes ML.NET művelet kiindulópontja, és az mlContext inicializálása új ML.NET környezetet hoz létre, amely megosztható a modelllétrehozási munkafolyamat-objektumok között. Ez fogalmilag hasonlít az Entity Frameworkben lévő DbContext-ra.

    var projectDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "../../../"));
    var assetsRelativePath = Path.Combine(projectDirectory, "Assets");
    
    MLContext mlContext = new();
    

Adatok betöltése

Adatbetöltési segédprogram létrehozása

A rendszer két alkönyvtárban tárolja a képeket. Az adatok betöltése előtt az objektumokat egy objektumlistába ImageData kell formázni. Ehhez hozza létre a metódust LoadImagesFromDirectory :

static IEnumerable<ImageData> LoadImagesFromDirectory(string folder, bool useFolderNameAsLabel = true)
{
    var files = Directory.GetFiles(folder, "*",
        searchOption: SearchOption.AllDirectories);

    foreach (var file in files)
    {
        if ((Path.GetExtension(file) != ".jpg") && (Path.GetExtension(file) != ".png"))
            continue;

        var label = Path.GetFileName(file);

        if (useFolderNameAsLabel)
            label = Directory.GetParent(file)?.Name;
        else
        {
            for (int index = 0; index < label.Length; index++)
            {
                if (!char.IsLetter(label[index]))
                {
                    label = label[..index];
                    break;
                }
            }
        }

        yield return new ImageData()
        {
            ImagePath = file,
            Label = label
        };
    }
}

A LoadImagesFromDirectory módszer:

  • Lekéri az összes fájl elérési útját az alkönyvtárakból.
  • Egy utasítással foreach végigvezeti az egyes fájlokat, és ellenőrzi, hogy a fájlkiterjesztések támogatottak-e. A Képbesorolási API támogatja a JPEG- és PNG-formátumokat.
  • Lekéri a fájl címkéjét. Ha a useFolderNameAsLabel paraméter értéke a következő, trueakkor a rendszer a szülőkönyvtárat használja címkeként, amelyben a fájl mentésre kerül. Ellenkező esetben arra számít, hogy a címke a fájlnév vagy maga a fájlnév előtagja lesz.
  • Létrehoz egy új példányt a ModelInput.

Az adatok előkészítése

Adja hozzá a következő kódot ahhoz a sorhoz, amelyben létrehozza az új MLContext példányt.

IEnumerable<ImageData> images = LoadImagesFromDirectory(folder: assetsRelativePath, useFolderNameAsLabel: true);

IDataView imageData = mlContext.Data.LoadFromEnumerable(images);

IDataView shuffledData = mlContext.Data.ShuffleRows(imageData);

var preprocessingPipeline = mlContext.Transforms.Conversion.MapValueToKey(
        inputColumnName: "Label",
        outputColumnName: "LabelAsKey")
    .Append(mlContext.Transforms.LoadRawImageBytes(
        outputColumnName: "Image",
        imageFolder: assetsRelativePath,
        inputColumnName: "ImagePath"));

IDataView preProcessedData = preprocessingPipeline
                    .Fit(shuffledData)
                    .Transform(shuffledData);

TrainTestData trainSplit = mlContext.Data.TrainTestSplit(data: preProcessedData, testFraction: 0.3);
TrainTestData validationTestSplit = mlContext.Data.TrainTestSplit(trainSplit.TestSet);

IDataView trainSet = trainSplit.TrainSet;
IDataView validationSet = validationTestSplit.TrainSet;
IDataView testSet = validationTestSplit.TestSet;

Az előző kód:

  • Meghívja a LoadImagesFromDirectory segédprogram metódust, hogy lekérje a betanításhoz használt képek listáját a változó inicializálása mlContext után.

  • Betölti a képeket egy IDataView elembe a LoadFromEnumerable metódus használatával.

  • A metódus használatával elkeveri az ShuffleRows adatokat. Az adatok betöltése a könyvtárakból beolvasott sorrendben történik. A keverést a kiegyensúlyozás érdekében hajtják végre.

  • A betanítás előtt végez némi előfeldolgozást az adatokon. Ez azért van így, mert a gépi tanulási modellek numerikus formátumban várják a bemenetet. Az előfeldolgozási kód egy EstimatorChain-t hoz létre, amely a MapValueToKey és LoadRawImageBytes átalakításokból áll. Az MapValueToKey átalakítás az oszlop kategorikus értékét Label veszi át, numerikus KeyType értékké alakítja, és egy új, úgynevezett LabelAsKeyoszlopban tárolja. A LoadImages a ImagePath oszlop értékeit és a imageFolder paramétert használja a képek betöltésére a betanításhoz.

  • Fit metódust használva alkalmazza az adatokat a preprocessingPipelineEstimatorChain elemre, majd a Transform metódust, amely egy IDataView értéket ad vissza, az előre feldolgozott adatokat tartalmazva.

  • Az adatokat betanítási, érvényesítési és tesztelési csoportokra osztja.

    A modellek betanításához fontos, hogy betanítási adatkészlet és érvényesítési adatkészlet is legyen. A modell képzése a képzési adathalmazon történik. Az, hogy a nem látható adatokra milyen jól tesz előrejelzéseket, a validációs halmazzal szembeni teljesítménnyel mérjük. Ennek a teljesítménynek az eredményei alapján a modell módosításokat végez a tanultakon a fejlesztés érdekében. Az érvényesítési csoport származhat az eredeti adatkészlet felosztásából, vagy egy másik forrásból, amelyet erre a célra már félretettek.

    A kódminta két felosztást hajt végre. Először az előre feldolgozott adatok felosztásra kerülnek, és 70% a betanításhoz, míg a fennmaradó 30% a validáláshoz. Ezt követően a 30% érvényesítési csoport további érvényesítési és tesztelési csoportokra lesz felosztva, ahol 90% szolgál az ellenőrzéshez, és 10% a teszteléshez.

    Az adatpartíciók céljáról úgy is gondolkodhatunk, mint egy vizsgáról. A vizsgára való tanulás során áttekintheti jegyzeteit, könyveit vagy egyéb erőforrásait, hogy megismerkedjen a vizsgán szereplő fogalmakkal. Erre való a vonatkészlet. Ezután előfordulhat, hogy egy próbavizsga, hogy érvényesítse a tudását. Itt válik hasznossá a validációs adathalmaz. A tényleges vizsga előtt ellenőrizni szeretné, hogy jól érti-e a fogalmakat. Az eredmények alapján vegye figyelembe, hogy mit tévedett, vagy nem értette jól, és beépíti a módosításokat, amikor áttekinti a valódi vizsgát. Végül vizsgáznak. Erre szolgál a tesztkészlet. Még soha nem látta a vizsga kérdéseit, és most a betanításból és ellenőrzésből tanultakat felhasználva alkalmazza tudását a feladatra.

  • Hozzárendeli a partíciókhoz a megfelelő értékeket a tanítási, az érvényesítési és a tesztadatokhoz.

A betanítási folyamat definiálása

A modell betanítása két lépésből áll. Először az Image Classification API-t használja a modell betanítása. Ezután az oszlop kódolt címkéi PredictedLabel vissza lesznek alakítva az eredeti kategorikus értékükre az MapKeyToValue átalakítással.

var classifierOptions = new ImageClassificationTrainer.Options()
{
    FeatureColumnName = "Image",
    LabelColumnName = "LabelAsKey",
    ValidationSet = validationSet,
    Arch = ImageClassificationTrainer.Architecture.ResnetV2101,
    MetricsCallback = (metrics) => Console.WriteLine(metrics),
    TestOnTrainSet = false,
    ReuseTrainSetBottleneckCachedValues = true,
    ReuseValidationSetBottleneckCachedValues = true
};

var trainingPipeline = mlContext.MulticlassClassification.Trainers.ImageClassification(classifierOptions)
    .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

ITransformer trainedModel = trainingPipeline.Fit(trainSet);

Az előző kód:

  • Létrehoz egy új változót a szükséges és választható paraméterek tárolásához.ImageClassificationTrainer Az an ImageClassificationTrainer több választható paramétert is igénybe vehet:

    • FeatureColumnName a modell bemeneteként használt oszlop.
    • LabelColumnName az előrejelezendő érték oszlopa.
    • ValidationSet az IDataView érvényesítési adatokat tartalmazó adat.
    • Arch meghatározza az előre betanított modellarchitektúrák közül melyiket kell használni. Ez az oktatóanyag a ResNetv2 modell 101 rétegű változatát használja.
    • MetricsCallback egy függvényt köt össze a betanítás során elért haladás nyomon követéséhez.
    • TestOnTrainSet azt jelzi a modellnek, hogy mérje meg a teljesítményt a betanítási készleten, ha nincs érvényesítési készlet.
    • ReuseTrainSetBottleneckCachedValues jelzi a modellnek, hogy használja-e a gyorsítótárazott értékeket a szűk keresztmetszeti fázisból a későbbi futtatások során. A szűk keresztmetszeti fázis egy egyszeri átmenő számítás, amely számításigényes az első alkalommal. Ha a betanítási adatok nem változnak, és eltérő számú korszak vagy kötegméret használatával szeretne kísérletezni, a gyorsítótárazott értékek használata jelentősen csökkenti a modell betanításához szükséges időt.
    • ReuseValidationSetBottleneckCachedValues hasonló ReuseTrainSetBottleneckCachedValues-hez, csak ebben az esetben az érvényesítési adatkészlethez.
  • Meghatározza a betanítási csővezetékét, amely mind a EstimatorChain, mind a mapLabelEstimator és a ImageClassificationTrainer részeit tartalmazza.

  • A Fit módszert használja a modell betanítására.

A modell használata

Most, hogy betanított egy modellt, itt az ideje, hogy a rendszerképek osztályozására használja.

Hozzon létre egy új segédprogram metódust, amely az előrejelzési információk megjelenítésére szolgál OutputPrediction a konzolon.

static void OutputPrediction(ModelOutput prediction)
{
    string? imageName = Path.GetFileName(prediction.ImagePath);
    Console.WriteLine($"Image: {imageName} | Actual Value: {prediction.Label} | Predicted Value: {prediction.PredictedLabel}");
}

Egyetlen kép besorolása

  1. Hozzon létre egy metódust ClassifySingleImage, amely egyetlen képelőrejelzést készít és kiír.

    static void ClassifySingleImage(MLContext mlContext, IDataView data, ITransformer trainedModel)
    {
        PredictionEngine<ModelInput, ModelOutput> predictionEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(trainedModel);
    
        ModelInput image = mlContext.Data.CreateEnumerable<ModelInput>(data, reuseRowObject: true).First();
    
        ModelOutput prediction = predictionEngine.Predict(image);
    
        Console.WriteLine("Classifying single image");
        OutputPrediction(prediction);
    }
    

    A ClassifySingleImage módszer:

    • Létrehoz egy belső PredictionEngine metódust ClassifySingleImage . Ez a PredictionEngine egy kényelmi API, amely lehetővé teszi, hogy megadjon adatokat, majd előrejelzést készítsen egyetlen adatpéldányon.
    • Egyetlen ModelInput példány eléréséhez a dataIDataView-t konvertálja egy IEnumerable-ra a CreateEnumerable metódus segítségével, majd lekéri az első megfigyelést.
    • Predict A módszerrel osztályozza a képet.
    • Az előrejelzést a metódussal adja ki a konzolnak OutputPrediction .
  2. Hívás ClassifySingleImage , miután meghívta a metódust Fit a képek tesztkészletével.

    ClassifySingleImage(mlContext, testSet, trainedModel);
    

Több kép osztályozása

  1. Hozzon létre egy metódust ClassifyImages , amely több kép-előrejelzést készít és ad ki.

    static void ClassifyImages(MLContext mlContext, IDataView data, ITransformer trainedModel)
    {
        IDataView predictionData = trainedModel.Transform(data);
    
        IEnumerable<ModelOutput> predictions = mlContext.Data.CreateEnumerable<ModelOutput>(predictionData, reuseRowObject: true).Take(10);
    
        Console.WriteLine("Classifying multiple images");
        foreach (var prediction in predictions)
        {
            OutputPrediction(prediction);
        }
    }
    

    A ClassifyImages módszer:

    • Létrehoz egy IDataView-t, amely az Transform metódus használatával tartalmazza az előrejelzéseket.
    • Az előrejelzések iterálásához konvertálja a predictionDataIDataView metódust, IEnumerableCreateEnumerable majd megkapja az első 10 megfigyelést.
    • Végigmegy rajta és kiírja az előrejelzések eredeti és előrejelzett címkéit.
  2. Hívás ClassifyImages , miután meghívta a metódust ClassifySingleImage() a képek tesztkészletével.

    ClassifyImages(mlContext, testSet, trainedModel);
    

Az alkalmazás futtatása

Futtassa a konzolalkalmazást. A kimenetnek az alábbi kimenethez hasonlónak kell lennie.

Megjegyzés

Előfordulhat, hogy figyelmeztetések vagy üzenetek feldolgozása jelenik meg; ezek az üzenetek az egyértelműség érdekében el lettek távolítva az alábbi eredményekből. A rövidség kedvéért a kimenet kondenzálva lett.

Szűk keresztmetszeti fázis

A képnévhez nem nyomtatódik ki érték, mert a képek byte[]-ként töltődnek be, ezért nincs megjeleníthető képnév.

Phase: Bottleneck Computation, Dataset used:      Train, Image Index: 279
Phase: Bottleneck Computation, Dataset used:      Train, Image Index: 280
Phase: Bottleneck Computation, Dataset used: Validation, Image Index:   1
Phase: Bottleneck Computation, Dataset used: Validation, Image Index:   2

Betanítási fázis

Phase: Training, Dataset used: Validation, Batch Processed Count:   6, Epoch:  21, Accuracy:  0.6797619
Phase: Training, Dataset used: Validation, Batch Processed Count:   6, Epoch:  22, Accuracy:  0.7642857
Phase: Training, Dataset used: Validation, Batch Processed Count:   6, Epoch:  23, Accuracy:  0.7916667

Képek kimenetének osztályozása

Classifying single image
Image: 7001-220.jpg | Actual Value: UD | Predicted Value: UD

Classifying multiple images
Image: 7001-220.jpg | Actual Value: UD | Predicted Value: UD
Image: 7001-163.jpg | Actual Value: UD | Predicted Value: UD
Image: 7001-210.jpg | Actual Value: UD | Predicted Value: UD

A 7001-220.jpg rendszerkép ellenőrzésekor ellenőrizheti, hogy nem repedt-e meg, ahogy azt a modell előrejelezte.

előrejelzéshez használt adathalmazkép SDNET2018

Gratulálok! Most már sikeresen létrehozott egy mélytanulási modellt a képek besorolásához.

A modell fejlesztése

Ha nem elégedett a modell eredményeivel, az alábbi módszerek kipróbálásával javíthatja a teljesítményét:

  • További adatok: Minél több példát ismer egy modell, annál jobb teljesítményt nyújt. Töltse le a teljes SDNET2018 adatkészletet, és használja fel a betanításhoz.
  • Az adatok bővítése: Az adatok változatossá tételének gyakori technikája az adatok kibővítése egy kép készítésével és különböző átalakítások (forgatás, tükrözés, váltás, körülvágás) alkalmazásával. Ez változatosabb példákat ad a modellhez, ahonnan tanulhat.
  • Edzés hosszabb ideig: Minél tovább edz, annál jobban hangolt lesz a modell. A korszakok számának növelése javíthatja a modell teljesítményét.
  • Kísérletezzen a hiperparaméterekkel: Az oktatóanyagban használt paraméterek mellett más paraméterek is hangolhatók a teljesítmény javítása érdekében. A tanulási sebesség módosítása, amely meghatározza a modellben az egyes korszakok után végrehajtott frissítések nagyságát, javíthatja a teljesítményt.
  • Más modellarchitektúra használata: Attól függően, hogy az adatok hogyan néznek ki, az a modell, amely a legjobban tudja megismerni a funkcióit, eltérhet. Ha nem elégedett a modell teljesítményével, próbálja meg módosítani az architektúrát.

Következő lépések

Ebben az oktatóanyagban megtanulta, hogyan hozhat létre egyéni mélytanulási modellt a transfer learning, egy előre betanított képbesorolási TensorFlow-modell és a ML.NET Képbesorolási API használatával, a betonfelületek lemezképeinek repedtként vagy fel nem vettként való besorolásához.

További információért lépjen tovább a következő oktatóanyagra.

Lásd még