Zephyrnet Logosu

Amazon SageMaker kullanarak anlamsal segmentasyon veri etiketleme ve model eğitimi

Tarih:

Bilgisayarla görüde semantik bölütleme, bir görüntüdeki her pikseli, aynı etikete sahip piksellerin belirli özellikleri paylaşacak şekilde bilinen bir etiket kümesinden bir sınıfla sınıflandırma görevidir. Giriş görüntülerinin bir segmentasyon maskesini oluşturur. Örneğin, aşağıdaki resimlerde segmentasyon maskesi gösterilmektedir. cat etiket.

Kasım 2018 olarak, Amazon Adaçayı Yapıcı SageMaker semantik segmentasyon algoritmasının lansmanını duyurdu. Bu algoritma ile modellerinizi herkese açık bir veri kümesi veya kendi veri kümeniz ile eğitebilirsiniz. Popüler görüntü segmentasyon veri kümeleri, Bağlamdaki Ortak Nesneler (COCO) veri kümesini ve PASCAL Görsel Nesne Sınıflarını (PASCAL VOC) içerir, ancak bunların etiketlerinin sınıfları sınırlıdır ve genel veri kümeleri. Bu durumda, kullanabilirsiniz Amazon SageMaker Yer Gerçeği kendi veri kümenizi etiketlemek için.

Bu yazıda, aşağıdaki çözümleri gösteriyorum:

  • Anlamsal bir segmentasyon veri kümesini etiketlemek için Temel Gerçeği kullanma
  • Sonuçları Temel Gerçeğinden SageMaker yerleşik anlamsal segmentasyon algoritması için gerekli giriş formatına dönüştürme
  • Bir modeli eğitmek ve çıkarım yapmak için semantik segmentasyon algoritmasını kullanma

Semantik segmentasyon veri etiketleme

Anlamsal segmentasyon için bir makine öğrenimi modeli oluşturmak için bir veri kümesini piksel düzeyinde etiketlememiz gerekir. Temel Gerçeği, size aşağıdakiler aracılığıyla insan ek açıklamalarını kullanma seçeneği sunar: Amazon Mekanik Türk, üçüncü taraf satıcılar veya kendi özel iş gücünüz. İş gücü hakkında daha fazla bilgi edinmek için bkz. İş Gücü Oluşturun ve Yönetin. Etiketleme iş gücünü kendi başınıza yönetmek istemiyorsanız, Amazon SageMaker Temel Gerçek Artı hızlı bir şekilde yüksek kaliteli eğitim veri kümeleri oluşturmanıza olanak tanıyan ve maliyetleri %40'a kadar azaltan yeni bir anahtar teslimi veri etiketleme hizmeti olarak başka bir harika seçenektir. Bu gönderi için, Ground Truth otomatik segment özelliği ile veri setini manuel olarak nasıl etiketleyeceğinizi ve Mechanical Turk iş gücüyle kitle kaynaklı etiketlemeyi gösteriyorum.

Ground Truth ile manuel etiketleme

Aralık 2019'da Ground Truth, etiketleme verimini artırmak ve doğruluğu artırmak için anlamsal segmentasyon etiketleme kullanıcı arayüzüne bir otomatik segmentasyon özelliği ekledi. Daha fazla bilgi için bkz. Amazon SageMaker Ground Truth ile anlamsal segmentasyon etiketlemesi gerçekleştirirken nesneleri otomatik segmentlere ayırma. Bu yeni özellik ile segmentasyon görevlerinde etiketleme sürecinizi hızlandırabilirsiniz. Sıkıca oturan bir çokgen çizmek veya bir görüntüdeki bir nesneyi yakalamak için fırça aracını kullanmak yerine, yalnızca dört nokta çizersiniz: nesnenin en üst, en alt, en sol ve en sağ noktalarında. Ground Truth, bu dört noktayı girdi olarak alır ve nesnenin etrafına sıkıca oturan bir maske üretmek için Deep Extreme Cut (DEXTR) algoritmasını kullanır. Görüntü anlamsal segmentasyon etiketlemesi için Temel Gerçeği kullanan bir eğitim için bkz. Görüntü Semantik Segmentasyonu. Aşağıda, bir nesnenin dört uç noktasını seçtikten sonra otomatik segmentasyon aracının otomatik olarak bir segmentasyon maskesini nasıl oluşturduğuna dair bir örnek verilmiştir.

