Tutorial Segment Anything (SAM): Universal Image Segmentation

# Segment Anything (SAM): Tutorial Komprehensif ## Daftar Isi 1. [Pendahuluan](#pendahuluan) 2. [Prasyarat](#prasyarat) 3. [Memahami Arsitektur SAM](#memahami-arsitektur-sam) 4. [Instalasi dan Setup...

By Ruby Abdullah · · tutorial
SAMSegment AnythingImage SegmentationComputer VisionMeta AIZero-Shot

Segment Anything (SAM): Tutorial Komprehensif

Daftar Isi

  • Pendahuluan
  • Prasyarat
  • Memahami Arsitektur SAM
  • Instalasi dan Setup
  • Prompting Berbasis Titik
  • Prompting Berbasis Kotak
  • Prompting Berbasis Teks dengan Grounding
  • Generasi Mask Otomatis
  • Integrasi dengan Model Lain
  • Fine-tuning SAM
  • Deployment
  • Praktik Terbaik
  • Kesimpulan

  • Pendahuluan

    Segment Anything Model (SAM), dikembangkan oleh Meta AI, adalah model fondasi untuk segmentasi gambar. SAM memperkenalkan kemampuan segmentasi zero-shot, yang berarti model ini dapat melakukan segmentasi pada objek apapun dalam gambar apapun tanpa perlu dilatih secara khusus pada kelas objek tersebut. SAM dilatih menggunakan dataset SA-1B yang berisi lebih dari 1 miliar mask dari 11 juta gambar, menjadikannya salah satu model segmentasi paling serbaguna yang tersedia.

    Tutorial ini menyediakan panduan komprehensif untuk menggunakan SAM, mulai dari prompting dasar hingga integrasi lanjutan, fine-tuning, dan deployment di lingkungan produksi.


    Prasyarat

    pip install segment-anything
    

    pip install torch torchvision

    pip install opencv-python numpy matplotlib

    pip install Pillow

    pip install onnxruntime # Untuk deployment berbasis ONNX

    Persyaratan sistem:
    • Python 3.8 atau lebih tinggi
    • GPU dengan minimal 8 GB VRAM (untuk model ViT-H; model yang lebih kecil membutuhkan lebih sedikit)
    • CUDA 11.7 atau lebih tinggi

    Unduh checkpoint model:

    # ViT-H (default, kualitas tertinggi) - 2.4 GB
    

    wget https://dl.fbaipublicfiles.com/segmentanything/samvith4b8939.pth

    ViT-L (besar) - 1.2 GB

    wget https://dl.fbaipublicfiles.com/segmentanything/samvitl0b3195.pth

    ViT-B (base, terkecil) - 375 MB

    wget https://dl.fbaipublicfiles.com/segmentanything/samvitb01ec64.pth


    Memahami Arsitektur SAM

    SAM terdiri dari tiga komponen utama:

  • Image Encoder: Sebuah Vision Transformer (ViT) yang menghasilkan embedding gambar. Gambar diproses satu kali, dan embedding-nya digunakan kembali untuk semua prompt. Ini adalah langkah yang paling memakan komputasi.
  • Prompt Encoder: Mengkodekan prompt yang diberikan pengguna (titik, kotak, mask, atau teks). Titik dan kotak direpresentasikan sebagai positional encoding; mask dikodekan menggunakan konvolusi.
  • Mask Decoder: Sebuah transformer decoder ringan yang menggabungkan embedding gambar dengan embedding prompt untuk menghasilkan mask segmentasi. Decoder ini menghasilkan tiga mask beserta skor kepercayaan untuk menangani ambiguitas.
  • Keunggulan utama arsitektur SAM adalah desain yang terpisah: image encoder yang berat dijalankan sekali saja, sementara prompt encoder dan mask decoder yang ringan dapat dijalankan berkali-kali untuk prompt yang berbeda pada gambar yang sama.


    Instalasi dan Setup

    import torch
    

    import numpy as np

    import cv2

    import matplotlib.pyplot as plt

    from segmentanything import sammodelregistry, SamPredictor, SamAutomaticMaskGenerator

    def muatmodelsam(checkpointpath, tipemodel="vith", device="cuda"):

    """

    Memuat model SAM.

    Pilihan tipemodel: 'vith', 'vitl', 'vitb'

    """

    sam = sammodelregistrytipemodel

    sam.to(device=device)

    return sam

    def tampilkanmask(mask, ax, warnaacak=False):

    """Fungsi utilitas untuk menampilkan mask segmentasi."""

    if warnaacak:

    warna = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)

    else:

    warna = np.array([30 / 255, 144 / 255, 255 / 255, 0.6])

    h, w = mask.shape[-2:]

    maskimage = mask.reshape(h, w, 1) warna.reshape(1, 1, -1)

    ax.imshow(maskimage)

    def tampilkantitik(coords, labels, ax, ukuranmarker=375):

    """Menampilkan titik prompt pada gambar."""

    Artikel Terkait