Giới thiệu về phân đoạn ảnh

Deep Learning cho Ảnh với PyTorch

Michal Oleszak

Machine Learning Engineer

Phân đoạn ảnh

  • Phân đoạn ảnh chia ảnh thành nhiều vùng ở mức pixel
  • Mỗi pixel được gán vào một vùng cụ thể
  • Ba loại phân đoạn:
    • Phân đoạn ngữ nghĩa
    • Phân đoạn theo thể hiện
    • Phân đoạn toàn diện (panoptic)
Deep Learning cho Ảnh với PyTorch

Phân đoạn ngữ nghĩa

phân đoạn ngữ nghĩa

  • Mỗi pixel được phân vào một lớp
  • Mọi pixel cùng lớp được xử lý như nhau
Deep Learning cho Ảnh với PyTorch

Phân đoạn theo thể hiện

phân đoạn theo thể hiện

  • Phân biệt các thể hiện khác nhau của cùng một lớp
  • Thường không phân đoạn nền
Deep Learning cho Ảnh với PyTorch

Phân đoạn toàn diện (panoptic)

phân đoạn panoptic

  • Kết hợp ngữ nghĩa và theo thể hiện
  • Gán nhãn riêng cho từng thể hiện
  • Phân loại nền ở mức pixel
Deep Learning cho Ảnh với PyTorch

Chú thích dữ liệu

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])

ảnh mèo British Shorthair

Deep Learning cho Ảnh với PyTorch

Tìm hiểu mặt nạ

  • Tài liệu tập dữ liệu:

    Chú giải pixel: 1: Tiền cảnh 2: Nền 3: Chưa phân loại

  • Giá trị mặt nạ duy nhất:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Giá trị pixel được chia cho 255:

    • 1 / 255 = 0.0039 - đối tượng
    • 2 / 255 = 0.0.0078 - nền
    • 3 / 255 = 0.0118 - chưa phân loại
Deep Learning cho Ảnh với PyTorch

Tạo mặt nạ nhị phân

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)

mặt nạ phân đoạn

  • torch.where():
    • Điều kiện
    • Giá trị nếu thỏa điều kiện
    • Giá trị nếu không
  • Chuyển mặt nạ sang ảnh PIL
  • Hiển thị ảnh mặt nạ
Deep Learning cho Ảnh với PyTorch

Phân đoạn đối tượng

object_tensor = image_tensor * binary_mask


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

ảnh đã phân đoạn

  • Nhân ảnh với mặt nạ nhị phân
  • Chuyển đối tượng sang ảnh PIL
  • Hiển thị ảnh đối tượng
Deep Learning cho Ảnh với PyTorch

Ayo berlatih!

Deep Learning cho Ảnh với PyTorch

Preparing Video For Download...