Semantilise segmenteerimise andmete märgistamine ja mudelikoolitus Amazon SageMakeri abil

Allikasõlm: 1551223

Arvutinägemises on semantiline segmenteerimine ülesanne klassifitseerida pildil kõik pikslid teadaolevate siltide komplekti kuuluvate klassidega, nii et sama sildiga pikslitel on teatud omadused. See loob sisendpiltide segmenteerimismaski. Näiteks järgmistel piltidel on näidatud segmendimask cat silt.

Novembris 2018 Amazon SageMaker teatas semantilise segmenteerimisalgoritmi SageMaker käivitamisest. Selle algoritmi abil saate koolitada oma mudeleid avaliku andmestiku või oma andmekogumiga. Populaarsed kujutiste segmenteerimise andmestikud hõlmavad andmekogumit Common Objects in Context (COCO) ja PASCALi visuaalseid objektide klasse (PASCAL VOC), kuid nende siltide klassid on piiratud ja võite soovida koolitada mudelit sihtobjektide jaoks, mis ei sisaldu avalikud andmestikud. Sel juhul võite kasutada Amazon SageMaker Ground Truth oma andmestiku märgistamiseks.

Selles postituses näitan järgmisi lahendusi:

  • Ground Truthi kasutamine semantilise segmenteerimise andmestiku märgistamiseks
  • Ground Truthi tulemuste teisendamine SageMakeri sisseehitatud semantilise segmenteerimisalgoritmi jaoks vajalikuks sisendvorminguks
  • Semantilise segmenteerimisalgoritmi kasutamine mudeli treenimiseks ja järelduste tegemiseks

Semantilise segmenteerimise andmete märgistamine

Semantilise segmenteerimise masinõppemudeli koostamiseks peame andmestiku piksli tasemel märgistama. Ground Truth annab teile võimaluse kasutada inimeste annotaatoreid Amazon Mehaaniline Türk, kolmandatest osapooltest müüjad või teie isiklik tööjõud. Tööjõu kohta lisateabe saamiseks vaadake Looge ja hallake tööjõudu. Kui te ei soovi märgistamise tööjõudu ise hallata, Amazon SageMaker Ground Truth Plus on veel üks suurepärane võimalus uue käivitusvalmis andmesilditeenusena, mis võimaldab teil kiiresti luua kvaliteetseid treeningandmekogumeid ja vähendab kulusid kuni 40%. Selle postituse jaoks näitan teile, kuidas andmestikku käsitsi Ground Truthi automaatse segmenteerimise funktsiooniga ja ühisallika märgistamist mehaanilise türklaste tööjõuga.

Käsitsi märgistamine Ground Truthiga

2019. aasta detsembris lisas Ground Truth semantilise segmenteerimise sildistamise kasutajaliidesele automaatse segmenteerimise funktsiooni, et suurendada märgistamise läbilaskevõimet ja parandada täpsust. Lisateabe saamiseks vaadake Objektide automaatne segmentimine semantilise segmenteerimise sildistamise ajal rakendusega Amazon SageMaker Ground Truth. Selle uue funktsiooniga saate kiirendada segmenteerimistoimingute märgistamisprotsessi. Selle asemel, et joonistada tihedalt liibuvat hulknurka või kasutada objekti pildil jäädvustamiseks pintslitööriista, joonistate ainult neli punkti: objekti kõige ülemisse, alumisse, vasakpoolsesse ja parempoolseimasse punkti. Ground Truth võtab need neli punkti sisendiks ja kasutab Deep Extreme Cut (DEXTR) algoritmi, et luua objekti ümber tihedalt liibuv mask. Õpetust Ground Truthi kasutamise kohta kujutise semantilise segmenteerimise märgistamiseks vt Pildi semantiline segmenteerimine. Järgnev on näide sellest, kuidas automaatse segmenteerimise tööriist genereerib segmenteerimismaski automaatselt pärast seda, kui olete valinud objekti neli äärmist punkti.

Crowdsourcing märgistamine koos mehaanilise türklase tööjõuga

Kui teil on suur andmestik ja te ei soovi ise sadu või tuhandeid pilte käsitsi sildistada, saate kasutada Mechanical Turki, mis pakub nõudmisel skaleeritavat inimtööjõudu, et täita töid, mida inimesed saavad arvutist paremini teha. Mehhaaniline Turk tarkvara vormistab tööpakkumised tuhandetele töötajatele, kes soovivad teha neile sobival ajal tükitööd. Tarkvara otsib ka tehtud tööd ja koostab selle teile, tellijale, kes maksab töötajatele (ainult) rahuldava töö eest. Mehhaanilise Turki kasutamise alustamiseks vaadake Amazon Mechanical Turki tutvustus.

Looge märgistamistöö

