Instanssegmentering med Mask R-CNN

Djupinlärning för bilder med PyTorch

Michal Oleszak

Machine Learning Engineer

Faster R-CNN

Arkitekturdiagram för Faster R-CNN

Djupinlärning för bilder med PyTorch

Mask R-CNN

Arkitekturdiagram för Mask R-CNN

Djupinlärning för bilder med PyTorch

Förtränad Mask R-CNN i 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)
  • Importera Mask R-CNN-modellen
  • Ladda förtränad modell
  • Ladda testbild och omvandla till tensor

fotografi av en katt som sitter bredvid en bärbar dator

  • Skicka bildtensorn till modellen
Djupinlärning för bilder med PyTorch

Modellens utdata

  • Etiketter

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

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

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

    prediction[0]["masks"]
    
    tensor([[[[0., 0., 0.,  ..., 0., 0., 0.],
              ...]]]])
    
Djupinlärning för bilder med PyTorch

Mjuka masker

  • Unika maskervärden

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

    • Värden mellan 0 och 1
    • Representerar modellens säkerhet att varje pixel tillhör objektet
    • Ger mer nyanserad information än binära masker
    • Kan binariseras med tröskling vid behov
Djupinlärning för bilder med PyTorch

Visa mjuka masker

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()
  • Hämta masker och etiketter från prediktion
  • Iterera över de två främsta objekten och rita originalbilden
  • Rita den genomskinliga masken för varje objekt
  • Lägg till titel och visa
Djupinlärning för bilder med PyTorch

Visa mjuka masker

Instanssegmenteringsmasker överlagrade på bilderna

Djupinlärning för bilder med PyTorch

Nu kör vi en övning!

Djupinlärning för bilder med PyTorch

Preparing Video For Download...