Mechanical Turk iş gücüyle kitle kaynaklı etiketleme

Büyük bir veri kümeniz varsa ve yüzlerce veya binlerce görüntüyü kendiniz manuel olarak etiketlemek istemiyorsanız, insanların bilgisayarlardan daha iyi yapabileceği işleri tamamlamak için isteğe bağlı, ölçeklenebilir bir insan gücü sağlayan Mechanical Turk'ü kullanabilirsiniz. Mechanical Turk yazılımı, parça parça iş yapmak isteyen binlerce işçiye, istedikleri zaman iş tekliflerini resmileştirir. Yazılım ayrıca yapılan işi alır ve işçilere tatmin edici çalışma için ödeme yapan (yalnızca) talepte bulunan sizin için derler. Mechanical Turk'ü kullanmaya başlamak için, bkz. Amazon Mechanical Turk'e Giriş.

Bir etiketleme işi oluşturun

Aşağıda bir deniz kaplumbağası veri seti için Mechanical Turk etiketleme işine bir örnek verilmiştir. Deniz kaplumbağası veri seti Kaggle yarışmasından alınmıştır. Deniz Kaplumbağası Yüz Algılamave gösteri amacıyla veri kümesinin 300 görüntüsünü seçtim. Deniz kaplumbağası, genel veri kümelerinde yaygın bir sınıf değildir, bu nedenle büyük bir veri kümesinin etiketlenmesini gerektiren bir durumu temsil edebilir.

  1. SageMaker konsolunda, Etiketleme işleri Gezinti bölmesinde.
  2. Klinik Etiketleme işi oluştur.
  3. İşiniz için bir ad girin.
  4. İçin Giriş verileri kurulumuseçin Otomatik veri kurulumu.
    Bu, girdi verilerinin bir bildirimini oluşturur.
  5. İçin Giriş veri kümeleri için S3 konumu, veri kümesinin yolunu girin.
  6. İçin Görev kategorisi, seçmek Resim.
  7. İçin Görev seçimiseçin Anlamsal bölümleme.
  8. İçin İşçi türleriseçin Amazon Mekanik Türk.
  9. Görev zaman aşımı, görev sona erme süresi ve görev başına fiyat için ayarlarınızı yapılandırın.
  10. Bir etiket ekleyin (bu gönderi için, sea turtle) ve etiketleme talimatlarını sağlayın.
  11. Klinik oluşturmak.

Etiketleme işini ayarladıktan sonra, etiketleme ilerlemesini SageMaker konsolunda kontrol edebilirsiniz. Tamamlandı olarak işaretlendiğinde, sonuçları kontrol etmek için işi seçebilir ve sonraki adımlar için kullanabilirsiniz.

Veri kümesi dönüşümü

Ground Truth'tan çıktı aldıktan sonra, bu veri kümesinde bir model eğitmek için SageMaker yerleşik algoritmalarını kullanabilirsiniz. İlk olarak, SageMaker semantik segmentasyon algoritması için istenen giriş arayüzü olarak etiketlenmiş veri kümesini hazırlamanız gerekir.

İstenen giriş veri kanalları

SageMaker semantik segmentasyonu, eğitim veri kümenizin Amazon Basit Depolama Hizmeti (Amazon S3). Amazon S3'teki veri kümesinin, biri aşağıdakiler için olmak üzere iki kanalda sunulması bekleniyor: train ve için bir tane validation, dört dizin kullanarak, ikisi resimler için ve ikisi ek açıklamalar için. Ek açıklamaların sıkıştırılmamış PNG görüntüleri olması beklenir. Veri kümesinde ayrıca açıklama eşlemelerinin nasıl oluşturulduğunu açıklayan bir etiket haritası da olabilir. Değilse, algoritma bir varsayılan kullanır. Çıkarım için, bir uç nokta, bir image/jpeg içerik türü. Veri kanallarının gerekli yapısı aşağıdadır:

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