Järgmine on näide merikilpkonnade andmestiku Mechanical Turk märgistamistööst. Merikilpkonnade andmestik pärineb võistlusest Kaggle Merikilpkonna näotuvastusja valisin demonstratsiooni eesmärgil andmekogumist 300 pilti. Merikilpkonn ei ole avalikes andmekogumites tavaline klass, nii et see võib kujutada endast olukorda, mis nõuab tohutu andmestiku märgistamist.

  1. Valige SageMakeri konsoolil Märgistustööd navigeerimispaanil.
  2. Vali Loo märgistustöö.
  3. Sisestage oma töö nimi.
  4. eest Sisendandmete seadistaminevalige Automatiseeritud andmete seadistamine.
    See loob sisendandmete manifesti.
  5. eest S3 asukoht sisendandmete kogumitele, sisestage andmestiku tee.
  6. eest Ülesande kategooria, vali pilt.
  7. eest Ülesande valikvalige Semantiline segmenteerimine.
  8. eest Töötajate tüübidvalige Amazon Mehaaniline Türk.
  9. Konfigureerige oma seaded ülesande ajalõpu, ülesande aegumisaja ja ülesande hinna jaoks.
  10. Lisa silt (selle postituse jaoks sea turtle) ja esitage märgistamisjuhised.
  11. Vali Looma.

Pärast märgistamistöö seadistamist saate SageMakeri konsoolis kontrollida märgistamise edenemist. Kui töö on märgitud lõpetatuks, saate tulemuste kontrollimiseks valida töö ja kasutada neid järgmisteks sammudeks.

Andmestiku teisendus

Pärast Ground Truthi väljundi saamist saate selle andmestiku mudeli koolitamiseks kasutada SageMakeri sisseehitatud algoritme. Esiteks peate valmistama märgistatud andmestiku SageMakeri semantilise segmenteerimisalgoritmi nõutud sisendliideseks.

Nõutud sisendandmekanalid

SageMakeri semantiline segmenteerimine eeldab, et teie treeninguandmed salvestatakse Amazoni lihtne salvestusteenus (Amazon S3). Eeldatakse, et Amazon S3 andmestik esitatakse kahes kanalis, millest üks train ja üks validation, kasutades nelja kataloogi, kaks piltide jaoks ja kaks annotatsioonide jaoks. Märkused peaksid olema tihendamata PNG-kujutised. Andmestikul võib olla ka sildikaart, mis kirjeldab, kuidas annotatsiooni vastendused luuakse. Kui ei, kasutab algoritm vaikeväärtust. Järelduste tegemiseks aktsepteerib lõpp-punkt kujutisi, millel on an image/jpeg sisu tüüp. Andmekanalite nõutav struktuur on järgmine:

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

Igal rongi- ja valideerimiskataloogi JPG-pildil on vastav PNG-sildi kujutis, millel on sama nimi train_annotation ja validation_annotation kataloogid. See nimetamisviis aitab algoritmil seostada sildi treeningu ajal vastava kujutisega. Rongi, train_annotation, valideerimine ja validation_annotation kanalid on kohustuslikud. Märkused on ühe kanaliga PNG-kujutised. Vorming töötab seni, kuni pildi metaandmed (režiimid) aitavad algoritmil lugeda annotatsioonipilte ühe kanaliga 8-bitiseks märgita täisarvuks.

Ground Truthi märgistamistöö väljund

Ground Truthi märgistustööst genereeritud väljunditel on järgmine kaustastruktuur:

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

Segmenteerimismaskid salvestatakse s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. Iga annotatsioonipilt on .png-fail, mille nimi on lähtekujutise indeksi ja selle pildi sildistamise lõpetamise aja järgi. Näiteks on järgmised lähtekujutis (Image_1.jpg) ja selle segmenteerimismask, mille on loonud Mechanical Turk tööjõud (0_2022-02-10T17:41:04.724225.png). Pange tähele, et maski indeks erineb lähtekujutise nimes olevast numbrist.

Märgistustöö väljundmanifest asub failis /manifests/output/output.manifest faili. See on JSON-fail ja iga rida salvestab lähtepildi ja selle sildi ning muude metaandmete vahelise vastenduse. Järgmine JSON-rida salvestab kuvatava lähtepildi ja selle märkuse vahelise vastenduse:

