الرؤية الحاسوبية متوسط · Intermediate 15 دقيقة

تقسيم الصور

Image Segmentation

التصنيف على مستوى البكسل: التقسيم الدلالي وتقسيم النسخ والتقسيم الشامل، ومقاييس Dice وIoU.

تقدّمك في المسار0%

الأنواع الثلاثة

النوعالسؤالمثال
دلاليما فئة كل بكسل؟طريق، رصيف، سماء
النسخأي بكسلات لكل جسم؟سيارة 1، سيارة 2
شامل (Panoptic)الاثنان معاًأجسام معدودة + خلفيات

بنية مشفر-مفكك

  • المشفر: يقلص الأبعاد المكانية ويستخلص سمات دلالية (غالباً CNN مدربة مسبقاً).
  • المفكك: يعيد الدقة المكانية بالتكبير (upsampling أو الالتفاف المنقول) لينتج خريطة بحجم الصورة.
  • وصلات التخطي: تنقل التفاصيل الدقيقة من المشفر إلى المفكك، وهي جوهر U-Net.

المقاييس

$$\text{Dice} = \frac{2|P \cap G|}{|P| + |G|} \qquad \text{IoU} = \frac{|P \cap G|}{|P \cup G|}$$

import numpy as np
def dice(pred, gt, eps=1e-7):
    pred, gt = pred.astype(bool), gt.astype(bool)
    return (2 * (pred & gt).sum() + eps) / (pred.sum() + gt.sum() + eps)

للتقسيم الدلالي متعدد الفئات يُحسب IoU لكل فئة ثم المتوسط (mIoU).

تجربة نموذج مدرب مسبقاً

import torch
from torchvision.models.segmentation import deeplabv3_resnet50, DeepLabV3_ResNet50_Weights
from torchvision.io import read_image

weights = DeepLabV3_ResNet50_Weights.DEFAULT
model = deeplabv3_resnet50(weights=weights).eval()
img = read_image("street.jpg")
with torch.no_grad():
    out = model(weights.transforms()(img).unsqueeze(0))["out"]
mask = out.argmax(1)[0]           # فئة لكل بكسل

نماذج التقسيم العامة

نموذج Segment Anything (SAM) يقسم أي جسم انطلاقاً من نقطة أو مربع يحدده المستخدم، وقد دُرب على أكثر من مليار قناع. مفيد في التسمية السريعة، مع ضرورة التحقق من دقته في المجالات المتخصصة كالطب.

مصطلحات الدرس

التقسيم الدلالي Semantic Segmentation
إسناد فئة لكل بكسل في الصورة دون التمييز بين الأجسام المنفصلة من الفئة نفسها.
تقسيم النسخ Instance Segmentation
تحديد قناع منفصل لكل جسم في الصورة مع فئته.
معامل Dice Dice Coefficient
مقياس للتداخل بين قناعين يساوي ضعف التقاطع مقسوماً على مجموع مساحتيهما.

الملخص

تقسيم الصور يسند تسمية لكل بكسل. التقسيم الدلالي يحدد فئة كل بكسل دون التمييز بين نسخ الفئة الواحدة، وتقسيم النسخ يفصل كل جسم بقناع مستقل، والتقسيم الشامل يجمع الاثنين. تعتمد المعماريات على بنية مشفر-مفكك مثل FCN وU-Net وDeepLab، أو على امتداد الكاشفات مثل Mask R-CNN. يُقيَّم بمعامل Dice وIoU على مستوى البكسل، وله أهمية كبيرة في التصوير الطبي.

أسئلة مراجعة

  1. ما الفرق بين التقسيم الدلالي وتقسيم النسخ في صورة فيها ثلاث سيارات؟

    الدلالي يسمي كل بكسلات السيارات «سيارة» معاً، وتقسيم النسخ يعطي كل سيارة قناعاً مستقلاً.

  2. ما العلاقة بين Dice وIoU؟

    Dice = 2·IoU/(1 + IoU)، فكلاهما يقيس التداخل لكن Dice أعلى قيمة لنفس التداخل الجزئي.

المصادر والمراجع

  1. Long, Shelhamer & Darrell (2014) Fully Convolutional Networks for Semantic Segmentation — arXiv
  2. He et al. (2017) Mask R-CNN — arXiv
  3. Chen et al. (2016) DeepLab — arXiv
  4. Kirillov et al. (2023) Segment Anything — arXiv

إكمال الدرس