Szemantikus szegmentációs adatcímkézés és modell betanítás az Amazon SageMaker segítségével

Forrás csomópont: 1551223

A számítógépes látásban a szemantikai szegmentálás az a feladat, hogy a kép minden pixelét osztályozzák egy ismert címkekészletből származó osztályba úgy, hogy az azonos címkével ellátott pixelek bizonyos jellemzőkkel rendelkezzenek. A bemeneti képek szegmentációs maszkját generálja. Például a következő képek a szegmentációs maszkot mutatják be cat címke.

Novemberben 2018, Amazon SageMaker bejelentette a SageMaker szemantikus szegmentáló algoritmus elindítását. Ezzel az algoritmussal betaníthatja modelljeit nyilvános adatkészlettel vagy saját adatkészlettel. A népszerű képszegmentációs adatkészletek közé tartozik a Common Objects in Context (COCO) adatkészlet és a PASCAL Visual Object Classes (PASCAL VOC), de ezek címkéinek osztályai korlátozottak, és érdemes lehet modellt betanítani olyan célobjektumokra, amelyek nem szerepelnek a nyilvános adatkészletek. Ebben az esetben használhatja Amazon SageMaker Ground Truth saját adatkészletének címkézéséhez.

Ebben a bejegyzésben a következő megoldásokat mutatom be:

  • A Ground Truth használata szemantikai szegmentációs adatkészlet címkézésére
  • Az eredmények átalakítása a Ground Truth-ból a szükséges bemeneti formátumba a SageMaker beépített szemantikus szegmentáló algoritmusához
  • A szemantikus szegmentációs algoritmus használata modell betanításához és következtetés végrehajtásához

Szemantikus szegmentációs adatcímkézés

A szemantikai szegmentáláshoz gépi tanulási modell felépítéséhez pixelszinten kell felcímkéznünk egy adatkészletet. A Ground Truth lehetőséget ad emberi annotátorok használatára Amazon Mechanical Turk, külső szállítók vagy saját magánszemélyek. Ha többet szeretne megtudni a munkaerőről, tekintse meg a Munkaerő létrehozása és kezelése. Ha nem szeretné egyedül kezelni a címkézési munkaerőt, Amazon SageMaker Ground Truth Plus egy másik nagyszerű lehetőség új kulcsrakész adatcímkézési szolgáltatásként, amely lehetővé teszi kiváló minőségű edzési adatkészletek gyors létrehozását, és akár 40%-kal csökkenti a költségeket. Ebben a bejegyzésben megmutatom, hogyan lehet manuálisan címkézni az adatkészletet a Ground Truth automatikus szegmentálási funkciójával és a crowdsource címkézését a Mechanical Turk munkaerővel.

Kézi címkézés a Ground Truth segítségével

2019 decemberében a Ground Truth egy automatikus szegmentálási funkciót adott a szemantikus szegmentációs címkézés felhasználói felületéhez, hogy növelje a címkézési sebességet és javítsa a pontosságot. További információkért lásd: Objektumok automatikus szegmentálása az Amazon SageMaker Ground Truth segítségével végzett szemantikus szegmentációs címkézés során. Ezzel az új funkcióval felgyorsíthatja a címkézési folyamatot a szegmentálási feladatoknál. Ahelyett, hogy szorosan illeszkedő sokszöget rajzolna, vagy az ecset eszközzel rögzítene egy objektumot a képen, csak négy pontot rajzol: az objektum legfelső, legalsó, bal és jobb szélső pontjára. A Ground Truth ezt a négy pontot veszi bemenetként, és a Deep Extreme Cut (DEXTR) algoritmus segítségével szorosan illeszkedő maszkot állít elő az objektum köré. A Ground Truth segítségével a kép szemantikai szegmentálásának címkézéséhez oktatóanyagot a következő helyen talál Kép szemantikai szegmentálása. A következő példa arra mutat, hogy az automatikus szegmentáló eszköz hogyan generál automatikusan szegmentációs maszkot, miután kiválasztotta egy objektum négy szélső pontját.

Crowdsourcing címkézés Mechanical Turk munkaerővel

