Označevanje podatkov semantične segmentacije in usposabljanje modela z uporabo Amazon SageMaker

Izvorno vozlišče: 1551223

V računalniškem vidu je semantična segmentacija naloga razvrščanja vsake slikovne pike na sliki z razredom iz znanega nabora oznak, tako da si piksli z isto oznako delijo določene značilnosti. Ustvari segmentacijsko masko vhodnih slik. Naslednje slike na primer prikazujejo segmentacijsko masko cat nalepka.

Novembra 2018, Amazon SageMaker napovedal lansiranje algoritma semantične segmentacije SageMaker. S tem algoritmom lahko učite svoje modele z javnim naborom podatkov ali svojim naborom podatkov. Priljubljeni nabori podatkov za segmentacijo slik vključujejo nabor podatkov Common Objects in Context (COCO) in PASCAL Visual Object Classes (PASCAL VOC), vendar so razredi njihovih oznak omejeni in morda boste želeli učiti model na ciljnih objektih, ki niso vključeni v javne zbirke podatkov. V tem primeru lahko uporabite Amazon SageMaker Ground Truth za označevanje lastnega nabora podatkov.

V tej objavi prikazujem naslednje rešitve:

  • Uporaba Ground Truth za označevanje nabora podatkov semantične segmentacije
  • Pretvorba rezultatov iz Ground Truth v zahtevano obliko vnosa za algoritem semantične segmentacije, vgrajen v SageMaker
  • Uporaba algoritma semantične segmentacije za usposabljanje modela in izvajanje sklepanja

Označevanje podatkov semantične segmentacije

Če želimo zgraditi model strojnega učenja za semantično segmentacijo, moramo nabor podatkov označiti na ravni slikovnih pik. Ground Truth vam daje možnost uporabe človeških označevalcev Amazon Mehanični Turk, prodajalci tretjih oseb ali vaša zasebna delovna sila. Če želite izvedeti več o delovni sili, glejte Ustvarjanje in upravljanje delovne sile. Če ne želite sami upravljati delovne sile za etiketiranje, Amazon SageMaker Ground Truth Plus je še ena odlična možnost kot nova storitev označevanja podatkov na ključ, ki vam omogoča hitro ustvarjanje visokokakovostnih naborov podatkov o usposabljanju in zniža stroške do 40 %. Za to objavo vam pokažem, kako ročno označite nabor podatkov s funkcijo samodejnega segmentiranja Ground Truth in množičnim označevanjem z delovno silo Mechanical Turk.

Ročno označevanje z Ground Truth

Decembra 2019 je Ground Truth uporabniškemu vmesniku za označevanje s semantično segmentacijo dodal funkcijo samodejnega segmentiranja, da bi povečal prepustnost označevanja in izboljšal natančnost. Za več informacij glejte Samodejno segmentiranje predmetov pri izvajanju semantičnega segmentacijskega označevanja z Amazon SageMaker Ground Truth. S to novo funkcijo lahko pospešite postopek označevanja pri nalogah segmentacije. Namesto risanja tesno prilegajočega se mnogokotnika ali uporabe orodja za čopič za zajemanje predmeta na sliki, narišete samo štiri točke: na skrajni zgornji, skrajni spodnji, skrajno levi in ​​skrajno desni točki predmeta. Ground Truth vzame te štiri točke kot vhodne podatke in uporablja algoritem Deep Extreme Cut (DEXTR), da ustvari tesno prilegajočo masko okoli predmeta. Za vadnico o uporabi Ground Truth za označevanje semantične segmentacije slike glejte Semantična segmentacija slike. Sledi primer, kako orodje za samodejno segmentacijo samodejno ustvari segmentacijsko masko, potem ko izberete štiri skrajne točke predmeta.

Crowdsourcing označevanje z delovno silo Mechanical Turk

Če imate velik nabor podatkov in ne želite sami ročno označiti na stotine ali tisoče slik, lahko uporabite Mechanical Turk, ki na zahtevo zagotavlja razširljivo človeško delovno silo za dokončanje nalog, ki jih lahko ljudje opravijo bolje kot računalniki. Programska oprema Mechanical Turk formalizira ponudbe za delo za tisoče delavcev, ki so pripravljeni opravljati delo po delih, ko jim ustreza. Programska oprema tudi pridobi opravljeno delo in ga sestavi za vas, vlagatelja zahtevka, ki delavce plača (samo) za zadovoljivo delo. Če želite začeti uporabljati Mechanical Turk, glejte Uvod v Amazon Mechanical Turk.

Ustvarite nalog za označevanje

