آموزش هوش مصنوعی

بخش‌بندی تصویر چیست؟ از تشخیص شیء تا برچسب‌گذاری پیکسل با U-Net

متوسط مطالعه در ۸ دقیقه بخش ۳۹ از ۴۰ در مبانی هوش مصنوعی و علم داده
mahdyar
بخش‌بندی تصویر چیست؟ از تشخیص شیء تا برچسب‌گذاری پیکسل با U-Net

بخش‌بندی تصویر همان کاری است که وقتی در تماس تصویری پس‌زمینه‌ی خود را تار یا عوض می‌کنید، پشت صحنه انجام می‌شود. سیستم باید برای هر پیکسل بداند متعلق به شماست یا به اتاق پشت سرتان. یک کادر مستطیلی دور شما کافی نیست. مرز دقیق موها، شانه‌ها و دست‌ها لازم است.

در قسمت قبل تشخیص اشیا را دیدیم که محل هر شیء را با یک کادر مشخص می‌کرد. بخش‌بندی یک قدم دقیق‌تر است. در این قسمت انواع بخش‌بندی را می‌شناسیم، معماری U-Net را می‌فهمیم و یاد می‌گیریم کیفیت ماسک را بسنجیم.

بخش‌بندی تصویر چیست؟

بخش‌بندی تصویر را می‌شود طبقه‌بندی پیکسل‌ها دانست. به جای یک برچسب برای کل تصویر، برای هر پیکسل یک برچسب تعیین می‌کنیم. خروجی یک ماسک است؛ تصویری هم‌اندازه‌ی ورودی که هر پیکسلش شماره‌ی دسته را دارد.

بخش‌بندی معنایی و نمونه‌ای

دو نوع اصلی بخش‌بندی وجود دارد. بخش‌بندی معنایی فقط دسته‌ی هر پیکسل را تعیین می‌کند. اگر در تصویر پنج گوسفند باشد، همه‌ی پیکسل‌هایشان برچسب «گوسفند» می‌گیرند و مرز بین آن‌ها مشخص نیست.

بخش‌بندی نمونه‌ای یک قدم جلوتر می‌رود. هر گوسفند ماسک جداگانه‌ی خودش را دارد. پس می‌شود آن‌ها را شمرد یا یکی را جداگانه بررسی کرد. نوع سومی هم به نام بخش‌بندی سراسری وجود دارد که هر دو را ترکیب می‌کند؛ هم پس‌زمینه‌هایی مثل آسمان و جاده را برچسب می‌زند و هم اشیای شمارش‌پذیر را جدا می‌کند.

جایگاه بخش‌بندی در بینایی کامپیوتر

طبقه‌بندی می‌گوید «چه چیزی». تشخیص اشیا می‌گوید «چه چیزی و تقریباً کجا». بخش‌بندی می‌گوید «چه چیزی و دقیقاً کدام پیکسل‌ها». هرچه دقت مکانی بیشتر، برچسب‌گذاری داده هم سخت‌تر و گران‌تر.

برچسب زدن یک تصویر برای طبقه‌بندی چند ثانیه طول می‌کشد. کشیدن کادر دور اشیا شاید یک دقیقه. اما کشیدن مرز دقیق هر شیء برای بخش‌بندی ممکن است ده دقیقه یا بیشتر طول بکشد. این هزینه را پیش از انتخاب بخش‌بندی در نظر بگیرید.

معماری رمزگذار-رمزگشا و U-Net

همه‌ی معماری‌های بخش‌بندی ساختار مشابهی دارند که شبیه اتوانکودر است. رمزگذار ویژگی‌ها را از تصویر استخراج می‌کند و اندازه را کوچک می‌کند. رمزگشا ویژگی‌ها را دوباره به اندازه‌ی اصلی بزرگ می‌کند و ماسک را می‌سازد. نمودار زیر این مسیر را نشان می‌دهد.

مسیر بخش‌بندی تصویر در معماری رمزگذار-رمزگشا و U-Net تا ماسک پیکسلی

مشکل از دست رفتن جزئیات

رمزگذار با لایه‌های ادغام، اندازه را چند بار نصف می‌کند. این برای فهمیدن «چه چیزی» عالی است. اما جزئیات مکانی دقیق در این مسیر از دست می‌رود. رمزگشایی که فقط از خروجی فشرده‌ی رمزگذار استفاده کند، مرزهای تار و نادقیق می‌سازد.

این مشکل در کاربردهای پزشکی جدی است. مرز یک تومور یا یک خال باید دقیق باشد. چند پیکسل خطا می‌تواند تشخیص را عوض کند.

U-Net و اتصال‌های میان‌بر