Ha nagy adatkészlettel rendelkezik, és nem szeretne saját kezűleg több száz vagy több ezer képet felcímkézni, használhatja a Mechanical Turk alkalmazást, amely igény szerinti, méretezhető emberi munkaerőt biztosít olyan munkák elvégzéséhez, amelyeket az emberek jobban el tudnak végezni, mint a számítógépek. A Mechanical Turk szoftver hivatalossá teszi az állásajánlatokat azon dolgozók ezrei számára, akik hajlandóak részmunkát végezni a számukra legmegfelelőbb módon. A szoftver az elvégzett munkát is lekéri és lefordítja Önnek, a kérelmezőnek, aki (csak) a kielégítő munkáért fizeti a dolgozókat. A Mechanical Turk használatának megkezdéséhez lásd: Az Amazon Mechanical Turk bemutatása.

Hozzon létre egy címkézési feladatot

A következő példa egy Mechanical Turk címkézési feladatra egy tengeri teknős adatkészlethez. A tengeri teknősök adatkészlete a Kaggle versenyből származik Tengeri teknős arcfelismerés, és az adatkészletből 300 képet választottam ki demonstrációs célból. A tengeri teknős nem gyakori osztály a nyilvános adatkészletekben, így olyan helyzetet képviselhet, amely egy hatalmas adatkészlet címkézését igényli.

  1. A SageMaker konzolon válassza a lehetőséget Címkézési munkák a navigációs ablaktáblában.
  2. A pop-art design, négy időzóna kijelzése egyszerre és méretének arányai azok az érvek, amelyek a NeXtime Time Zones-t kiváló választássá teszik. Válassza a Címkézési feladat létrehozása.
  3. Adja meg a munkája nevét.
  4. A Bemeneti adatok beállításaválassza Automatikus adatbeállítás.
    Ez létrehozza a bemeneti adatok manifesztjét.
  5. A S3 hely a bemeneti adatkészletekhez, adja meg az adatkészlet elérési útját.
  6. A Feladat kategória, választ Kép.
  7. A Feladat kiválasztásaválassza Szemantikus szegmentálás.
  8. A Munkás típusokválassza Amazon Mechanical Turk.
  9. Konfigurálja a beállításokat a feladat időtúllépéséhez, a feladat lejárati idejéhez és a feladatonkénti árhoz.
  10. Címke hozzáadása (ehhez a bejegyzéshez, sea turtle), és adjon meg címkézési utasításokat.
  11. A pop-art design, négy időzóna kijelzése egyszerre és méretének arányai azok az érvek, amelyek a NeXtime Time Zones-t kiváló választássá teszik. Válassza a Teremt.

A címkézési feladat beállítása után a SageMaker konzolon ellenőrizheti a címkézés folyamatát. Ha készként van megjelölve, kiválaszthatja a munkát az eredmények ellenőrzéséhez, és felhasználhatja azokat a következő lépésekhez.

Adatkészlet átalakítás

Miután megkapta a Ground Truth kimenetét, a SageMaker beépített algoritmusaival betaníthat egy modellt ezen az adatkészleten. Először is elő kell készítenie a címkézett adatkészletet a SageMaker szemantikus szegmentáló algoritmus kért beviteli felületeként.

Kért bemeneti adatcsatornák

A SageMaker szemantikai szegmentálása elvárja, hogy a képzési adatkészletet a rendszer tárolja Amazon egyszerű tárolási szolgáltatás (Amazon S3). Az Amazon S3 adatkészletét várhatóan két csatornán fogják bemutatni, az egyik a számára train és az egyik a validation, négy könyvtárat használva, kettőt a képekhez és kettőt a megjegyzésekhez. A megjegyzések várhatóan tömörítetlen PNG-képek. Az adatkészlet tartalmazhat egy címkeleképezést is, amely leírja a megjegyzésleképezések létrehozását. Ha nem, akkor az algoritmus alapértelmezést használ. Következtetés céljából egy végpont olyan képeket fogad el image/jpeg tartalom típus. Az adatcsatornák szükséges struktúrája a következő:

