Notebooks
H
Hugging Face
Semantic Segmentation Fine Tuning Inference

Semantic Segmentation Fine Tuning Inference

hf-cookbooknotebookstr

Özel Bir Veri Seti Üzerinde Semantik Segmentasyon Modeli Fine-Tuning Etmek ve Inference API Üzerinden Kullanımı

Yazar: Sergio Paniego Çevirmen: Onuralp Sezer

Bu notebook'ta, özel veri seti üzerinde bir semantik segmentasyon modelinin fine tune sürecini adım adım gözden geçireceğiz. Kullanacağımız model, segmentasyon görevleri için güçlü ve esnek bir transformer mimarisi tabanlı olan ve önceden eğitilmiş Segformer olacaktır.

Segformer mimarisi

Veri seti olarak, etiketli kaldırım görüntüleri içeren segments/sidewalk-semantic veri setini kullanacağız; bu modelimizi kentsel ortamlardaki uygulamalar için ideal hale getirecek.

Örnek kullanım durumu: Bu model, pizza siparişlerinizi kapınıza kadar teslim etmek için kaldırımda otonom olarak gezinme yeteneğine sahip bir teslimat robotunda kullanılabilir. 🍕

Modeli Fine-Tune yaptıktan sonra, onu Serverless Inference API kullanarak nasıl kullanacağımızı göstereceğiz ve basit bir API endpoint aracılığıyla erişilebilir hale getireceğiz.

1. Kütüphanelerin Kurulumu

Başlamak için, semantik segmentasyon modelimizi fine-tuning yapmak için gerekli olan temel kütüphaneleri yükleyeceğiz.

[ ]

2. Verisetinin Yüklenmesi 📁

Belçika'da 2021 yılı yazında toplanan kaldırım görüntülerinden oluşan sidewalk-semantic veri setini kullanacağız.

Veri seti şunları içermektedir:

  • 1.000 görüntü ve bunlara karşılık gelen semantik segmentasyon maskeleri 🖼
  • 34 farklı kategori 📦

Bu veri seti sınırlı erişimdedir, bu yüzden erişim sağlamak için oturum açmanız ve lisansı kabul etmeniz gerekmektedir. Ayrıca, eğitimin ardından fine-tuned modeli Hub'a yüklemek için kimlik doğrulaması gerekmektedir.

[ ]
[6]
[ ]

Veri setine, yapısını inceleyerek aşina olun!

[8]
DatasetDict({
,    train: Dataset({
,        features: ['pixel_values', 'label'],
,        num_rows: 1000
,    })
,})

Veri seti sadece eğitim seti içerdiği için, bunu manuel olarak eğitim ve test setlerine ayıracağız. Verilerin %80'ini eğitim için ayıracak ve kalan %20'sini değerlendirme ve test için saklayacağız. ➗

[9]

Bir örnekte bulunan nesne türlerini inceleyelim. pixels_values RGB görüntüyü tutarken, label gerçek referans maske(ground truth mask) içeriyor. Maske, her pikselin RGB görüntüsündeki karşılık gelen pikselin kategorisini temsil ettiği tek kanallı bir görüntüdür.

[10]
{'pixel_values': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080>,
, 'label': <PIL.PngImagePlugin.PngImageFile image mode=L size=1920x1080>}

3. Örneklerin Görselleştirilmesi! 👀

Veri setini yükledikten sonra, yapısını daha iyi anlamak için birkaç örneği maskeleriyle birlikte görselleştirelim.

Veri seti, her bir ID ile ilişkilendirilen kategori etiketlerini içeren bir JSON dosyası içerir. Bu dosyayı açarak her id2label ile eşleşenleri okuyacağız.

[11]
id2label.json:   0%|          | 0.00/852 [00:00<?, ?B/s]
Id2label: {0: 'unlabeled', 1: 'flat-road', 2: 'flat-sidewalk', 3: 'flat-crosswalk', 4: 'flat-cyclinglane', 5: 'flat-parkingdriveway', 6: 'flat-railtrack', 7: 'flat-curb', 8: 'human-person', 9: 'human-rider', 10: 'vehicle-car', 11: 'vehicle-truck', 12: 'vehicle-bus', 13: 'vehicle-tramtrain', 14: 'vehicle-motorcycle', 15: 'vehicle-bicycle', 16: 'vehicle-caravan', 17: 'vehicle-cartrailer', 18: 'construction-building', 19: 'construction-door', 20: 'construction-wall', 21: 'construction-fenceguardrail', 22: 'construction-bridge', 23: 'construction-tunnel', 24: 'construction-stairs', 25: 'object-pole', 26: 'object-trafficsign', 27: 'object-trafficlight', 28: 'nature-vegetation', 29: 'nature-terrain', 30: 'sky', 31: 'void-ground', 32: 'void-dynamic', 33: 'void-static', 34: 'void-unclear'}

Her kategoriye renkler atayalım 🎨. Bu, segmentasyon sonuçlarını daha etkili bir şekilde görselleştirmemize ve görüntülerimizdeki farklı kategorileri yorumlamamızı kolaylaştıracaktır.

[12]

Veri setinden bazı örnekleri görselleştirebiliriz; bunlar RGB görüntü ve ona karşılık gelen maske ve maskenin görüntü üzerine bindirilmiş hali bulunur. Bu, veri setini ve maskelerin görüntülerle nasıl eşleştiğini daha iyi anlamamıza yardımcı olacaktır. 📸

[13]
OutputOutputOutputOutputOutputOutput

4. Sınıf Görünümlerini Görselleştirme 📊

Veri seti hakkında daha derinlemesine bilgiler edinmek için, her bir sınıfın görünüm sayılarını grafiğe dökelim. Bu, sınıfların dağılımını anlamamıza ve veri setindeki olası önyargıları veya dengesizlikleri belirlememize yardımcı olacaktır.

[14]
[15]
Output

5. Image Processor'un Oluşturulması ve Albumentations ile Veri Artırımı Yapımı (Data Augmentation) 📸

Image Processor'u oluşturduktan sonra Albumentations kullanarak veri artırımı 🪄 uygulayacağız. Bu, veri setimizi zenginleştirmeye ve semantik segmentasyon modelimizin performansının artmasına yardımcı olacaktır.

[ ]
The cache for model files in Transformers v4.22.0 has been updated. Migrating your old cache. This is a one-time only operation. You can interrupt this and resume the migration later on by calling `transformers.utils.move_cache()`.
0it [00:00, ?it/s]

6. Modeli Checkpoint'ten Başlatın

nvidia/mit-b0 checkpoint'inden önceden eğitilmiş bir Segformer modelini kullanacağız. Bu mimari, SegFormer: Transformers ile Semantik Segmentasyon için Basit ve Verimli Tasarım - (SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers) başlıklı çalışmada detaylandırılmıştır ve ImageNet-1k üzerinde önceden eğitilmiştir.

[ ]

7. Eğitim Argümanlarını Ayarlayın ve Weights & Biases ile Bağlantı Kurulumu 📉

Sonraki adımda, eğitim argümanlarını yapılandırılması ve Weights & Biases (W&B) ile bağlantı kuracağız. W&B, deneyleri takip etmemize, metrikleri görselleştirmemize ve model eğitim iş akışını yönetmemize yardımcı olacak, süreç boyunca değerli bilgiler sağlayacaktır.

[ ]
[ ]

8. evaluate ile Geliştirilmiş Loglama için Özel compute_metrics Methodunu Ayarlanamsı

Modelin performansını değerlendirmek için birincil metrik olarak ortalama kesiştirilmiş Bölgeler - mean Intersection over Union (ortalama IoU) kullanacağız. Bu, her kategorideki performansı detaylı bir şekilde takip etmemizi sağlayacaktır.

Ayrıca, çıktıdaki uyarıları en aza indirmek için değerlendirme modülünün loglama seviyesini ayarlayacağız. Bir kategori bir görüntüde tespit edilmezse, aşağıdaki gibi uyarılar görebilirsiniz:

RuntimeWarning: invalid value encountered in divide iou = total_area_intersect / total_area_union

Bu hücreyi atlayabilirsiniz eğer bu uyarıları görmek isterseniz ve bir sonraki adıma geçebilirsiniz.

[ ]
[ ]

9. Modeli Özel Veri Setimiz Üzerinde Eğitimi 🏋

Artık modeli özel veri setimiz üzerinde eğitme zamanı geldi. Eğitim sürecini izlemek ve gerekirse ayarlamalar yapmak için hazırlanan eğitim argümanlarını ve bağlı Weights & Biases entegrasyonunu kullanacağız. Eğitime başlayalım ve modelin performansını geliştirmesini izleyelim!

[ ]
[ ]

10. Yeni Görüntüler Üzerinde Model Performansını Değerlendirelim 📸

Eğitimden sonra, modelin yeni görüntüler üzerindeki performansını değerlendireceğiz. Bir test görüntüsü kullanacak ve modelin görünmeyen veriler üzerindeki performansını değerlendirmek için bir pipeline kullanacağız.

[ ]
[ ]
Output

Model bazı maskeler oluşturdu, bunları görselleştirerek performansını değerlendirebilir ve anlayabiliriz. Bu, modelin görüntülerinin ne kadar iyi segmente edildiğini görmemize ve iyileştirmemiz gerektiren alanları belirlememize yardımcı olacaktır.

[ ]
Output

11. Test Set Üzerinde Performansı Değerlendirin 📊

[ ]

12. Modeli Inference API'si ile Erişip ve Sonuçları Görselleştirelim 🔌

Hugging Face 🤗, "API endpoint" aracılığıyla modelleri doğrudan test etmenizi sağlayan Serverless Inference API sunmaktadır. Bu API'yi kullanma konusunda ayrıntılı bilgi için bu cookbook sayfasına göz atın.

Bu API'yi modelimizi test etmek ve API işlevselliğini öğrenmek amacıyla kullanacağız.

ÖNEMLİ

Serverless Inference API'sini kullanmadan önce, bir model kartı oluşturarak model görevini ayarlamanız gerekir. Fine-Tune yapılmış modeliniz için model kartını oluştururken, görevi uygun bir şekilde belirttiğinizden emin olun.

image.png

Model görevini ayarlandıktan sonra, bir görüntü indirebilir ve modeli test etmek için InferenceClient kullanabiliriz. Bu istemci, görüntüyü API aracılığıyla modele göndermemizi ve değerlendirme için sonuçları almamızı sağlayacaktır.

[ ]
Output

InferenceClient'tan image_segmentation metodunu kullanacağız. Bu metod, model ve bir görüntü girişi alır ve tahmin edilen maskeleri döndürür. Bu, modelin yeni görüntüler üzerindeki performansını test etmemizi sağlayacaktır.

[ ]

Tahmin edilen maskelerle sonuçları görüntüleyebiliriz.

[ ]
/usr/local/lib/python3.10/dist-packages/huggingface_hub/inference/_generated/types/base.py:139: FutureWarning: Accessing 'ImageSegmentationOutputElement' values through dict is deprecated and will be removed from version '0.25'. Use dataclass attributes instead.
  warnings.warn(