Instance segmentation ด้วย Mask R-CNN

Deep Learning สำหรับภาพด้วย PyTorch

Michal Oleszak

Machine Learning Engineer

Faster R-CNN

ไดอะแกรมสถาปัตยกรรม Faster R-CNN

Deep Learning สำหรับภาพด้วย PyTorch

Mask R-CNN

ไดอะแกรมสถาปัตยกรรม Mask R-CNN

Deep Learning สำหรับภาพด้วย PyTorch

Mask R-CNN แบบ pre-trained ใน 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)
  • นำเข้าโมเดล Mask R-CNN
  • โหลดโมเดลที่เทรนไว้แล้ว
  • โหลดภาพทดสอบและแปลงเป็น tensor

ภาพถ่ายแมวนั่งอยู่ข้างแล็ปท็อป

  • ส่ง image tensor เข้าโมเดล
Deep Learning สำหรับภาพด้วย PyTorch

ผลลัพธ์ของโมเดล

  • Labels

    prediction[0]["labels"]
    
    tensor([
        17, 73, 76, 73, 67, 42, 63, 84,73, 65, 
        17, 73, 73, 73, 84, 72, 76, 76,17, 15
    ])
    
  • ชื่อคลาส

    print(class_names[17], class_names[73])
    
    cat laptop
    
  • ความน่าจะเป็นของคลาส

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

    prediction[0]["masks"]
    
    tensor([[[[0., 0., 0.,  ..., 0., 0., 0.],
              ...]]]])
    
Deep Learning สำหรับภาพด้วย PyTorch

Soft masks

  • ค่าเฉพาะของ mask

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

    • ค่าอยู่ระหว่าง 0 ถึง 1
    • แสดงความมั่นใจของโมเดลว่าแต่ละพิกเซลเป็นส่วนหนึ่งของวัตถุ
    • ให้ข้อมูลละเอียดกว่า binary mask
    • แปลงเป็น binary ได้โดยการกำหนด threshold
Deep Learning สำหรับภาพด้วย PyTorch

การแสดง soft mask

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()
  • ดึง mask และ label จาก prediction
  • วนซ้ำผ่าน 2 วัตถุแรก โดยพล็อตภาพต้นฉบับ
  • พล็อต mask แบบกึ่งโปร่งใสสำหรับแต่ละวัตถุ
  • เพิ่มชื่อและแสดงผล
Deep Learning สำหรับภาพด้วย PyTorch

การแสดง soft mask

Instance segmentation masks ซ้อนทับบนภาพ

Deep Learning สำหรับภาพด้วย PyTorch

มาฝึกกันเถอะ!

Deep Learning สำหรับภาพด้วย PyTorch

Preparing Video For Download...