{"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ähtekujutise nimi on Image_1.jpg ja märkuse nimi on 0_2022-02-10T17:41: 04.724225.png. Andmete ettevalmistamiseks semantilise segmenteerimise algoritmi SageMaker nõutavate andmekanalivormingutena peame muutma annotatsiooni nime nii, et sellel oleks sama nimi, mis lähte-JPG-piltidel. Ja me peame ka andmestiku jagama train ja validation lähtepiltide ja annotatsioonide kataloogid.

Teisendage Ground Truthi märgistustöö väljund soovitud sisendvormingusse

Väljundi teisendamiseks toimige järgmiselt.

  1. Laadige kõik sildistamistöö failid Amazon S3-st alla kohalikku kataloogi:
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. Lugege manifesti faili ja muutke annotatsiooni nimed samadeks, mis lähtekujutistel:
    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. Jagage rong ja valideerimisandmed:
    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. Tehke semantilise segmenteerimise algoritmi andmekanalite jaoks vajalikus vormingus kataloog:
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. Liigutage rongi- ja valideerimiskujutised ning nende annotatsioonid loodud kataloogidesse.
    1. Piltide jaoks kasutage järgmist koodi:
      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. Märkuste jaoks kasutage järgmist koodi:
      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. Laadige rongi- ja valideerimisandmed ning nende annotatsiooniandmed Amazon S3 üles:
    !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 semantilise segmenteerimise mudeli koolitus

Selles jaotises käsitleme teie semantilise segmenteerimismudeli treenimise samme.

Järgige näidismärkmikku ja seadistage andmekanalid

Saate järgida juhiseid Semantilise segmenteerimise algoritm on nüüd saadaval Amazon SageMakeris semantilise segmenteerimise algoritmi juurutamiseks oma märgistatud andmekogumis. See proov märkmik näitab algoritmi tutvustavat otsast lõpuni näidet. Märkmikus saate teada, kuidas õpetada ja hostida semantilist segmenteerimismudelit, kasutades täielikult konvolutsioonivõrku (FCN) algoritmi kasutades Pascali VOC andmestik koolituse jaoks. Kuna ma ei kavatse Pascali lenduvate orgaaniliste ühendite andmestikust mudelit koolitada, jätsin selle märkmiku 3. sammu (andmete ettevalmistamine) vahele. Selle asemel lõin otse train_channel, train_annotation_channe, validation_channelja validation_annotation_channel kasutades S3 asukohti, kuhu ma oma pilte ja märkusi salvestasin:

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

Reguleerige SageMakeri hinnangus oma andmekogumi hüperparameetreid

Jälgisin märkmikku ja lõin SageMakeri hinnanguobjekti (ss_estimator), et treenida segmenteerimisalgoritmi. Üks asi, mida peame uue andmestiku jaoks kohandama, on sees ss_estimator.set_hyperparameters: me peame muutma num_classes=21 et num_classes=2 (turtle ja background) ja ka mina muutsin epochs=10 et epochs=30 sest 10 on ainult demo jaoks. Seejärel kasutasin p3.2xlarge eksemplari mudelitreeninguks seadistamise teel instance_type="ml.p3.2xlarge". Treening läbis 8 minutiga. Parim MIoU (keskmine ristmik liidu kohal) 0.846 saavutatakse 11. epohhil pix_acc (teie pildi pikslite protsent, mis on õigesti klassifitseeritud) 0.925, mis on selle väikese andmestiku kohta päris hea tulemus.

Mudeli järelduste tulemused

Hostisin mudelit odavas ml.c5.xlarge eksemplaris:

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

Lõpuks valmistasin ette 10 kilpkonna kujutise testikomplekti, et näha treenitud segmenteerimismudeli järeldustulemust:

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

Järgmised pildid näitavad tulemusi.

Merikilpkonnade segmenteerimismaskid näevad välja täpsed ja ma olen rahul selle tulemusega, mis on saadud Mechanical Turki töötajate märgistatud 300-pildilisest andmekogumist. Samuti saate uurida teisi saadaolevaid võrke, näiteks püramiid-stseeni sõelumisvõrk (PSP) or DeepLab-V3 oma andmestikuga näidismärkmikusse.

Koristage

Kustutage lõpp-punkt, kui olete sellega lõpetanud, et vältida jätkuvaid kulusid.

ss_predictor.delete_endpoint()

Järeldus

Selles postituses näitasin, kuidas kohandada semantilise segmenteerimise andmete märgistamist ja mudelikoolitust SageMakeri abil. Esiteks saate seadistada märgistamistöö automaatse segmenteerimise tööriistaga või kasutada mehaanilist Turki tööjõudu (nagu ka muid valikuid). Kui teil on üle 5,000 objekti, saate kasutada ka automaatset andmemärgistust. Seejärel teisendate oma Ground Truthi märgistustöö väljundid SageMakeri sisseehitatud semantilise segmenteerimise koolituse jaoks vajalikeks sisendvorminguteks. Pärast seda saate kasutada kiirendatud andmetöötluseksemplari (nt p2 või p3), et koolitada semantilise segmenteerimise mudelit järgmisega märkmik ja juurutage mudel kuluefektiivsemasse eksemplari (nt ml.c5.xlarge). Lõpuks saate mõne koodirea abil üle vaadata oma testiandmestiku järeldustulemused.

Alustage SageMakeri semantilise segmenteerimisega andmete märgistamine ja mudelkoolitus oma lemmikandmestikuga!


Teave Autor

Kara Yang on AWS-i professionaalsete teenuste andmeteadlane. Ta on kirglik aidata klientidel AWS-i pilveteenustega nende ärieesmärke saavutada. Ta on aidanud organisatsioonidel luua ML-lahendusi mitmetes tööstusharudes, nagu tootmine, autotööstus, keskkonnasäästlikkus ja kosmosetööstus.

Ajatempel:

Veel alates AWS-i masinõpe