Pelabelan data segmentasi semantik dan pelatihan model menggunakan Amazon SageMaker

Node Sumber: 1551223

Dalam visi komputer, segmentasi semantik adalah tugas mengklasifikasikan setiap piksel dalam suatu gambar dengan kelas dari sekumpulan label yang diketahui sedemikian rupa sehingga piksel dengan label yang sama memiliki karakteristik tertentu. Ini menghasilkan topeng segmentasi dari gambar input. Misalnya, gambar berikut menunjukkan topeng segmentasi dari: cat label.

Di 2018 November, Amazon SageMaker mengumumkan peluncuran algoritma segmentasi semantik SageMaker. Dengan algoritme ini, Anda dapat melatih model Anda dengan kumpulan data publik atau kumpulan data Anda sendiri. Kumpulan data segmentasi gambar yang populer mencakup kumpulan data Common Objects in Context (COCO) dan PASCAL Visual Object Classes (PASCAL VOC), tetapi kelas labelnya terbatas dan Anda mungkin ingin melatih model pada objek target yang tidak disertakan dalam kumpulan data publik. Dalam hal ini, Anda dapat menggunakan Kebenaran Dasar Amazon SageMaker untuk memberi label dataset Anda sendiri.

Dalam posting ini, saya menunjukkan solusi berikut:

  • Menggunakan Ground Truth untuk memberi label pada dataset segmentasi semantik
  • Mengubah hasil dari Ground Truth ke format input yang diperlukan untuk algoritme segmentasi semantik bawaan SageMaker
  • Menggunakan algoritma segmentasi semantik untuk melatih model dan melakukan inferensi

Pelabelan data segmentasi semantik

Untuk membangun model pembelajaran mesin untuk segmentasi semantik, kita perlu memberi label pada set data pada tingkat piksel. Ground Truth memberi Anda opsi untuk menggunakan annotator manusia melalui Amazon Mechanical Turk, vendor pihak ketiga, atau tenaga kerja pribadi Anda sendiri. Untuk mempelajari lebih lanjut tentang tenaga kerja, lihat Buat dan Kelola Tenaga Kerja. Jika Anda tidak ingin mengelola tenaga kerja pelabelan sendiri, Kebenaran Dasar Amazon SageMaker Plus adalah opsi hebat lainnya sebagai layanan pelabelan data turnkey baru yang memungkinkan Anda membuat set data pelatihan berkualitas tinggi dengan cepat dan mengurangi biaya hingga 40%. Untuk posting ini, saya menunjukkan kepada Anda cara memberi label dataset secara manual dengan fitur segmen otomatis Ground Truth dan pelabelan crowdsource dengan tenaga kerja Mechanical Turk.

Pelabelan manual dengan Ground Truth

Pada bulan Desember 2019, Ground Truth menambahkan fitur segmen otomatis ke antarmuka pengguna pelabelan segmentasi semantik untuk meningkatkan throughput pelabelan dan meningkatkan akurasi. Untuk informasi lebih lanjut, lihat Menyegmentasikan objek secara otomatis saat melakukan pelabelan segmentasi semantik dengan Amazon SageMaker Ground Truth. Dengan fitur baru ini, Anda dapat mempercepat proses pelabelan Anda pada tugas-tugas segmentasi. Alih-alih menggambar poligon yang pas atau menggunakan alat kuas untuk menangkap objek dalam gambar, Anda hanya menggambar empat titik: di titik paling atas, paling bawah, paling kiri, dan paling kanan dari objek. Ground Truth mengambil empat titik ini sebagai input dan menggunakan algoritma Deep Extreme Cut (DEXTR) untuk menghasilkan topeng yang pas di sekitar objek. Untuk tutorial menggunakan Ground Truth untuk pelabelan segmentasi semantik gambar, lihat Segmentasi Semantik Gambar. Berikut ini adalah contoh bagaimana alat segmentasi otomatis menghasilkan topeng segmentasi secara otomatis setelah Anda memilih empat titik ekstrim dari suatu objek.

