การแบ่งส่วนภาพเบื้องต้น

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

Michal Oleszak

Machine Learning Engineer

Image segmentation

  • การแบ่งส่วนภาพ (Image segmentation) แบ่งภาพออกเป็นหลายส่วนในระดับพิกเซล
  • แต่ละพิกเซลในภาพจะถูกกำหนดให้อยู่ในส่วนใดส่วนหนึ่ง
  • การแบ่งส่วนภาพมี 3 ประเภท:
    • Semantic segmentation
    • Instance segmentation
    • Panoptic segmentation
Deep Learning สำหรับภาพด้วย PyTorch

Semantic segmentation

semantic segmentation

  • แต่ละพิกเซลถูกจัดประเภทเป็นคลาส
  • พิกเซลที่อยู่ในคลาสเดียวกันจะได้รับการปฏิบัติเหมือนกัน
Deep Learning สำหรับภาพด้วย PyTorch

Instance segmentation

instance segmentation

  • แยกแยะ instance ที่แตกต่างกันภายในคลาสเดียวกัน
  • โดยทั่วไปพื้นหลังจะไม่ถูกแบ่งส่วน
Deep Learning สำหรับภาพด้วย PyTorch

Panoptic segmentation

panoptic segmentation

  • รวม semantic และ instance segmentation เข้าด้วยกัน
  • กำหนด label เฉพาะให้แต่ละ instance ของวัตถุ
  • จัดประเภทพื้นหลังในระดับพิกเซล
Deep Learning สำหรับภาพด้วย PyTorch

Annotation ของข้อมูล

image = Image.open("images/British_Shorthair_36.jpg")
mask = Image.open("annots/British_Shorthair_36.png")


transform = transforms.Compose([ transforms.ToTensor() ]) image_tensor = transform(image) mask_tensor = transform(mask)
print(f"""Image shape: {image_tensor.shape} Mask shape: {mask_tensor.shape}""")
    Image shape: torch.Size([3, 333, 500])
    Mask shape: torch.Size([1, 333, 500])

ภาพถ่ายแมว British Shorthair

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

ทำความเข้าใจ mask

  • เอกสารประกอบชุดข้อมูล:

    Pixel Annotations: 1: Foreground 2: Background 3: Not classified

  • ค่า mask ที่ไม่ซ้ำกัน:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • ค่าพิกเซลถูกหารด้วย 255:

    • 1 / 255 = 0.0039 - วัตถุ
    • 2 / 255 = 0.0.0078 - พื้นหลัง
    • 3 / 255 = 0.0118 - ไม่ได้จัดประเภท
Deep Learning สำหรับภาพด้วย PyTorch

การสร้าง binary mask

binary_mask = torch.where(
    mask_tensor == 1/255, 
    torch.tensor(1.0),
    torch.tensor(0.0),
)


to_pil_image = transforms.ToPILImage() mask = to_pil_image(binary_mask)
plt.imshow(mask)

segmentation mask

  • torch.where():
    • เงื่อนไข
    • ค่าที่ใช้เมื่อเงื่อนไขเป็นจริง
    • ค่าที่ใช้เมื่อเงื่อนไขไม่เป็นจริง
  • แปลง mask เป็น PIL image
  • แสดงภาพ mask
Deep Learning สำหรับภาพด้วย PyTorch

การแบ่งส่วนวัตถุ

object_tensor = image_tensor * binary_mask


to_pil_image = transforms.ToPILImage() object_image = to_pil_image(object_tensor)
plt.imshow(object_image)

ภาพที่ถูกแบ่งส่วน

  • คูณภาพกับ binary mask
  • แปลงวัตถุเป็น PIL image
  • แสดงภาพวัตถุ
Deep Learning สำหรับภาพด้วย PyTorch

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

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

Preparing Video For Download...