U-Net در سال ۲۰۱۵ برای بخش‌بندی تصویرهای زیست‌پزشکی معرفی شد و این مشکل را حل کرد. نامش از شکل U آن آمده است. شاخه‌ی چپ رمزگذار است و شاخه‌ی راست رمزگشا.

ایده‌ی کلیدی، اتصال‌های میان‌بر است. خروجی هر لایه‌ی رمزگذار مستقیماً به لایه‌ی هم‌اندازه در رمزگشا منتقل و با آن ترکیب می‌شود. رمزگشا هم «چه چیزی» را از پایین U می‌گیرد و هم «کجای دقیق» را از اتصال‌های میان‌بر. نتیجه مرزهای بسیار دقیق‌تر است، حتی با داده‌ی آموزش کم.

بیشتر بخوانید: ساختار رمزگذار و رمزگشا و فضای نهفته را که U-Net بر آن ساخته شده، در اتوانکودر چیست؟ دیدیم.

تابع خطا و معیارهای ارزیابی

در بخش‌بندی، ساده‌ترین تابع خطا آنتروپی متقاطع روی هر پیکسل است. هر پیکسل یک مسئله‌ی طبقه‌بندی جداگانه است و خطای کل، میانگین همه‌ی پیکسل‌هاست. اما این روش یک ضعف مهم دارد.

مشکل عدم توازن و خطای Dice

در بسیاری از تصویرها، شیء مورد نظر فقط بخش کوچکی از تصویر است. مثلاً یک خال پوستی ممکن است پنج درصد پیکسل‌ها باشد. مدلی که همه‌ی پیکسل‌ها را «پس‌زمینه» بگوید، ۹۵ درصد دقت پیکسلی دارد، اما کاملاً بی‌فایده است.

خطای Dice این مشکل را حل می‌کند. ضریب Dice دو برابر ناحیه‌ی مشترک ماسک پیش‌بینی و واقعی را بر مجموع مساحت دو ماسک تقسیم می‌کند. پیکسل‌های پس‌زمینه‌ی درست در آن اثری ندارند. پس مدل مجبور است روی خود شیء تمرکز کند:

python
import torch

def dice_loss(logits, target, eps=1.0):
    prob = torch.sigmoid(logits).flatten(1)
    target = target.flatten(1)
    inter = (prob * target).sum(1)
    dice = (2 * inter + eps) / (prob.sum(1) + target.sum(1) + eps)
    return 1 - dice.mean()

IoU و Dice برای ارزیابی

برای ارزیابی ماسک، IoU و ضریب Dice رایج‌ترین معیارها هستند. IoU همان معیاری است که در تشخیص اشیا دیدیم، فقط این بار روی پیکسل‌ها حساب می‌شود. Dice و IoU رابطه‌ی نزدیکی دارند و معمولاً رتبه‌بندی یکسانی از مدل‌ها می‌دهند.

دقت پیکسلی را گزارش نکنید، یا دست‌کم تنها معیار نباشد. همان‌طور که دیدیم، در داده‌ی نامتوازن عددی گمراه‌کننده می‌دهد. برای بخش‌بندی چنددسته‌ای، میانگین IoU همه‌ی دسته‌ها یا mIoU معیار استاندارد است.

کاربردهای بخش‌بندی تصویر

بخش‌بندی در حوزه‌های زیادی به کار می‌رود. دو کاربرد را از نزدیک می‌بینیم؛ تصویربرداری پزشکی و جدا کردن انسان از پس‌زمینه.

تصویربرداری پزشکی؛ بخش‌بندی خال

در درس اصلی، شبکه‌ای برای بخش‌بندی خال‌های پوستی از مجموعه‌داده‌ی PH2 آموزش داده می‌شود. ماسک دقیق خال به پزشک کمک می‌کند اندازه، شکل و نامتقارن بودن آن را اندازه بگیرد. این ویژگی‌ها در تشخیص خال‌های مشکوک اهمیت دارند.

اما یک هشدار جدی؛ چنین مدلی ابزار کمکی است، نه جایگزین پزشک. داده‌ی آموزش ممکن است تنوع رنگ پوست کافی نداشته باشد. همان‌طور که در قسمت سوگیری دیدیم، ارزیابی تفکیکی برای گروه‌های مختلف پیش از هر استفاده‌ی بالینی ضروری است.

جدا کردن پس‌زمینه با مدل آماده

جدا کردن انسان از پس‌زمینه در تولید ویدئو، تماس تصویری و ویرایش عکس کاربرد دارد. مدل‌های آماده‌ای مثل DeepLabV3 در torchvision برای این کار آماده‌اند. دسته‌ی «شخص» در خروجی این مدل، ماسک انسان را می‌دهد.

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