Pelabelan crowdsourcing dengan tenaga kerja Mechanical Turk

Jika Anda memiliki kumpulan data yang besar dan Anda tidak ingin memberi label sendiri pada ratusan atau ribuan gambar secara manual, Anda dapat menggunakan Mechanical Turk, yang menyediakan tenaga kerja manusia sesuai permintaan, skalabel, untuk menyelesaikan pekerjaan yang dapat dilakukan manusia lebih baik daripada komputer. Perangkat lunak Mechanical Turk memformalkan tawaran pekerjaan kepada ribuan pekerja yang bersedia melakukan pekerjaan sedikit demi sedikit demi kenyamanan mereka. Perangkat lunak juga mengambil pekerjaan yang dilakukan dan mengkompilasinya untuk Anda, pemohon, yang membayar pekerja untuk pekerjaan yang memuaskan (hanya). Untuk memulai dengan Mechanical Turk, lihat Pengantar Amazon Mechanical Turk.

Buat tugas pelabelan

Berikut adalah contoh tugas pelabelan Mechanical Turk untuk set data penyu. Kumpulan data penyu berasal dari kompetisi Kaggle Deteksi Wajah Penyu Laut, dan saya memilih 300 gambar kumpulan data untuk tujuan demonstrasi. Penyu bukan kelas umum dalam kumpulan data publik sehingga dapat mewakili situasi yang memerlukan pelabelan kumpulan data besar.

  1. Di konsol SageMaker, pilih Pekerjaan pelabelan di panel navigasi.
  2. Pilih Buat pekerjaan pelabelan.
  3. Masukkan nama untuk pekerjaan Anda.
  4. Untuk Masukkan pengaturan data, pilih Pengaturan data otomatis.
    Ini menghasilkan manifes data input.
  5. Untuk Lokasi S3 untuk set data input, masukkan jalur untuk kumpulan data.
  6. Untuk Kategori tugas, pilih Gambar.
  7. Untuk Pemilihan tugas, pilih Segmentasi semantik.
  8. Untuk Jenis pekerja, pilih Amazon Mechanical Turk.
  9. Konfigurasikan pengaturan Anda untuk waktu tunggu tugas, waktu kedaluwarsa tugas, dan harga per tugas.
  10. Tambahkan label (untuk postingan ini, sea turtle), dan berikan petunjuk pelabelan.
  11. Pilih membuat.

Setelah Anda mengatur pekerjaan pelabelan, Anda dapat memeriksa kemajuan pelabelan di konsol SageMaker. Ketika ditandai sebagai selesai, Anda dapat memilih pekerjaan untuk memeriksa hasilnya dan menggunakannya untuk langkah selanjutnya.

Transformasi kumpulan data

Setelah Anda mendapatkan output dari Ground Truth, Anda dapat menggunakan algoritme bawaan SageMaker untuk melatih model pada kumpulan data ini. Pertama, Anda perlu menyiapkan kumpulan data berlabel sebagai antarmuka input yang diminta untuk algoritma segmentasi semantik SageMaker.

Saluran data masukan yang diminta

Segmentasi semantik SageMaker mengharapkan set data pelatihan Anda disimpan di Layanan Penyimpanan Sederhana Amazon (Amazon S3). Dataset di Amazon S3 diharapkan disajikan dalam dua saluran, satu untuk train dan satu untuk validation, menggunakan empat direktori, dua untuk gambar dan dua untuk anotasi. Anotasi diharapkan berupa gambar PNG yang tidak dikompresi. Kumpulan data mungkin juga memiliki peta label yang menjelaskan bagaimana pemetaan anotasi dibuat. Jika tidak, algoritma menggunakan default. Untuk inferensi, titik akhir menerima gambar dengan image/jpeg Jenis konten. Berikut ini adalah struktur saluran data yang diperlukan:

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

