چطور از Segment Anything Model (SAM) استفاده کنیم؟


در این پست می‌خواهیم به قابلیت‌های مدل Segment Anything (SAM) بپردازیم. این مدل کارآمد و سریع را برای سگمنت بندی تصاویر بررسی می‌کنیم. با بیش از یک میلیارد ماسک روی یازده میلیون تصاویر دارای مجوز و احترام به حریم خصوصی، عملکرد Zero-shot مدل SAM قابل رقابت با نتایج کاملاً نظارت شده‌ی قبلی یا حتی برتر از آن است. برای اطلاعات بیشتر در مورد نحوه‌ی عملکرد SAM و معماری مدل، با ما همراه باشید.

در این پست، نحوه‌ی استفاده از SAM برای تولید خودکار ماسک‌ها، ایجاد ماسک‌های سگمنت بندی با استفاده از bounding boxها و تبدیل دیتاست‌های تشخیص اشیا به ماسک‌های سگمنت بندی را خواهیم آموخت.

در حوزه‌ی تشخیص اشیا، اشیا اغلب با bounding boxها نشان داده می‎شوند که به معنای رسم مستطیل دور شی هستند که شی دقیقاً داخل آن قرار گیرد. این مستطیل‌ها، ایده‌ی کلی از موقعیت مکانی شی به دست می‌دهند اما شکل دقیق شی را مشخص نمی‌کنند. ممکن است بخش‌هایی از پس زمینه و یا سایر اشیا نیز در داخل این مستطیل‌ها قرار گیرد و جداسازی اشیا را از محیط اطرافشان دشوار کند.

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

 

 Bounding_Box_SAM

این شکل تفاوت بین تشخیص با bounding box (سمت چپ) و سگمنت بندی (سمت راست) را نشان می‌دهد. توجه کنید که بخش زیادی از bounding box به تشخیص شی مورد نظر ارتباطی ندارد.

 

راه اندازی محیط پایتون

برای شروع، یک نوت بوک در Google Colab باز کنید و مطمئن شوید که برای پردازش سریعتر به GPU دسترسی دارید. سپس وابستگی‌های موردنیاز پروژه را نصب کنید و فایل‌های موردنیاز از جمله وزن‌های SAM را دانلود کنید.

python-SAM

لود کردن مدل Segment Anything

پس از راه اندازی مدل، مدل SAM را در حافظه بارگذاری کنید. چندین وضعیت مختلف وجود دارد، شما می‌توانید به شیوه‌های مختلف از مدل برای تولید ماسک استفاده کنید. ما می‌خواهیم تولید خودکار ماسک، تولید ماسک سگمنت‌بندی با bounding box و تبدیل دیتاست‌های تشخیص اشیا به ماسک‌های سگمنت‌بندی را بررسی کنیم.

مدل SAM را می‌توان با 3 انکدر مختلف بارگذاری کرد: ViT-B, ViT-L, ViT-H. رمزگذار ViT-H به طور قابل توجهی نسبت به ViT-B بهبود یافته است اما تنها بهبود‌های حاشیه‌ای نسبت به ViT-L دارد. این انکدرها تعداد پارامترهای مختلفی دارند؛ انکدر ViT-B تعداد 91 میلیون پارامتر دارد و ViT-L به تعداد 308 میلیون پارامتر دارد و ViT-H به تعداد 636 میلیون پارامتر دارد. این تفاوت در اندازه بر سرعت استنتاج نیز اثر می‌گذارد، بنابراین این موارد را هنگام انتخاب انکدر برای کار خود در نظر داشته باشید.

pytorch-SAM

برای تولید خودکار ماسک‌ها، از SamAutomaticMaskGenerator استفاده کنید. این ابزار، لیستی از کلمات دارد که سگمنت‌بندی‌های مختلف را مشخص می‌کند. فرمت آن به صورت زیر است:

Segmentation-[np.ndarray]: ماسک با شکل (W,H) و نوع bool که در آن W,H عرض و ارتفاع تصویر اصلی هستند.

Area-[int]: مساحت ماسک بر حسب پیکسل

Bbox-[list[int]]: تشخیص bounding box در فرمت xywh

Predicted_iou-[float]: پیش بینی خود مدل برای کیفیت ماسک‌ها

Point_coords-[list[list[float]]]-نقطه ورودی نمونه برداری شده که این ماسک را تولید کرده است.

Stability_score-[float]: معیاری دیگر برای کیفیت ماسک

Crop_box-lost[int]: برش تصویر مورد استفاده برای تولید این ماسک در قالب xywh

برای اجرای کد زیر به تصاویر نیاز خواهید داشت.

Automatic mask generator by SAM

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

SAM supervision

segmented image by SAM

این شکل تصویر اصلی (سمت چپ) و تصویر سگمنت شده (سمت راست) را نشان می‌‌دهد

این شکل تمام سگمنت‌های بدست آمده را به طور جداگانه نشان می‌دهد.

all segments produced by SAM

تولید ماسک‌های سگمنت‌بندی با Bounding box

اکنون که می‌دانید چطور باید برای تمام اشیای داخل تصویر، ماسک ایجاد کنید بیایید ببینیم که چطور می‌توان از bounding box استفاده کرد تا SAM را برای بخش خاصی از تصویر خود به کار ببرید.

برای استخراج ماسک‌های مربوط به نواحی خاصی از یک تصویر، SamPredictor را import کنید و bounding box خود را به پیش بینی کننده‌ی ماسک دهید. توجه داشته باشید که پیش بینی کننده‌ی ماسک، فرمت خروجی متفاوتی نسبت به تولید کننده‌ی خودکار ماسک دارد. فرمت bounding box برای مدل SAM باید به فرمت

[x_min, y_min, x_max, y_max] np.array

باشد.

SAM predictor

segmentation mask by SAM

این شکل، تصویر اصلی با bounding box (سمت چپ) و تصویر سگمنت شده (سمت راست) را نشان می‍‌دهد.

 

تبدیل دیتاست‌های Object Detection به ماسک‌های سگمنت بندی

برای تبدیل bounding boxهای موجود در دیتاست تشخیص شی به ماسک‌های سگمنت‌بندی، دیتاست را به فرمت COCO دانلود کنید و annotationها را در حافظه لود کنید.

اگر مجموعه داده‌ای در این فرمت ندارید، Roboflow Universe گزینه‌ای ایده‌آل برای یافتن و دانلود آن است. حال می‌توانید از مدل SAM برای تولید ماسک‌های سگمنت بندی برای هر bounding box استفاده کنید.

convert object detection dataset to segmentation mask

نتیجه‌گیری

مدل Segment Anything یک راه حل قدرتمند و همه کاره برای سگمنت‌بندی اشیا در تصاویر ارائه می‌دهد و به شما این امکان را می‌دهد که دیتاست‌های خود را با ماسک‌های سگمنت‌بندی، ارتقا دهید.

SAM با سرعت پردازش سریع و حالت‌های مختلف استنتاج، ابزار ارزشمندی برای کاربردهای بینایی ماشین است. برای برچسب‌گذرای داده‌های خود با SAM می‌توانید از Roboflow Annotate استفاده کنید که یک ابزار خودکار حاشیه نویسی چند ضلعی به نام smart Polygon قدرت گرفته از SAM است.


دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

code