Segmentare de instanță cu Mask R-CNN

Deep Learning pentru imagini cu PyTorch

Michal Oleszak

Machine Learning Engineer

Faster R-CNN

Diagrama arhitecturii Faster R-CNN

Deep Learning pentru imagini cu PyTorch

Mask R-CNN

Diagrama arhitecturii Mask R-CNN

Deep Learning pentru imagini cu PyTorch

Mask R-CNN pre-antrenat în 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)
  • Importă modelul Mask R-CNN
  • Încarcă modelul pre-antrenat
  • Încarcă imaginea de test și transformă în tensor

fotografie cu o pisică lângă un laptop

  • Transmite tensorul imaginii modelului
Deep Learning pentru imagini cu PyTorch

Rezultatele modelului

  • Etichete

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

    print(class_names[17], class_names[73])
    
    cat laptop
    
  • Probabilități de clasă

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

    prediction[0]["masks"]
    
    tensor([[[[0., 0., 0.,  ..., 0., 0., 0.],
              ...]]]])
    
Deep Learning pentru imagini cu PyTorch

Măști soft

  • Valori unice ale măștii

    prediction[0]["masks"].unique()
    
    tensor([0.0000e+00, 5.9713e-08, ..., 
            9.9989e-01, 9.9990e-01])
    
  • Măștile Mask R-CNN:

    • Valori între 0 și 1
    • Reprezintă încrederea modelului că fiecare pixel aparține obiectului
    • Oferă informații mai nuanțate decât măștile binare
    • Pot fi binarizate prin prag, dacă este necesar
Deep Learning pentru imagini cu PyTorch

Afișarea măștilor soft

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()
  • Extrage măștile și etichetele din predicție
  • Iterează peste primele două obiecte, afișând imaginea originală
  • Pentru fiecare obiect, afișează masca semi-transparentă
  • Adaugă titlu și afișează
Deep Learning pentru imagini cu PyTorch

Afișarea măștilor soft

Măști de segmentare de instanță suprapuse pe imagini

Deep Learning pentru imagini cu PyTorch

Să exersăm!

Deep Learning pentru imagini cu PyTorch

Preparing Video For Download...