s3://bucket_name |- train | - image1.jpg | - image2.jpg |- validation | - image3.jpg | - image4.jpg |- train_annotation | - image1.png | - image2.png |- validation_annotation | - image3.png | - image4.png |- label_map | - train_label_map.json | - validation_label_map.json

A vonatban és az érvényesítési könyvtárban lévő minden JPG-képhez tartozik egy megfelelő PNG-címkekép azonos névvel train_annotation és a validation_annotation könyvtárakat. Ez az elnevezési konvenció segít az algoritmusnak egy címkét a megfelelő képhez társítani a képzés során. A vonat, train_annotation, érvényesítés és validation_annotation csatornák kötelezőek. A megjegyzések egycsatornás PNG-képek. A formátum mindaddig működik, amíg a kép metaadatai (módjai) segítik az algoritmust, hogy a megjegyzésképeket egycsatornás, 8 bites előjel nélküli egész számmá olvassa be.

A Ground Truth címkézési feladat kimenete

A Ground Truth címkézési feladatból generált kimenetek a következő mappaszerkezettel rendelkeznek:

s3://turtle2022/labelturtles/ |- activelearning |- annotation-tool |- annotations | - consolidated-annotation | - consolidation-request | - consolidation-response | - output | -0_2022-02-10T17:40:03.294994.png | -0_2022-02-10T17:41:04.530266.png | - intermediate | - worker-response |- intermediate |- manifests | - output | - output.manifest

A szegmentációs maszkok mentésre kerülnek s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. Minden megjegyzéskép egy .png fájl, amelyet a forráskép indexe és a képcímkézés befejezésének időpontja után neveztek el. Például a következők a forráskép (Image_1.jpg) és a Mechanical Turk munkaerő által generált szegmentációs maszk (0_2022-02-10T17:41:04.724225.png). Figyelje meg, hogy a maszk indexe eltér a forráskép nevében szereplő számtól.

A címkézési feladat kimeneti jegyzéke a /manifests/output/output.manifest fájlt. Ez egy JSON-fájl, és minden sor rögzíti a forráskép és a címkéje, valamint az egyéb metaadatok közötti leképezést. A következő JSON-sor leképezést rögzít a megjelenített forráskép és a megjegyzés között:

{"source-ref":"s3://turtle2022/Image_1.jpg","labelturtles-ref":"s3://turtle2022/labelturtles/annotations/consolidated-annotation/output/0_2022-02-10T17:41:04.724225.png","labelturtles-ref-metadata":{"internal-color-map":{"0":{"class-name":"BACKGROUND","hex-color":"#ffffff","confidence":0.25988},"1":{"class-name":"Turtle","hex-color":"#2ca02c","confidence":0.25988}},"type":"groundtruth/semantic-segmentation","human-annotated":"yes","creation-date":"2022-02-10T17:41:04.801793","job-name":"labeling-job/labelturtles"}}

A forráskép neve Image_1.jpg, a kommentár neve pedig 0_2022-02-10T17:41: 04.724225.png. Ahhoz, hogy az adatokat a SageMaker szemantikus szegmentáló algoritmus szükséges adatcsatorna-formátumaiként előkészítsük, meg kell változtatnunk az annotáció nevét, hogy az megegyezzen a forrás JPG-képekkel. És az adatkészletet is fel kell osztanunk train és a validation könyvtárak a forrásképekhez és a megjegyzésekhez.

Alakítsa át a Ground Truth címkézési feladat kimenetét a kívánt bemeneti formátumra