Setiap gambar JPG di direktori kereta dan validasi memiliki gambar label PNG yang sesuai dengan nama yang sama di train_annotation dan validation_annotation direktori. Konvensi penamaan ini membantu algoritme mengaitkan label dengan gambar yang sesuai selama pelatihan. Kereta, train_annotation, validasi, dan validation_annotation saluran adalah wajib. Anotasi adalah gambar PNG saluran tunggal. Format ini berfungsi selama metadata (mode) dalam gambar membantu algoritme membaca gambar anotasi menjadi integer unsigned 8-bit saluran tunggal.

Keluaran dari pekerjaan pelabelan Ground Truth

Output yang dihasilkan dari pekerjaan pelabelan Ground Truth memiliki struktur folder berikut:

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

Masker segmentasi disimpan di s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. Setiap gambar anotasi adalah file .png yang dinamai berdasarkan indeks gambar sumber dan waktu pelabelan gambar ini selesai. Misalnya, berikut adalah gambar sumber (Image_1.jpg) dan topeng segmentasi yang dihasilkan oleh tenaga kerja Mechanical Turk (0_2022-02-10T17:41:04.724225.png). Perhatikan bahwa indeks topeng berbeda dari nomor dalam nama gambar sumber.

Manifes keluaran dari pekerjaan pelabelan ada di /manifests/output/output.manifest mengajukan. Ini adalah file JSON, dan setiap baris merekam pemetaan antara gambar sumber dan labelnya serta metadata lainnya. Baris JSON berikut merekam pemetaan antara gambar sumber yang ditampilkan dan anotasinya:

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

Gambar sumber disebut Image_1.jpg, dan nama anotasinya adalah 0_2022-02-10T17:41: 04.724225.png. Untuk menyiapkan data sebagai format saluran data yang diperlukan dari algoritma segmentasi semantik SageMaker, kita perlu mengubah nama anotasi agar memiliki nama yang sama dengan gambar JPG sumber. Dan kita juga perlu membagi dataset menjadi train dan validation direktori untuk gambar sumber dan anotasi.

Ubah output dari pekerjaan pelabelan Ground Truth ke format input yang diminta

Untuk mengubah output, selesaikan langkah-langkah berikut:

  1. Unduh semua file dari pekerjaan pelabelan dari Amazon S3 ke direktori lokal:
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. Baca file manifes dan ubah nama anotasi menjadi nama yang sama dengan gambar sumber:
    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. Pisahkan set data kereta dan validasi:
    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. Buat direktori dalam format yang diperlukan untuk saluran data algoritma segmentasi semantik:
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. Pindahkan gambar kereta dan validasi serta anotasinya ke direktori yang dibuat.
    1. Untuk gambar, gunakan kode berikut:
      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. Untuk anotasi, gunakan kode berikut:
      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. Unggah set data pelatihan dan validasi serta set data anotasinya ke 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

Pelatihan model segmentasi semantik SageMaker

Di bagian ini, kami menelusuri langkah-langkah untuk melatih model segmentasi semantik Anda.

Ikuti contoh buku catatan dan atur saluran data

Anda dapat mengikuti petunjuk di Algoritme Semantik Segmentasi sekarang tersedia di Amazon SageMaker untuk mengimplementasikan algoritme segmentasi semantik ke kumpulan data berlabel Anda. sampel ini buku catatan menunjukkan contoh ujung ke ujung yang memperkenalkan algoritma. Di buku catatan, Anda mempelajari cara melatih dan menghosting model segmentasi semantik menggunakan jaringan konvolusi penuh (FCN) algoritma menggunakan Dataset Pascal VOC untuk latihan. Karena saya tidak berencana untuk melatih model dari dataset Pascal VOC, saya melewatkan Langkah 3 (persiapan data) di buku catatan ini. Sebagai gantinya, saya langsung membuat train_channel, train_annotation_channe, validation_channel, dan validation_annotation_channel menggunakan lokasi S3 tempat saya menyimpan gambar dan anotasi saya:

Train_channel=โ€™s3://turtle2022/trainโ€™
train_annotation_channel=โ€™s3://turtle2022/train_annotationโ€™
validation_channel=โ€™s3://turtle2022/validationโ€™
validation_annotation_channel=โ€™s3://turtle2022/validation_annotationโ€™

Sesuaikan hyperparameters untuk dataset Anda sendiri di estimator SageMaker

Saya mengikuti buku catatan dan membuat objek penaksir SageMaker (ss_estimator) untuk melatih algoritma segmentasi saya. Satu hal yang perlu kita sesuaikan untuk dataset baru adalah di ss_estimator.set_hyperparameters: kita perlu berubah num_classes=21 untuk num_classes=2 (turtle dan background), dan saya juga berubah epochs=10 untuk epochs=30 karena 10 hanya untuk tujuan demo. Kemudian saya menggunakan instance p3.2xlarge untuk pelatihan model dengan menyetel instance_type="ml.p3.2xlarge". Pelatihan selesai dalam 8 menit. Terbaik MIOU (Mean Intersection over Union) sebesar 0.846 dicapai pada epoch 11 dengan a pix_acc (persentase piksel dalam gambar Anda yang diklasifikasikan dengan benar) sebesar 0.925, yang merupakan hasil yang cukup bagus untuk kumpulan data kecil ini.

Hasil inferensi model

Saya menghosting model pada instance ml.c5.xlarge berbiaya rendah:

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

Terakhir, saya menyiapkan test set 10 gambar kura-kura untuk melihat hasil inferensi dari model segmentasi yang dilatih:

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

Gambar berikut menunjukkan hasilnya.

Masker segmentasi penyu terlihat akurat dan saya senang dengan hasil ini yang dilatih pada dataset 300 gambar yang diberi label oleh pekerja Mechanical Turk. Anda juga dapat menjelajahi jaringan lain yang tersedia seperti jaringan penguraian adegan piramida (PSP) or DeepLab-V3 di buku catatan sampel dengan set data Anda.

Membersihkan

Hapus titik akhir setelah Anda selesai menggunakannya untuk menghindari timbulnya biaya lanjutan:

ss_predictor.delete_endpoint()

Kesimpulan

Dalam posting ini, saya menunjukkan cara menyesuaikan pelabelan data segmentasi semantik dan pelatihan model menggunakan SageMaker. Pertama, Anda dapat menyiapkan pekerjaan pelabelan dengan alat segmentasi otomatis atau menggunakan tenaga kerja Mechanical Turk (serta opsi lainnya). Jika Anda memiliki lebih dari 5,000 objek, Anda juga dapat menggunakan pelabelan data otomatis. Kemudian Anda mengubah output dari pekerjaan pelabelan Ground Truth Anda ke format input yang diperlukan untuk pelatihan segmentasi semantik bawaan SageMaker. Setelah itu, Anda dapat menggunakan instance komputasi yang dipercepat (seperti p2 atau p3) untuk melatih model segmentasi semantik dengan yang berikut ini buku catatan dan menerapkan model ke instans yang lebih hemat biaya (seperti ml.c5.xlarge). Terakhir, Anda dapat meninjau hasil inferensi pada dataset pengujian Anda dengan beberapa baris kode.

Mulailah dengan segmentasi semantik SageMaker pelabelan data dan pelatihan model dengan kumpulan data favorit Anda!


tentang Penulis

Kara Yang adalah Ilmuwan Data di AWS Professional Services. Dia bersemangat membantu pelanggan mencapai tujuan bisnis mereka dengan layanan cloud AWS. Dia telah membantu organisasi membangun solusi ML di berbagai industri seperti manufaktur, otomotif, kelestarian lingkungan, dan kedirgantaraan.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS