Semanttisen segmentoinnin tietojen merkitseminen ja mallin koulutus Amazon SageMaker -sovelluksella

Lähdesolmu: 1551223

Tietokonenäössä semanttinen segmentointi on tehtävä kuvan jokaisen pikselin luokittelemiseksi tunnetun nimiöjoukon luokkaan siten, että samalla tunnisteella varustetuilla pikseleillä on tiettyjä ominaisuuksia. Se luo syöttökuvista segmentointimaskin. Esimerkiksi seuraavat kuvat näyttävät segmentointimaskin cat etiketti.

Marraskuussa 2018, Amazon Sage Maker ilmoitti julkaisevansa semanttisen segmentointialgoritmin SageMaker. Tällä algoritmilla voit kouluttaa mallejasi julkisella tai omalla tietojoukollasi. Suosittuja kuvien segmentointitietosarjoja ovat Common Objects in Context (COCO) -tietosarja ja PASCAL Visual Object Classes (PASCAL VOC), mutta niiden tunnisteiden luokat ovat rajoitettuja, ja saatat haluta harjoitella mallia kohdeobjekteille, jotka eivät sisälly julkiset tietojoukot. Tässä tapauksessa voit käyttää Amazon SageMaker Ground Totuus merkitäksesi oman tietojoukkosi.

Tässä viestissä esitän seuraavat ratkaisut:

  • Ground Truthin käyttö semanttisen segmentointitietojoukon merkitsemiseen
  • Tulosten muuntaminen Ground Truthista vaadittuun syöttömuotoon SageMakerin sisäänrakennettua semanttista segmentointialgoritmia varten
  • Semanttisen segmentointialgoritmin käyttäminen mallin kouluttamiseen ja päättelyjen tekemiseen

Semanttisen segmentoinnin datamerkintä

Koneoppimismallin rakentamiseksi semanttista segmentointia varten meidän on tunnistettava tietojoukko pikselitasolla. Ground Truth antaa sinulle mahdollisuuden käyttää ihmisen annotaattoreita Amazon Mechanical Turk, kolmannen osapuolen toimittajat tai oma yksityinen työvoimasi. Lisätietoja työvoimasta on osoitteessa Luo ja hallinnoi työvoimaa. Jos et halua hallita merkintätyövoimaa itse, Amazon SageMaker Ground Truth Plus on toinen loistava vaihtoehto uutena avaimet käteen -tietomerkintäpalveluna, jonka avulla voit luoda korkealaatuisia harjoitustietojoukkoja nopeasti ja vähentää kustannuksia jopa 40 %. Tässä viestissä näytän sinulle, kuinka tietojoukko merkitään manuaalisesti Ground Truth -automaattisen segmentointiominaisuuden avulla ja joukkolähdemerkinnät Mechanical Turk -työvoiman avulla.

Manuaalinen merkintä Ground Truthilla

Joulukuussa 2019 Ground Truth lisäsi semanttisen segmentoinnin merkinnän käyttöliittymään automaattisen segmentointiominaisuuden lisätäkseen merkintöjen suorituskykyä ja parantaakseen tarkkuutta. Lisätietoja on kohdassa Objektien automaattinen segmentointi suoritettaessa semanttista segmentointimerkintää Amazon SageMaker Ground Truthin avulla. Tämän uuden ominaisuuden avulla voit nopeuttaa merkintäprosessia segmentointitehtävissä. Sen sijaan, että piirtäisit tiukasti sopivan monikulmion tai käytät sivellintyökalua kohteen kuvaamiseen, piirrät vain neljä pistettä: kohteen ylimmälle, alimmalle, vasemmalle ja oikealle. Ground Truth ottaa nämä neljä pistettä syötteenä ja käyttää Deep Extreme Cut (DEXTR) -algoritmia tuottaakseen tiukasti sopivan maskin kohteen ympärille. Katso opetusohjelma Ground Truthista kuvien semanttiseen segmentointiin Kuvan semanttinen segmentointi. Seuraavassa on esimerkki siitä, kuinka automaattinen segmentointityökalu luo segmentointimaskin automaattisesti, kun olet valinnut objektin neljä ääripistettä.

