Introducere în segmentarea imaginilor

Deep Learning pentru imagini cu PyTorch

Michal Oleszak

Machine Learning Engineer

Segmentarea imaginilor

  • Segmentarea imaginilor împarte imaginea în mai multe segmente la nivel de pixel
  • Fiecărui pixel îi este atribuit un segment specific
  • Trei tipuri de segmentare:
    • Segmentare semantică
    • Segmentare pe instanțe
    • Segmentare panoptică
Deep Learning pentru imagini cu PyTorch

Segmentare semantică

segmentare semantică

  • Fiecare pixel este clasificat într-o clasă
  • Toți pixelii din aceeași clasă sunt tratați identic
Deep Learning pentru imagini cu PyTorch

Segmentare pe instanțe

segmentare pe instanțe

  • Diferențiază instanțele distincte ale aceleiași clase
  • Fundalul nu este segmentat de regulă
Deep Learning pentru imagini cu PyTorch

Segmentare panoptică

segmentare panoptică

  • Combină segmentarea semantică și cea pe instanțe
  • Atribuie o etichetă unică fiecărei instanțe de obiect
  • Clasifică fundalul la nivel de pixel
Deep Learning pentru imagini cu PyTorch

Adnotările datelor

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

Fotografie cu pisică British Shorthair

Deep Learning pentru imagini cu PyTorch

Înțelegerea măștii

  • Documentația setului de date:

    Adnotări pixeli: 1: Prim-plan 2: Fundal 3: Neclasificat

  • Valorile unice ale măștii:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Valorile pixelilor sunt împărțite la 255:

    • 1 / 255 = 0.0039 - obiect
    • 2 / 255 = 0.0.0078 - fundal
    • 3 / 255 = 0.0118 - neclasificat
Deep Learning pentru imagini cu PyTorch

Crearea unei măști binare

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)

mască de segmentare

  • torch.where():
    • Condiție
    • Valoare dacă condiția este îndeplinită
    • Valoare în caz contrar
  • Transformarea măștii în imagine PIL
  • Afișarea imaginii măștii
Deep Learning pentru imagini cu PyTorch

Segmentarea obiectului

object_tensor = image_tensor * binary_mask


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

imagine segmentată

  • Înmulțirea imaginii cu masca binară
  • Transformarea obiectului în imagine PIL
  • Afișarea imaginii obiectului
Deep Learning pentru imagini cu PyTorch

Să exersăm!

Deep Learning pentru imagini cu PyTorch

Preparing Video For Download...