Tren ve doğrulama dizinlerindeki her JPG görüntüsünün, aynı ada sahip karşılık gelen bir PNG etiket görüntüsü vardır. train_annotation ve validation_annotation dizinler. Bu adlandırma kuralı, algoritmanın eğitim sırasında bir etiketi karşılık gelen görüntüsüyle ilişkilendirmesine yardımcı olur. Tren, train_annotation, doğrulama ve validation_annotation kanallar zorunludur. Ek açıklamalar, tek kanallı PNG görüntüleridir. Biçim, görüntüdeki meta veriler (modlar), algoritmanın açıklama görüntülerini tek kanallı 8 bitlik işaretsiz bir tam sayıya okumasına yardımcı olduğu sürece çalışır.

Temel Gerçeği etiketleme işinden çıktı

Temel Doğruluk etiketleme işinden oluşturulan çıktılar aşağıdaki klasör yapısına sahiptir:

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

Segmentasyon maskeleri şuraya kaydedilir: s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. Her açıklama görüntüsü, kaynak görüntünün dizininden ve bu görüntü etiketlemenin tamamlandığı zamandan sonra adlandırılan bir .png dosyasıdır. Örneğin, Mekanik Türk işgücü tarafından oluşturulan kaynak görüntü (Image_1.jpg) ve bunun segmentasyon maskesi (0_2022-02-10T17:41:04.724225.png). Maske indeksinin kaynak resim adındaki sayıdan farklı olduğuna dikkat edin.

Etiketleme işinden alınan çıktı bildirimi, /manifests/output/output.manifest dosya. Bu bir JSON dosyasıdır ve her satır, kaynak görüntü ile etiketi ve diğer meta veriler arasındaki bir eşlemeyi kaydeder. Aşağıdaki JSON satırı, gösterilen kaynak görüntü ile ek açıklaması arasında bir eşleme kaydeder:

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

Kaynak görüntünün adı Image_1.jpg ve ek açıklamanın adı 0_2022-02-10T17:41: 04.724225.png. Verileri SageMaker semantik segmentasyon algoritmasının gerekli veri kanalı formatları olarak hazırlamak için, açıklama adını kaynak JPG görüntüleri ile aynı ada sahip olacak şekilde değiştirmemiz gerekiyor. Ayrıca veri setini şu bölümlere ayırmamız gerekiyor: train ve validation kaynak görüntüler ve açıklamalar için dizinler.

Çıktıyı Temel Doğruluk etiketleme işinden istenen girdi formatına dönüştürün

Çıktıyı dönüştürmek için aşağıdaki adımları tamamlayın:

  1. Etiketleme işindeki tüm dosyaları Amazon S3'ten yerel bir dizine indirin:
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. Bildirim dosyasını okuyun ve ek açıklamanın adlarını kaynak resimlerle aynı adlarla değiştirin:
    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. Tren ve doğrulama veri kümelerini ayırın:
    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. Semantik segmentasyon algoritması veri kanalları için gerekli formatta bir dizin oluşturun:
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. Tren ve doğrulama resimlerini ve açıklamalarını oluşturulan dizinlere taşıyın.
    1. Görüntüler için aşağıdaki kodu kullanın:
      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. Ek açıklamalar için aşağıdaki kodu kullanın:
      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. Tren ve doğrulama veri kümelerini ve ek açıklama veri kümelerini Amazon S3'e yükleyin:
    !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 semantik segmentasyon modeli eğitimi

Bu bölümde, semantik segmentasyon modelinizi eğitmek için adım adım ilerliyoruz.

Örnek not defterini takip edin ve veri kanallarını ayarlayın

içindeki talimatları takip edebilirsiniz. Semantik Segmentasyon algoritması artık Amazon SageMaker'da mevcut anlamsal segmentasyon algoritmasını etiketli veri kümenize uygulamak için. Bu örnek defter algoritmayı tanıtan uçtan uca bir örnek gösterir. Not defterinde, tam evrişimli ağı (FCN) algoritmasını kullanarak Pascal VOC veri kümesi eğitim için. Pascal VOC veri setinden bir model eğitmeyi planlamadığım için bu not defterinde Adım 3'ü (veri hazırlama) atladım. Bunun yerine, doğrudan oluşturdum train_channel, train_annotation_channe, validation_channel, ve validation_annotation_channel resimlerimi ve ek açıklamalarımı sakladığım S3 konumlarını kullanarak:

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

SageMaker tahmin edicide kendi veri kümeniz için hiperparametreleri ayarlayın

Not defterini takip ettim ve bir SageMaker tahmin nesnesi yarattım (ss_estimator) segmentasyon algoritmamı eğitmek için. Yeni veri kümesi için özelleştirmemiz gereken bir şey, ss_estimator.set_hyperparameters: değişmemiz gerek num_classes=21 için num_classes=2 (turtle ve background) ve ben de değiştim epochs=10 için epochs=30 çünkü 10 sadece demo amaçlıdır. Sonra ayarlayarak model eğitimi için p3.2xlarge örneğini kullandım instance_type="ml.p3.2xlarge". Antrenman 8 dakikada tamamlandı. En iyisi MIOU (Birliğe göre Ortalama Kavşak) 0.846'lık bir değerle 11. çağda elde edilir. pix_acc Bu küçük veri kümesi için oldukça iyi bir sonuç olan 0.925 (resminizdeki doğru sınıflandırılan piksellerin yüzdesi).

Model çıkarım sonuçları

Modeli düşük maliyetli bir ml.c5.xlarge örneğinde barındırdım:

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

Son olarak, eğitilmiş segmentasyon modelinin çıkarım sonucunu görmek için 10 kaplumbağa görüntüsünden oluşan bir test seti hazırladım:

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şağıdaki resimler sonuçları göstermektedir.

Deniz kaplumbağalarının segmentasyon maskeleri doğru görünüyor ve Mechanical Turk çalışanları tarafından etiketlenen 300 görüntülük bir veri kümesi üzerinde eğitilen bu sonuçtan memnunum. gibi diğer kullanılabilir ağları da keşfedebilirsiniz. piramit sahne ayrıştırma ağı (PSP) or DeepLab-V3 veri kümenizle birlikte örnek not defterinde.

Temizlemek

Devam eden maliyetlere maruz kalmamak için işiniz bittiğinde uç noktayı silin:

ss_predictor.delete_endpoint()

Sonuç

Bu yazıda, SageMaker kullanarak semantik segmentasyon veri etiketlemesinin ve model eğitiminin nasıl özelleştirileceğini gösterdim. İlk olarak, otomatik segmentasyon aracıyla bir etiketleme işi ayarlayabilir veya bir Mechanical Turk işgücünü (ve diğer seçenekleri) kullanabilirsiniz. 5,000'den fazla nesneniz varsa, otomatik veri etiketlemeyi de kullanabilirsiniz. Ardından, Temel Gerçeği etiketleme işinizden çıktıları, SageMaker yerleşik anlamsal segmentasyon eğitimi için gerekli girdi biçimlerine dönüştürürsünüz. Bundan sonra, aşağıdakilerle anlamsal bir segmentasyon modeli eğitmek için hızlandırılmış bir bilgi işlem örneği (p2 veya p3 gibi) kullanabilirsiniz. defter ve modeli daha uygun maliyetli bir örneğe dağıtın (ml.c5.xlarge gibi). Son olarak, birkaç satır kod ile test veri kümenizdeki çıkarım sonuçlarını inceleyebilirsiniz.

SageMaker anlamsal segmentasyonu kullanmaya başlayın veri etiketleme ve model eğitimi en sevdiğiniz veri seti ile!


Yazar Hakkında

Kara Yang AWS Profesyonel Hizmetlerde Veri Bilimcisidir. Müşterilerin AWS bulut hizmetleriyle iş hedeflerine ulaşmalarına yardımcı olma konusunda tutkulu. Kuruluşların imalat, otomotiv, çevresel sürdürülebilirlik ve havacılık gibi birçok sektörde makine öğrenimi çözümleri oluşturmasına yardımcı oldu.

spot_img

En Son İstihbarat

spot_img