Crowdsourcing-merkinnät mekaanisen turkkilaisen työvoiman kanssa

Jos sinulla on suuri tietojoukko etkä halua itse merkitä satoja tai tuhansia kuvia manuaalisesti, voit käyttää Mechanical Turkia, joka tarjoaa tarpeen mukaan skaalautuvan inhimillisen työvoiman suorittamaan töitä, joihin ihmiset pystyvät paremmin kuin tietokoneet. Mechanical Turk -ohjelmisto virallistaa työtarjoukset tuhansille työntekijöille, jotka ovat valmiita tekemään osittaista työtä heille parhaiten sopivalla tavalla. Ohjelmisto myös hakee tehdyt työt ja kokoaa ne sinulle, pyytäjälle, joka maksaa työntekijöille (vain) tyydyttävästä työstä. Aloita Mechanical Turkin käyttö katsomalla Johdatus Amazon Mechanical Turkiin.

Luo merkintätyö

Seuraavassa on esimerkki Mechanical Turk -merkintätyöstä merikilpikonnatietojoukolle. Merikilpikonnatietoaineisto on Kaggle-kilpailusta Merikilpikonnan kasvojentunnistus, ja valitsin tietojoukosta 300 kuvaa esittelytarkoituksiin. Merikilpikonna ei ole yleinen luokka julkisissa tietojoukoissa, joten se voi edustaa tilannetta, joka edellyttää massiivisen tietojoukon merkitsemistä.

  1. Valitse SageMaker-konsolissa Työn merkitseminen navigointipaneelissa.
  2. Valita Luo merkintätyö.
  3. Anna työllesi nimi.
  4. varten Syötetietojen asetuksetvalitse Automaattinen tietojen määritys.
    Tämä luo syöttötiedon manifestin.
  5. varten S3 sijainti syöttötietojoukoille, anna tietojoukon polku.
  6. varten Tehtäväluokka, valitse Kuva.
  7. varten Tehtävän valintavalitse Semanttinen segmentointi.
  8. varten Työntekijätyypitvalitse Amazon Mechanical Turk.
  9. Määritä asetukset tehtävän aikakatkaisulle, tehtävän vanhentumisajalle ja tehtäväkohtaiselle hinnalle.
  10. Lisää tunniste (tälle viestille, sea turtle) ja anna merkintäohjeet.
  11. Valita luoda.

Kun olet määrittänyt merkintätyön, voit tarkistaa merkinnän edistymisen SageMaker-konsolista. Kun se on merkitty valmiiksi, voit valita työn tarkistaaksesi tulokset ja käyttää niitä seuraavissa vaiheissa.

Tietojoukon muunnos

Kun olet saanut tulosteen Ground Truthista, voit käyttää SageMakerin sisäänrakennettuja algoritmeja kouluttaaksesi mallin tälle tietojoukolle. Ensin sinun on valmisteltava merkitty tietojoukko pyydetyksi syöttöliittymäksi SageMaker semanttista segmentointialgoritmia varten.

Pyydetyt syöttödatakanavat

SageMakerin semanttinen segmentointi odottaa, että harjoitustietojoukkosi tallennetaan Amazonin yksinkertainen tallennuspalvelu (Amazon S3). Amazon S3:n tietojoukon odotetaan esitettävän kahdessa kanavassa, joista toinen train ja yksi validation, käyttämällä neljää hakemistoa, kaksi kuville ja kaksi huomautuksille. Merkintöjen odotetaan olevan pakkaamattomia PNG-kuvia. Tietojoukossa voi myös olla nimikartta, joka kuvaa, kuinka huomautuskartoitukset muodostetaan. Jos ei, algoritmi käyttää oletusarvoa. Päätettä varten päätepiste hyväksyy kuvat, joissa on an image/jpeg sisältötyyppi. Seuraava on vaadittu datakanavien rakenne:

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

