Introduktion till bildsegmentering

Djupinlärning för bilder med PyTorch

Michal Oleszak

Machine Learning Engineer

Bildsegmentering

  • Bildsegmentering delar upp bilden i flera segment på pixelnivå
  • Varje pixel tilldelas ett visst segment
  • Tre typer av segmentering:
    • Semantisk segmentering
    • Instanssegmentering
    • Panoramisk segmentering
Djupinlärning för bilder med PyTorch

Semantisk segmentering

semantisk segmentering

  • Varje pixel klassificeras i en klass
  • Alla pixlar i samma klass behandlas lika
Djupinlärning för bilder med PyTorch

Instanssegmentering

instanssegmentering

  • Skiljer mellan olika instanser av samma klass
  • Bakgrunden segmenteras ofta inte
Djupinlärning för bilder med PyTorch

Panoramisk segmentering

panoramisk segmentering

  • Kombinerar semantisk och instansbaserad segmentering
  • Tilldelar en unik etikett till varje instans av ett objekt
  • Klassificerar bakgrunden på pixelnivå
Djupinlärning för bilder med PyTorch

Dataannoteringar

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

fotografi av British Shorthair-katt

Djupinlärning för bilder med PyTorch

Förstå masken

  • Datamängdsdokumentation:

    Pixelannoteringar: 1: Förgrund 2: Bakgrund 3: Oklassificerad

  • Unika maskvärden:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Pixelvärden divideras med 255:

    • 1 / 255 = 0.0039 - objekt
    • 2 / 255 = 0.0.0078 - bakgrund
    • 3 / 255 = 0.0118 - oklassificerad
Djupinlärning för bilder med PyTorch

Skapa en binär 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)

segmenteringsmask

  • torch.where():
    • Villkor
    • Värde om villkoret uppfylls
    • Värde annars
  • Omvandla masken till en PIL-bild
  • Visa maskbilden
Djupinlärning för bilder med PyTorch

Segmentera objektet

object_tensor = image_tensor * binary_mask


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

segmenterad bild

  • Multiplicera bilden med den binära masken
  • Omvandla objektet till en PIL-bild
  • Visa objektbilden
Djupinlärning för bilder med PyTorch

Nu kör vi en övning!

Djupinlärning för bilder med PyTorch

Preparing Video For Download...