Segmentation در تصاویر
Image Segmentation یا بخشبندی تصویر یکی از مهمترین مفاهیم در بینایی ماشین (Computer Vision) است که هدف آن تقسیم تصویر به نواحی معنادار و مشخصکردن پیکسلهای متعلق به هر ناحیه است.
Segmentation چیست؟
فرض کنید یک تصویر شامل یک خودرو، خیابان، درخت و آسمان باشد.
در Classification فقط میگوییم:
این تصویر شامل خودرو است.
در Object Detection میگوییم:
خودرو در این قسمت تصویر قرار دارد.
اما در Segmentation مشخص میکنیم:
دقیقاً کدام پیکسلها متعلق به خودرو هستند.
یعنی خروجی Segmentation معمولاً یک Mask است که برای هر پیکسل مشخص میکند به چه شیء یا ناحیهای تعلق دارد.
انواع اصلی Image Segmentation
۱. Semantic Segmentation
در Semantic Segmentation، تمام پیکسلهای متعلق به یک کلاس، یک برچسب مشترک دریافت میکنند.
مثلاً:
Sky → آسمان Road → جاده Car → خودرو Person → انسان Building → ساختمان
اگر در تصویر سه خودرو وجود داشته باشد، هر سه با برچسب Car مشخص میشوند و از یکدیگر تفکیک نمیشوند.
کاربردها:
- خودروهای خودران
- تحلیل تصاویر ماهوارهای
- پزشکی
- تشخیص جاده
- تحلیل محیط
۲. Instance Segmentation
در Instance Segmentation علاوه بر تشخیص کلاس، هر نمونه از یک شیء بهصورت جداگانه مشخص میشود.
مثلاً اگر پنج خودرو داشته باشیم:
Car #1 → Mask 1 Car #2 → Mask 2 Car #3 → Mask 3 Car #4 → Mask 4 Car #5 → Mask 5
بنابراین حتی اگر دو خودرو کنار هم باشند، مدل میتواند آنها را از هم تفکیک کند.
یکی از مدلهای معروف این حوزه Mask R-CNN است.
۳. Panoptic Segmentation
Panoptic Segmentation ترکیبی از Semantic و Instance Segmentation است.
برای اشیای قابلشمارش، مانند خودرو و انسان، هر Instance جدا میشود:
Person 1 Person 2 Car 1 Car 2
اما برای بخشهای پسزمینه مانند:
Sky Road Grass Building
یک برچسب معنایی اختصاص داده میشود.
تفاوت Classification، Detection و Segmentation
روش خروجی Classification کلاس تصویر Object Detection کلاس + Bounding Box Semantic Segmentation کلاس هر پیکسل Instance Segmentation کلاس + Mask برای هر شیء Panoptic Segmentation Semantic + Instance
| روش | خروجی |
|---|---|
| Classification | کلاس تصویر |
| Object Detection | کلاس + Bounding Box |
| Semantic Segmentation | کلاس هر پیکسل |
| Instance Segmentation | کلاس + Mask برای هر شیء |
| Panoptic Segmentation | Semantic + Instance |
مثلاً برای یک تصویر از یک انسان:
Classification ↓ Person Detection ↓ ┌──────────┐ │ Person │ └──────────┘ Segmentation ↓ ███████ ███████ █████ ███
مدلهای معروف Segmentation
امروزه مدلهای مختلفی برای Segmentation استفاده میشوند:
U-Net
یکی از معروفترین معماریها، مخصوصاً در تصاویر پزشکی.
ساختار کلی:
Image ↓ Encoder ↓ Features ↓ Decoder ↓ Segmentation Mask
U-Net به دلیل وجود Skip Connection میتواند جزئیات مکانی تصویر را بهتر حفظ کند.
Mask R-CNN
برای Instance Segmentation بسیار معروف است.
ساختار مفهومی:
Image ↓ Backbone ↓ Region Proposal ↓ ┌──────────────┐ ↓ ↓ ↓ Class Box Mask
DeepLab
خانوادهای از مدلهای قدرتمند برای Semantic Segmentation است که از تکنیکهایی مانند Atrous/Dilated Convolution استفاده میکند.
YOLO Segmentation
نسخههای جدید خانواده YOLO علاوه بر Detection میتوانند Mask نیز تولید کنند.
برای پروژههایی که سرعت اهمیت زیادی دارد، YOLO Segmentation گزینه جذابی است.
SAM
یکی از رویکردهای جدیدتر، Segment Anything Model (SAM) است.
ایده اصلی SAM این است که بتواند اشیای موجود در تصاویر را بر اساس ورودیهایی مانند:
- نقطه
- Bounding Box
- Mask
- Prompt
Segment کند.
مثال ساده
فرض کنید تصویر زیر را داریم:
┌─────────────────────────┐ │ SKY │ │ │ │ 🚗 🚗 │ │ │ │──────── ROAD ───────────│ │ │ └─────────────────────────┘
Semantic Segmentation میتواند خروجیای شبیه این ایجاد کند:
Sky → Class 1 Car → Class 2 Road → Class 3
اما Instance Segmentation:
Car 1 → Instance 1 Car 2 → Instance 2
را تولید میکند.
کاربردهای Segmentation
🏥 پزشکی
یکی از مهمترین کاربردها:
- تشخیص تومور
- جداسازی اندامها
- تحلیل MRI
- CT Scan
- تشخیص سلولها
- تحلیل تصاویر X-Ray
مثلاً:
MRI ↓ Segmentation Model ↓ Tumor Mask
🚗 خودروهای خودران
خودرو باید بتواند محیط اطراف خود را به نواحی مختلف تقسیم کند:
Road Sidewalk Car Person Traffic Sign Building Sky Vegetation
🛰 تصاویر ماهوارهای
برای شناسایی:
- ساختمانها
- جادهها
- زمین کشاورزی
- آب
- جنگل
- مناطق شهری
استفاده میشود.
🛒 فروشگاههای آنلاین
میتوان از Segmentation برای حذف پسزمینه محصول استفاده کرد:
Product Image ↓ Segmentation ↓ Product Mask ↓ Background Removal
معیارهای ارزیابی
برای ارزیابی مدلهای Segmentation معمولاً معیارهایی مانند IoU و Dice Score استفاده میشوند.
IoU
بهصورت ساده:
IoU = Intersection / Union
اگر Mask واقعی و Mask پیشبینیشده تقریباً روی هم قرار بگیرند، IoU به ۱ نزدیک میشود.
مثلاً:
IoU = 0.90
یعنی تطابق بسیار خوبی وجود دارد.
Dice Score
معیار رایج دیگر:
Dice = 2 × Intersection / (Prediction + Ground Truth)
این معیار بهخصوص در Medical Image Segmentation بسیار پرکاربرد است.
یک Pipeline واقعی
یک پروژه Segmentation معمولاً چنین ساختاری دارد:
Dataset │ ▼ Image + Mask │ ▼ Preprocessing │ ▼ Model Training │ ▼ Validation │ ▼ IoU / Dice │ ▼ Inference │ ▼ Segmentation Mask
برای شروع عملی، یک Stack مناسب میتواند این باشد:
Python + PyTorch + OpenCV + Albumentations + U-Net / YOLO Segmentation
اگر هدفت یادگیری عملی Segmentation با Python و ساخت یک پروژه واقعی باشد، بهترین مسیر معمولاً این است که از U-Net روی یک Dataset ساده شروع کنیم و بعد به YOLO Segmentation و SAM برسیم.