Jokaisella juna- ja validointihakemistossa olevalla JPG-kuvalla on vastaava PNG-kuva, jolla on sama nimi train_annotation ja validation_annotation hakemistoja. Tämä nimeämiskäytäntö auttaa algoritmia yhdistämään tunnisteen sitä vastaavaan kuvaan harjoituksen aikana. Juna, train_annotation, validointi ja validation_annotation kanavat ovat pakollisia. Merkinnät ovat yksikanavaisia ​​PNG-kuvia. Muoto toimii niin kauan kuin kuvan metatiedot (tilat) auttavat algoritmia lukemaan huomautuskuvat yksikanavaiseksi 8-bittiseksi etumerkittömäksi kokonaisluvuksi.

Ground Truth -merkintätyön tulos

Ground Truth -merkintätyöstä luoduilla lähdöillä on seuraava kansiorakenne:

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

Segmentointimaskit tallennetaan sisään s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. Jokainen merkintäkuva on .png-tiedosto, joka on nimetty lähdekuvan hakemiston ja tämän kuvan merkinnän valmistumisajan mukaan. Esimerkiksi seuraavat ovat lähdekuva (Image_1.jpg) ja sen segmentointimaski, jonka Mechanical Turk on luonut (0_2022-02-10T17:41:04.724225.png). Huomaa, että maskin indeksi on eri kuin lähdekuvan nimessä oleva numero.

Merkintätyön tulosluettelo on kohdassa /manifests/output/output.manifest tiedosto. Se on JSON-tiedosto, ja jokainen rivi tallentaa lähdekuvan ja sen tunnisteen sekä muiden metatietojen yhdistämisen. Seuraava JSON-rivi tallentaa yhdistämisen näytetyn lähdekuvan ja sen huomautuksen välillä:

{"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"}}

Lähdekuvan nimi on Image_1.jpg ja merkinnän nimi on 0_2022-02-10T17:41: 04.724225.png. Valmistaaksemme tiedot SageMaker-semanttisen segmentointialgoritmin vaadituiksi tietokanavamuodoiksi, meidän on muutettava huomautuksen nimi niin, että sillä on sama nimi kuin lähde-JPG-kuvilla. Ja meidän on myös jaettava tietojoukko train ja validation hakemistot lähdekuville ja huomautuksille.

Muunna lähtö Ground Truth -merkintätyöstä pyydettyyn syöttömuotoon

Muuntaaksesi tulosteen, suorita seuraavat vaiheet:

  1. Lataa kaikki tiedostot merkintätyöstä Amazon S3:sta paikalliseen hakemistoon:
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. Lue luettelotiedosto ja vaihda huomautuksen nimet samoihin nimiin kuin lähdekuvissa:
    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. Jaa juna ja validointitietojoukot:
    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. Tee hakemisto vaaditussa muodossa semanttisen segmentointialgoritmin datakanaville:
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. Siirrä juna- ja vahvistuskuvat ja niiden merkinnät luotuihin hakemistoihin.
    1. Käytä kuvissa seuraavaa koodia:
      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. Käytä huomautuksia varten seuraavaa koodia:
      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. Lataa juna- ja validointitietojoukot ja niiden merkintätietojoukot Amazon S3:een:
    !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 semanttisen segmentointimallin koulutus

Tässä osiossa käymme läpi vaiheet semanttisen segmentointimallin kouluttamiseksi.

Noudata mallimuistikirjan ohjeita ja määritä datakanavat

Voit seurata ohjeita Semanttinen segmentointialgoritmi on nyt saatavilla Amazon SageMakerissa toteuttaaksesi semanttisen segmentointialgoritmin tunnistetussa tietojoukossasi. Tämä näyte muistikirja näyttää päästä-päähän esimerkin, joka esittelee algoritmin. Muistikirjassa opit opettamaan ja isännöimään semanttista segmentointimallia käyttämällä täysin konvoluutioverkkoa (FCN) -algoritmi käyttäen Pascal VOC -tietojoukko koulutusta varten. Koska en aio kouluttaa mallia Pascalin VOC-tietojoukosta, ohitin vaiheen 3 (tietojen valmistelu) tässä muistikirjassa. Sen sijaan loin suoraan train_channel, train_annotation_channe, validation_channelja validation_annotation_channel käyttämällä S3-paikkoja, joihin tallensin kuvani ja huomautukseni:

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