Sledi primer opravila označevanja Mechanical Turk za nabor podatkov o morski želvi. Nabor podatkov o morskih želvah je iz tekmovanja Kaggle Zaznavanje obraza morske želve, in izbral sem 300 slik nabora podatkov za namene predstavitve. Morska želva ni običajen razred v javnih naborih podatkov, zato lahko predstavlja situacijo, ki zahteva označevanje ogromnega nabora podatkov.

  1. Na konzoli SageMaker izberite Označevanje delovnih mest v podoknu za krmarjenje.
  2. Izberite Ustvari nalogo za označevanje.
  3. Vnesite ime za svoje delovno mesto.
  4. za Nastavitev vhodnih podatkovtako, da izberete Samodejna nastavitev podatkov.
    To ustvari manifest vhodnih podatkov.
  5. za Lokacija S3 za vhodne nize podatkov, vnesite pot za nabor podatkov.
  6. za Kategorija nalog, izberite Image.
  7. za Izbor nalogtako, da izberete Semantična segmentacija.
  8. za Vrste delavcevtako, da izberete Amazon Mehanični Turk.
  9. Konfigurirajte svoje nastavitve za časovno omejitev opravila, čas poteka opravila in ceno na opravilo.
  10. Dodajte oznako (za to objavo, sea turtle) in zagotovite navodila za označevanje.
  11. Izberite ustvarjanje.

Ko nastavite opravilo označevanja, lahko preverite napredek označevanja na konzoli SageMaker. Ko je označeno kot dokončano, lahko izberete opravilo, da preverite rezultate in jih uporabite za naslednje korake.

Transformacija nabora podatkov

Ko dobite rezultate iz Ground Truth, lahko uporabite vgrajene algoritme SageMaker za usposabljanje modela na tem naboru podatkov. Najprej morate pripraviti označeni nabor podatkov kot zahtevani vhodni vmesnik za algoritem semantične segmentacije SageMaker.

Zahtevani vhodni podatkovni kanali

Semantična segmentacija SageMaker pričakuje, da bo vaš nabor podatkov o usposabljanju shranjen Preprosta storitev shranjevanja Amazon (Amazon S3). Nabor podatkov v Amazon S3 naj bi bil predstavljen v dveh kanalih, eden za train in enega za validation, z uporabo štirih imenikov, dveh za slike in dveh za opombe. Pričakuje se, da bodo opombe nestisnjene slike PNG. Nabor podatkov ima lahko tudi preslikavo oznak, ki opisuje, kako so vzpostavljene preslikave opomb. Če ne, algoritem uporabi privzeto. Za sklepanje končna točka sprejema slike z image/jpeg vrsto vsebine. Zahtevana struktura podatkovnih kanalov je naslednja:

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

Vsaka slika JPG v imeniku za vlak in validacijo ima ustrezno sliko oznake PNG z enakim imenom v train_annotation in validation_annotation imeniki. Ta konvencija poimenovanja pomaga algoritmu, da med usposabljanjem poveže oznako z ustrezno sliko. Vlak, train_annotation, validacija in validation_annotation kanali so obvezni. Opombe so enokanalne slike PNG. Format deluje, dokler metapodatki (načini) na sliki pomagajo algoritmu prebrati slike pripisov v enokanalno 8-bitno nepredznačeno celo število.

Izhod iz opravila označevanja Ground Truth

Izhodi, ustvarjeni iz opravila označevanja Ground Truth, imajo naslednjo strukturo map:

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

Segmentacijske maske so shranjene v s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. Vsaka slika opombe je datoteka .png, poimenovana po indeksu izvorne slike in času, ko je bilo to označevanje slike dokončano. Sledi na primer izvorna slika (Image_1.jpg) in njena segmentacijska maska, ki ju je ustvarila delovna sila Mechanical Turk (0_2022-02-10T17:41:04.724225.png). Opazite, da se indeks maske razlikuje od številke v imenu izvorne slike.

Izhodni manifest opravila označevanja je v /manifests/output/output.manifest mapa. To je datoteka JSON in vsaka vrstica beleži preslikavo med izvorno sliko in njeno oznako ter drugimi metapodatki. Naslednja vrstica JSON beleži preslikavo med prikazano izvorno sliko in njeno opombo:

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

Izvorna slika se imenuje Image_1.jpg, ime opombe pa je 0_2022-02-10T17:41: 04.724225.png. Za pripravo podatkov kot zahtevanih formatov podatkovnih kanalov algoritma semantične segmentacije SageMaker, moramo spremeniti ime opombe, tako da bo imelo isto ime kot izvorne slike JPG. Prav tako moramo nabor podatkov razdeliti na train in validation imenike za izvorne slike in opombe.

Pretvorite izhod iz opravila označevanja Ground Truth v zahtevano vhodno obliko

Če želite preoblikovati izhod, dokončajte naslednje korake:

  1. Prenesite vse datoteke iz opravila označevanja iz Amazon S3 v lokalni imenik:
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. Preberite datoteko manifesta in spremenite imena pripisov v ista imena kot izvorne slike:
    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. Razdelite nabor podatkov vlaka in validacije:
    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. Ustvarite imenik v zahtevani obliki za podatkovne kanale algoritma semantične segmentacije:
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. Premaknite slike vlaka in potrditve ter njihove opombe v ustvarjene imenike.
    1. Za slike uporabite naslednjo kodo:
      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. Za opombe uporabite naslednjo kodo:
      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. Naložite nabore podatkov o vlaku in validaciji ter njihove nabore podatkov opomb v Amazon S3:
    !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

Usposabljanje modela semantične segmentacije SageMaker

V tem razdelku se sprehodimo skozi korake za usposabljanje vašega modela semantične segmentacije.

Sledite vzorčnemu zvezku in nastavite podatkovne kanale

Sledite lahko navodilom v Algoritem semantične segmentacije je zdaj na voljo v Amazon SageMaker za implementacijo algoritma semantične segmentacije v vaš označeni nabor podatkov. Ta vzorec prenosnik prikazuje primer od konca do konca, ki predstavlja algoritem. V zvezku se naučite, kako usposobiti in gostiti model semantične segmentacije z uporabo popolnoma konvolucijskega omrežja (FCN) algoritem z uporabo Nabor podatkov Pascal VOC za trening. Ker ne nameravam usposobiti modela iz nabora podatkov Pascal VOC, sem preskočil 3. korak (priprava podatkov) v tem zvezku. Namesto tega sem neposredno ustvarjal train_channel, train_annotation_channe, validation_channelin validation_annotation_channel z uporabo lokacij S3, kjer sem shranil svoje slike in opombe:

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

Prilagodite hiperparametre za svoj nabor podatkov v ocenjevalcu SageMaker

Sledil sem zvezku in ustvaril objekt ocenjevalca SageMaker (ss_estimator), da usposobim svoj algoritem za segmentacijo. Ena stvar, ki jo moramo prilagoditi za nov nabor podatkov, je notri ss_estimator.set_hyperparameters: spremeniti se moramo num_classes=21 do num_classes=2 (turtle in background), pa tudi spremenila sem se epochs=10 do epochs=30 ker je 10 samo za demo namene. Nato sem uporabil primerek p3.2xlarge za usposabljanje modela z nastavitvijo instance_type="ml.p3.2xlarge". Usposabljanje je bilo zaključeno v 8 minutah. Najboljši MIoU (Mean Intersection over Union) 0.846 je dosežen v epohi 11 z pix_acc (odstotek slikovnih pik na vaši sliki, ki so pravilno razvrščene) 0.925, kar je precej dober rezultat za ta majhen nabor podatkov.

Rezultati sklepanja modela

Model sem gostil na nizkocenovnem primerku ml.c5.xlarge:

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

Nazadnje sem pripravil testni niz 10 slik želve, da vidim rezultat sklepanja usposobljenega modela segmentacije:

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

Naslednje slike prikazujejo rezultate.

Segmentacijske maske morskih želv so videti natančne in zadovoljen sem s tem rezultatom, usposobljenim na naboru podatkov s 300 slikami, ki so ga označili delavci Mechanical Turk. Raziskujete lahko tudi druga razpoložljiva omrežja, kot je npr omrežje za razčlenjevanje piramidne scene (PSP) or DeepLab-V3 v vzorčnem zvezku z vašim naborom podatkov.

Čiščenje

Izbrišite končno točko, ko končate z njo, da se izognete nadaljnjim stroškom:

ss_predictor.delete_endpoint()

zaključek

V tej objavi sem pokazal, kako prilagoditi označevanje podatkov semantične segmentacije in usposabljanje modela z uporabo SageMakerja. Najprej lahko nastavite opravilo označevanja z orodjem za samodejno segmentiranje ali uporabite delovno silo Mechanical Turk (kot tudi druge možnosti). Če imate več kot 5,000 objektov, lahko uporabite tudi samodejno označevanje podatkov. Nato pretvorite izhode vašega opravila označevanja Ground Truth v zahtevane vhodne formate za usposabljanje semantične segmentacije, vgrajeno v SageMaker. Po tem lahko uporabite pospešeno računalniško instanco (kot je p2 ali p3) za usposabljanje modela semantične segmentacije z naslednjim prenosnik in razmestite model na stroškovno učinkovitejši primerek (kot je ml.c5.xlarge). Nazadnje lahko z nekaj vrsticami kode pregledate rezultate sklepanja na svojem testnem naboru podatkov.

Začnite s semantično segmentacijo SageMaker označevanje podatkov in usposabljanje za modele s svojim najljubšim naborom podatkov!


O Author

Kara Yang je podatkovni znanstvenik v AWS Professional Services. Strastno želi pomagati strankam pri doseganju njihovih poslovnih ciljev s storitvami v oblaku AWS. Organizacijam je pomagala zgraditi rešitve ML v številnih panogah, kot so proizvodnja, avtomobilska industrija, okoljska trajnost in vesoljska industrija.

Časovni žig:

Več od Strojno učenje AWS