A kimenet átalakításához hajtsa végre a következő lépéseket:

  1. Töltse le az összes fájlt a címkézési feladatból az Amazon S3-ból egy helyi könyvtárba:
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. Olvassa el a jegyzékfájlt, és módosítsa az annotáció nevét a forrásképek neveire:
    import os
    import re label_job='labelturtles'
    manifest_path=dir_name+'/'+label_job+'/'+'manifests/output/output.manifest' file = open(manifest_path, "r") txt=file.readlines()
    output_path=dir_name+'/'+label_job+'/'+'annotations/consolidated-annotation/output'
    S3_name='turtle2022/'
    im_list=[]
    for i in range(len(txt)): string = txt[i] try: im_name = re.search(S3_name+'(.+)'+'.jpg', string).group(1) print(im_name) im_png=im_name+'.png' im_list.append(im_name) annotation_name = re.search('output/(.+?)"', string).group(1) os.rename(annotation_name, im_png) except AttributeError: pass

  3. A vonat és az érvényesítési adatkészlet felosztása:
    import numpy as np
    from random import sample # Prints list of random items of given length
    train_num=len(im_list)*0.8
    test_num=len(im_list)*0.2
    train_name=sample(im_list,int(train_num))
    test_name = list(set(im_list) - set(train_name))

  4. Készítsen egy könyvtárat a szükséges formátumban a szemantikus szegmentációs algoritmus adatcsatornáihoz:
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. Helyezze át a vonat- és érvényesítési képeket és a megjegyzéseiket a létrehozott könyvtárakba.
    1. A képekhez használja a következő kódot:
      for i in range(len(train_name)): train_im=train_name[i]+'.jpg' train_im_path=dir_name+'/'+train_im train_new_path='train/'+train_im shutil.move(train_im_path,train_new_path) train_annotation=train_name[i]+'.png' train_annotation_path=dir_name+'/labelturtles/annotations/consolidated-annotation/output/'+train_annotation train_annotation_new_path='train_annotation/'+train_annotation shutil.move(train_annotation_path,train_annotation_new_path)

    2. A megjegyzésekhez használja a következő kódot:
      for i in range(len(test_name)): val_im=test_name[i]+'.jpg' val_im_path=dir_name+'/'+val_im val_new_path='validation/'+val_im shutil.move(val_im_path,val_new_path) val_annotation=test_name[i]+'.png' val_annotation_path=dir_name+'/labelturtles/annotations/consolidated-annotation/output/'+val_annotation val_annotation_new_path='validation_annotationT/'+val_annotation shutil.move(val_annotation_path,val_annotation_new_path)

  6. Töltse fel a vonat- és érvényesítési adatkészleteket, valamint a hozzájuk tartozó annotációs adatkészleteket az Amazon S3-ba:
    !aws s3 cp train s3://turtle2022/train/ --recursive
    !aws s3 cp train_annotation s3://turtle2022/train_annotation/ --recursive
    !aws s3 cp validation s3://turtle2022/validation/ --recursive
    !aws s3 cp validation_annotation s3://turtle2022/validation_annotation/ --recursive

SageMaker szemantikus szegmentációs modell képzés

Ebben a részben a szemantikai szegmentációs modell betanításának lépéseit mutatjuk be.

Kövesse a mintafüzetet, és állítsa be az adatcsatornákat

Az utasításokat követheti A szemantikus szegmentációs algoritmus már elérhető az Amazon SageMakerben a szemantikai szegmentációs algoritmus megvalósításához a címkézett adatkészletben. Ezt a mintát jegyzetfüzet egy végponttól végpontig terjedő példát mutat be, amely bemutatja az algoritmust. A jegyzetfüzetben megtudhatja, hogyan taníthat és tárolhat szemantikai szegmentációs modellt a teljesen konvolúciós hálózat segítségével (FCN) algoritmus segítségével Pascal VOC adatkészlet edzéshez. Mivel nem tervezek modellt betanítani a Pascal VOC adatkészletből, kihagytam a 3. lépést (adat-előkészítés) ebben a notebookban. Ehelyett közvetlenül én hoztam létre train_channel, train_annotation_channe, validation_channelés validation_annotation_channel az S3 helyek használatával, ahol a képeimet és megjegyzéseimet tároltam:

Train_channel=’s3://turtle2022/train’
train_annotation_channel=’s3://turtle2022/train_annotation’
validation_channel=’s3://turtle2022/validation’
validation_annotation_channel=’s3://turtle2022/validation_annotation’

Állítsa be a hiperparamétereket saját adatkészletéhez a SageMaker becslőben

Követtem a jegyzetfüzetet, és létrehoztam egy SageMaker becslő objektumot (ss_estimator) a szegmentációs algoritmusom betanításához. Egy dolgot kell testreszabnunk az új adatkészlethez ss_estimator.set_hyperparameters: változtatnunk kell num_classes=21 nak nek num_classes=2 (turtle és a background), és én is változtam epochs=10 nak nek epochs=30 mert a 10 csak demó célokat szolgál. Ezután a p3.2xlarge példányt modellképzésre használtam beállítással instance_type="ml.p3.2xlarge". Az edzés 8 perc alatt lezajlott. A legjobb MIoU (Mean Intersection over Union) 0.846 értéket a 11. korszakban érjük el pix_acc (a képen a helyesen besorolt ​​képpontok százalékos aránya) 0.925, ami elég jó eredmény ennél a kis adatkészletnél.

Modellkövetkeztetési eredmények

A modellt egy olcsó ml.c5.xlarge példányon tároltam:

training_job_name = 'ss-notebook-demo-2022-02-12-03-37-27-151'
ss_estimator = sagemaker.estimator.Estimator.attach(training_job_name)
ss_predictor = ss_estimator.deploy(initial_instance_count=1, instance_type="ml.c5.xlarge")

Végül elkészítettem egy 10 teknős képből álló tesztkészletet, hogy lássam a betanított szegmentációs modell következtetési eredményét:

import os path = "testturtle/"
img_path_list=[]
files = os.listdir(path) for file in files: if file.endswith(('.jpg', '.png', 'jpeg')): img_path = path + file img_path_list.append(img_path) colnum=5
fig, axs = plt.subplots(2, colnum, figsize=(20, 10)) for i in range(len(img_path_list)): print(img_path_list[i]) img = mpimg.imread(img_path_list[i]) with open(img_path_list[i], "rb") as imfile: imbytes = imfile.read() cls_mask = ss_predictor.predict(imbytes) axs[int(i/colnum),i%colnum].imshow(img, cmap='gray') axs[int(i/colnum),i%colnum].imshow(np.ma.masked_equal(cls_mask,0), cmap='jet', alpha=0.8) plt.show()

A következő képek az eredményeket mutatják.

A tengeri teknősök szegmentáló maszkjai pontosnak tűnnek, és elégedett vagyok ezzel az eredménnyel, amelyet a Mechanical Turk dolgozói által felcímkézett 300 képből álló adatkészlet alapján képeztek ki. Felfedezhet más elérhető hálózatokat is, mint pl piramis-jelenet-elemző hálózat (PSP) or DeepLab-V3 a mintafüzetben az adatkészletével.

Tisztítsuk meg

Ha végzett vele, törölje a végpontot, hogy elkerülje a folyamatos költségeket:

ss_predictor.delete_endpoint()

Következtetés

Ebben a bejegyzésben bemutattam, hogyan lehet testreszabni a szemantikus szegmentációs adatcímkézést és a modellképzést a SageMaker segítségével. Először is beállíthat egy címkézési feladatot az automatikus szegmentáló eszközzel, vagy használhat egy Mechanical Turk munkaerőt (valamint más lehetőségeket is). Ha több mint 5,000 objektummal rendelkezik, akkor automatizált adatcímkézést is használhat. Ezután átalakíthatja a Ground Truth címkézési feladat kimeneteit a szükséges bemeneti formátumokra a SageMaker beépített szemantikai szegmentálási képzéséhez. Ezt követően egy gyorsított számítási példány (például p2 vagy p3) segítségével betaníthat egy szemantikai szegmentációs modellt a következőkkel jegyzetfüzet és telepítse a modellt egy költséghatékonyabb példányra (például ml.c5.xlarge). Végül néhány sornyi kód segítségével áttekintheti a következtetési eredményeket a tesztadatkészletben.

Kezdje el a SageMaker szemantikus szegmentálást adatcímkézés és a modell képzés kedvenc adatkészletével!


A szerzőről

Kara Yang az AWS Professional Services adattudósa. Szenvedélyesen támogatja ügyfeleit üzleti céljaik elérésében az AWS felhőszolgáltatásaival. Segített a szervezeteknek ML megoldások kidolgozásában több iparágban, például a gyártásban, az autóiparban, a környezeti fenntarthatóságban és a repülőgépiparban.

Időbélyeg:

Még több AWS gépi tanulás