weights = DeepLabV3_ResNet50_Weights.DEFAULT
model = deeplabv3_resnet50(weights=weights).eval()
img = read_image("portrait.jpg")
with torch.no_grad():
    out = model(weights.transforms()(img).unsqueeze(0))["out"][0]
person = weights.meta["categories"].index("person")
mask = out.argmax(0) == person          # ماسک پیکسلی انسان

تمرین عملی؛ ماسک و معیار

با مدل آماده‌ی DeepLabV3 این کارها را انجام دهید:

  • ماسک انسان: روی پنج عکس پرتره، ماسک «شخص» را بسازید و روی تصویر رسم کنید.
  • حذف پس‌زمینه: پیکسل‌های بیرون ماسک را سفید کنید و نتیجه را ذخیره کنید.
  • ماسک دستی: برای یک عکس، ماسک واقعی را با یک ابزار ساده‌ی نقاشی بکشید.
  • معیارها: IoU، Dice و دقت پیکسلی را برای آن عکس حساب کنید.
  • مرزها: ناحیه‌هایی را که مدل اشتباه کرده، مثلاً موها یا انگشتان، بررسی کنید.

مقایسه‌ی دقت پیکسلی با IoU نشان می‌دهد چرا دقت پیکسلی به‌تنهایی معیار خوبی نیست.

سخن پایانی

بخش‌بندی تصویر برای هر پیکسل یک برچسب تعیین می‌کند و مرز دقیق اشیا را نشان می‌دهد. بخش‌بندی معنایی فقط دسته را مشخص می‌کند و بخش‌بندی نمونه‌ای نمونه‌های جداگانه را هم از هم جدا می‌کند. معماری رمزگذار-رمزگشا پایه‌ی همه‌ی روش‌هاست و U-Net با اتصال‌های میان‌بر، جزئیات مکانی را حفظ می‌کند.

برای داده‌ی نامتوازن، خطای Dice و معیارهای IoU و Dice از دقت پیکسلی قابل اعتمادترند. و در کاربردهای حساس مثل پزشکی، مدل ابزار کمکی است که باید برای همه‌ی گروه‌ها جداگانه ارزیابی شود.

این آموزش بر پایه‌ی درس Segmentation از مجموعه‌ی آزاد AI for Beginners مایکروسافت (مجوز MIT) به فارسی بازنویسی و تکمیل شده است.

پرسش‌های پرتکرار

بخش‌بندی تصویر چیست؟

بخش‌بندی تصویر وظیفه‌ای در بینایی کامپیوتر است که برای هر پیکسل تصویر یک برچسب تعیین می‌کند. نتیجه یک ماسک هم‌اندازه‌ی تصویر است که مرز دقیق اشیا را نشان می‌دهد، نه فقط یک کادر مستطیلی دور آن‌ها.

تفاوت بخش‌بندی معنایی و نمونه‌ای چیست؟

بخش‌بندی معنایی فقط دسته‌ی هر پیکسل را مشخص می‌کند؛ همه‌ی گوسفندهای تصویر یک رنگ می‌گیرند. بخش‌بندی نمونه‌ای علاوه بر دسته، نمونه‌های جداگانه را هم از هم جدا می‌کند؛ هر گوسفند ماسک خودش را دارد.

U-Net چیست؟

U-Net معماری رمزگذار-رمزگشا برای بخش‌بندی است که در اصل برای تصویرهای پزشکی ساخته شد. اتصال‌های میان‌بری بین لایه‌های هم‌اندازه‌ی رمزگذار و رمزگشا دارد که جزئیات مکانی را حفظ می‌کنند و مرزهای دقیق‌تری می‌سازند.

خطای Dice چیست و چرا در بخش‌بندی استفاده می‌شود؟

خطای Dice بر پایه‌ی ضریب Dice است که هم‌پوشانی ماسک پیش‌بینی و ماسک واقعی را می‌سنجد. وقتی شیء کوچکی در تصویر بزرگ داریم و بیشتر پیکسل‌ها پس‌زمینه‌اند، خطای Dice از خطای آنتروپی متقاطع پیکسلی مقاوم‌تر است.

دیدگاه‌ها

هنوز دیدگاهی ثبت نشده است. شروع‌کننده باشید — پرسش و اصلاح را با آغوش باز می‌پذیریم.

دیدگاه بگذارید

برای **پررنگ**، *مورب*، `کد` و لینک از Markdown استفاده کنید. لینک‌ها nofollow هستند.

پنج رقم داخل تصویر را وارد کنید. اعداد فارسی و انگلیسی پذیرفته می‌شوند.

تصویر کد امنیتی پنج‌رقمی

در حال دریافت کد امنیتی…

مهلت کد تمام شد. روی «کد جدید» بزنید.