چطور از Segment Anything Model (SAM) استفاده کنیم؟
- دسته:اخبار علمی
- هما کاشفی
در این پست میخواهیم به قابلیتهای مدل Segment Anything (SAM) بپردازیم. این مدل کارآمد و سریع را برای سگمنت بندی تصاویر بررسی میکنیم. با بیش از یک میلیارد ماسک روی یازده میلیون تصاویر دارای مجوز و احترام به حریم خصوصی، عملکرد Zero-shot مدل SAM قابل رقابت با نتایج کاملاً نظارت شدهی قبلی یا حتی برتر از آن است. برای اطلاعات بیشتر در مورد نحوهی عملکرد SAM و معماری مدل، با ما همراه باشید.
در این پست، نحوهی استفاده از SAM برای تولید خودکار ماسکها، ایجاد ماسکهای سگمنت بندی با استفاده از bounding boxها و تبدیل دیتاستهای تشخیص اشیا به ماسکهای سگمنت بندی را خواهیم آموخت.
در حوزهی تشخیص اشیا، اشیا اغلب با bounding boxها نشان داده میشوند که به معنای رسم مستطیل دور شی هستند که شی دقیقاً داخل آن قرار گیرد. این مستطیلها، ایدهی کلی از موقعیت مکانی شی به دست میدهند اما شکل دقیق شی را مشخص نمیکنند. ممکن است بخشهایی از پس زمینه و یا سایر اشیا نیز در داخل این مستطیلها قرار گیرد و جداسازی اشیا را از محیط اطرافشان دشوار کند.
از سوی دیگر ماسکهای سگمنتبندی به معنی رسم یک طرح کلی دور شی هستند که شکل دقیق آن را مشخص میکنند. این ماسکها امکانی فراهم میآورند که درک دقیقتری از شکل، اندازه و موقعیت شی داشته باشید.
راه اندازی محیط پایتون
برای شروع، یک نوت بوک در Google Colab باز کنید و مطمئن شوید که برای پردازش سریعتر به GPU دسترسی دارید. سپس وابستگیهای موردنیاز پروژه را نصب کنید و فایلهای موردنیاز از جمله وزنهای 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 میلیون پارامتر دارد. این تفاوت در اندازه بر سرعت استنتاج نیز اثر میگذارد، بنابراین این موارد را هنگام انتخاب انکدر برای کار خود در نظر داشته باشید.
برای تولید خودکار ماسکها، از 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
برای اجرای کد زیر به تصاویر نیاز خواهید داشت.
پکیج supervision از SAM پشتیبانی میکند و حاشیه نویسی سگمنتها روی تصویر را سادهتر میکند.
این شکل تمام سگمنتهای بدست آمده را به طور جداگانه نشان میدهد.
تولید ماسکهای سگمنتبندی با Bounding box
اکنون که میدانید چطور باید برای تمام اشیای داخل تصویر، ماسک ایجاد کنید بیایید ببینیم که چطور میتوان از bounding box استفاده کرد تا SAM را برای بخش خاصی از تصویر خود به کار ببرید.
برای استخراج ماسکهای مربوط به نواحی خاصی از یک تصویر، SamPredictor را import کنید و bounding box خود را به پیش بینی کنندهی ماسک دهید. توجه داشته باشید که پیش بینی کنندهی ماسک، فرمت خروجی متفاوتی نسبت به تولید کنندهی خودکار ماسک دارد. فرمت bounding box برای مدل SAM باید به فرمت
[x_min, y_min, x_max, y_max] np.arrayباشد.
تبدیل دیتاستهای Object Detection به ماسکهای سگمنت بندی
برای تبدیل bounding boxهای موجود در دیتاست تشخیص شی به ماسکهای سگمنتبندی، دیتاست را به فرمت COCO دانلود کنید و annotationها را در حافظه لود کنید.
اگر مجموعه دادهای در این فرمت ندارید، Roboflow Universe گزینهای ایدهآل برای یافتن و دانلود آن است. حال میتوانید از مدل SAM برای تولید ماسکهای سگمنت بندی برای هر bounding box استفاده کنید.
نتیجهگیری
مدل Segment Anything یک راه حل قدرتمند و همه کاره برای سگمنتبندی اشیا در تصاویر ارائه میدهد و به شما این امکان را میدهد که دیتاستهای خود را با ماسکهای سگمنتبندی، ارتقا دهید.
SAM با سرعت پردازش سریع و حالتهای مختلف استنتاج، ابزار ارزشمندی برای کاربردهای بینایی ماشین است. برای برچسبگذرای دادههای خود با SAM میتوانید از Roboflow Annotate استفاده کنید که یک ابزار خودکار حاشیه نویسی چند ضلعی به نام smart Polygon قدرت گرفته از SAM است.
دیدگاه ها