Säädä oman tietojoukosi hyperparametrit SageMaker-estimaattorissa

Seurasin muistikirjaa ja loin SageMaker-estimaattoriobjektin (ss_estimator) kouluttaaksesi segmentointialgoritmiani. Yksi asia, joka meidän on mukautettava uutta tietojoukkoa varten, on ss_estimator.set_hyperparameters: meidän on muututtava num_classes=21 että num_classes=2 (turtle ja background), ja minäkin vaihdoin epochs=10 että epochs=30 koska 10 on vain esittelytarkoituksiin. Sitten käytin p3.2xlarge-instanssia mallikoulutukseen asettamalla instance_type="ml.p3.2xlarge". Koulutus päättyi 8 minuutissa. Paras MIoU (Mean Intersection over Union) 0.846 saavutetaan epookissa 11 pix_acc (oikein luokiteltujen kuvasi pikselien prosenttiosuus) on 0.925, mikä on melko hyvä tulos tälle pienelle tietojoukolle.

Mallin päättelytulokset

Isännöin mallia edullisessa ml.c5.xlarge-esiintymässä:

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")

Lopuksi valmistelin 10 kilpikonnakuvan testisarjan nähdäkseni koulutetun segmentointimallin päättelytuloksen:

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()

Seuraavissa kuvissa näkyy tulokset.

Merikilpikonnien segmentointinaamarit näyttävät tarkilta, ja olen tyytyväinen tähän tulokseen, joka on koulutettu Mechanical Turkin työntekijöiden merkitsemällä 300 kuvan tietojoukolla. Voit myös tutustua muihin saatavilla oleviin verkkoihin, kuten pyramid-scene-parsing network (PSP) or DeepLab-V3 mallimuistikirjassa tietojoukkosi kanssa.

Puhdistaa

Poista päätepiste, kun olet lopettanut sen, jotta vältyt jatkuvilta kuluilta:

ss_predictor.delete_endpoint()

Yhteenveto

Tässä viestissä näytin, kuinka semanttisen segmentoinnin datamerkintöjä ja mallin koulutusta voidaan mukauttaa SageMakerin avulla. Ensin voit määrittää merkintätyön automaattisella segmentointityökalulla tai käyttää Mechanical Turk -työvoimaa (sekä muita vaihtoehtoja). Jos sinulla on yli 5,000 2 kohdetta, voit käyttää myös automaattista tietomerkintää. Sitten muutat Ground Truth -merkintätyön lähdöt vaadittuihin syöttömuotoihin SageMakerin sisäänrakennettua semanttista segmentointikoulutusta varten. Sen jälkeen voit käyttää kiihdytettyä laskentaa (kuten p3 tai pXNUMX) semanttisen segmentointimallin opettamiseen seuraavilla tavoilla muistikirja ja ota malli käyttöön kustannustehokkaammassa ilmentymässä (kuten ml.c5.xlarge). Lopuksi voit tarkastella testitietojoukon päättelytuloksia muutaman koodirivin avulla.

Aloita SageMakerin semanttinen segmentointi tietojen merkitseminen ja mallikoulutus suosikkitietojoukollasi!


kirjailijasta

Kara Yang on tietotutkija AWS-asiantuntijapalveluissa. Hän haluaa auttaa asiakkaita saavuttamaan liiketoimintatavoitteensa AWS-pilvipalveluiden avulla. Hän on auttanut organisaatioita rakentamaan ML-ratkaisuja useilla aloilla, kuten valmistus, autoteollisuus, ympäristön kestävyys ja ilmailu.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen