Segmentasi instance dengan Mask R-CNN

Deep Learning untuk Gambar dengan PyTorch

Michal Oleszak

Machine Learning Engineer

Faster R-CNN

Diagram arsitektur Faster R-CNN

Deep Learning untuk Gambar dengan PyTorch

Mask R-CNN

Diagram arsitektur Mask R-CNN

Deep Learning untuk Gambar dengan PyTorch

Mask R-CNN pralatih di PyTorch

from torchvision.models.detection import \
maskrcnn_resnet50_fpn


model = maskrcnn_resnet50_fpn(pretrained=True) model.eval()
image = Image.open("cat_and_laptop.jpg") transform = transforms.Compose([ transforms.ToTensor() ]) image_tensor = transform(image).unsqueeze(0)
with torch.no_grad(): prediction = model(image_tensor)
  • Impor model Mask R-CNN
  • Muat model pralatih
  • Muat gambar uji dan ubah ke tensor

foto kucing duduk di samping laptop

  • Berikan tensor gambar ke model
Deep Learning untuk Gambar dengan PyTorch

Keluaran model

  • Label

    prediction[0]["labels"]
    
    tensor([
        17, 73, 76, 73, 67, 42, 63, 84,73, 65, 
        17, 73, 73, 73, 84, 72, 76, 76,17, 15
    ])
    
  • Nama kelas

    print(class_names[17], class_names[73])
    
    cat laptop
    
  • Probabilitas kelas

    prediction[0]["scores"]
    
    tensor([
        0.9981, 0.9672, 0.9061, 0.6893, 0.3729, 
        ..., 
        0.0745, 0.0705, 0.0623, 0.0610, 0.0508
    ])
    
  • Mask

    prediction[0]["masks"]
    
    tensor([[[[0., 0., 0.,  ..., 0., 0., 0.],
              ...]]]])
    
Deep Learning untuk Gambar dengan PyTorch

Mask lunak

  • Nilai mask unik

    prediction[0]["masks"].unique()
    
    tensor([0.0000e+00, 5.9713e-08, ..., 
            9.9989e-01, 9.9990e-01])
    
  • Mask R-CNN menghasilkan mask lunak:

    • Nilai antara 0 dan 1
    • Menunjukkan keyakinan model tiap piksel milik objek
    • Lebih informatif daripada mask biner
    • Dapat dibinerkan dengan ambang jika perlu
Deep Learning untuk Gambar dengan PyTorch

Menampilkan mask lunak

masks = prediction[0]["masks"]
labels = prediction[0]["labels"]


for i in range(2): plt.imshow(image)
plt.imshow( masks[i, 0], cmap="jet", alpha=0.5, )
plt.title( f"Object: {class_names[labels[i]]}" ) plt.show()
  • Ambil mask dan label dari prediksi
  • Ulangi untuk dua objek teratas, tampilkan gambar asli
  • Untuk tiap objek, plot mask semi-transparan
  • Tambahkan judul dan tampilkan
Deep Learning untuk Gambar dengan PyTorch

Menampilkan mask lunak

Mask segmentasi instance ditumpangkan pada gambar

Deep Learning untuk Gambar dengan PyTorch

Ayo berlatih!

Deep Learning untuk Gambar dengan PyTorch

Preparing Video For Download...