وظیفه MediaPipe Object Detector به شما امکان می دهد حضور و مکان چندین کلاس از اشیاء را در تصاویر یا فیلم ها تشخیص دهید. به عنوان مثال، یک آشکارساز شی می تواند سگ ها را در یک تصویر پیدا کند. این کار بر روی داده های تصویری با مدل یادگیری ماشینی (ML) عمل می کند، داده های ثابت یا یک جریان ویدیویی پیوسته را به عنوان ورودی می پذیرد و لیستی از نتایج تشخیص را خروجی می دهد. هر نتیجه شناسایی نشان دهنده یک شی است که در تصویر یا ویدیو ظاهر می شود.
شروع کنید
با دنبال کردن یکی از این راهنماهای پیاده سازی برای پلتفرمی که روی آن کار می کنید، استفاده از این کار را شروع کنید:
- اندروید - نمونه کد - راهنما
- پایتون - نمونه کد - راهنما
- وب - نمونه کد - راهنما
- iOS - مثال کد - راهنما
این راهنماهای مخصوص پلتفرم شما را از طریق اجرای اساسی این کار، از جمله یک مدل توصیه شده و نمونه کد با گزینه های پیکربندی توصیه شده، راهنمایی می کنند.
جزئیات کار
این بخش قابلیت ها، ورودی ها و خروجی های این کار را شرح می دهد.
امکانات
- پردازش تصویر ورودی - پردازش شامل چرخش تصویر، تغییر اندازه، عادی سازی و تبدیل فضای رنگی است.
- برچسب محلی نقشه - زبان مورد استفاده برای نام های نمایشی را تنظیم کنید
- آستانه امتیاز - نتایج را بر اساس نمرات پیش بینی فیلتر کنید.
- تشخیص Top-k - نتایج تشخیص عدد را فیلتر کنید.
- برچسب لیست مجاز و رد لیست - دسته های شناسایی شده را مشخص کنید.
ورودی های وظیفه | خروجی های وظیفه |
---|---|
Object Detector API ورودی یکی از انواع داده های زیر را می پذیرد:
| Object Detector API نتایج زیر را برای اشیاء شناسایی شده خروجی می دهد:
|
گزینه های پیکربندی
این کار دارای گزینه های پیکربندی زیر است:
نام گزینه | شرح | محدوده ارزش | مقدار پیش فرض |
---|---|---|---|
running_mode | حالت اجرا را برای کار تنظیم می کند. سه حالت وجود دارد: IMAGE: حالت برای ورودی های تک تصویر. VIDEO: حالت برای فریم های رمزگشایی شده یک ویدیو. LIVE_STREAM: حالت پخش زنده داده های ورودی، مانند دوربین. در این حالت، resultListener باید فراخوانی شود تا شنونده ای را برای دریافت نتایج به صورت ناهمزمان تنظیم کند. | { IMAGE, VIDEO, LIVE_STREAM } | IMAGE |
display_names | زبان برچسبها را برای استفاده برای نامهای نمایشی ارائه شده در فراداده مدل کار، در صورت وجود، تنظیم میکند. پیش فرض برای انگلیسی en است. با استفاده از TensorFlow Lite Metadata Writer API میتوانید برچسبهای محلی را به ابرداده یک مدل سفارشی اضافه کنید. | کد محلی | en |
max_results | حداکثر تعداد اختیاری نتایج تشخیص با امتیاز بالا را برای بازگشت تنظیم می کند. | هر عدد مثبت | -1 (همه نتایج برگردانده می شوند) |
score_threshold | آستانه امتیاز پیشبینی را تنظیم میکند که بر آستانه ارائهشده در فراداده مدل (در صورت وجود) لغو میشود. نتایج زیر این مقدار رد می شوند. | هر شناور | تنظیم نشده |
category_allowlist | فهرست اختیاری نامهای دستهبندی مجاز را تنظیم میکند. اگر خالی نباشد، نتایج تشخیصی که نام دسته آنها در این مجموعه نیست فیلتر میشوند. نامهای دستهبندی تکراری یا ناشناخته نادیده گرفته میشوند. این گزینه با category_denylist منحصر به فرد است و از هر دو نتیجه در یک خطا استفاده می کند. | هر رشته | تنظیم نشده |
category_denylist | فهرست اختیاری نامهای دستههایی را که مجاز نیستند را تنظیم میکند. اگر خالی نباشد، نتایج تشخیصی که نام دسته آنها در این مجموعه است، فیلتر میشوند. نامهای دستهبندی تکراری یا ناشناخته نادیده گرفته میشوند. این گزینه با category_allowlist منحصر به فرد است و از هر دو نتیجه در یک خطا استفاده می کند. | هر رشته | تنظیم نشده |
مدل ها
Object Detector API به یک مدل تشخیص شی نیاز دارد که دانلود و در فهرست پروژه شما ذخیره شود. اگر قبلاً مدلی ندارید، با مدل پیشفرض و توصیهشده شروع کنید. مدلهای دیگر ارائهشده در این بخش، بین تأخیر و دقت تعادل ایجاد میکنند.
مدل EfficientDet-Lite0 (توصیه می شود)
مدل EfficientDet-Lite0 از یک ستون فقرات EfficientNet-Lite0 با اندازه ورودی 320x320 و شبکه ویژگی BiFPN استفاده می کند. این مدل با مجموعه داده COCO آموزش داده شد، یک مجموعه داده تشخیص اشیا در مقیاس بزرگ که شامل 1.5 میلیون نمونه شی و 80 برچسب شی است. لیست کامل برچسب های پشتیبانی شده را ببینید. EfficientDet-Lite0 به صورت int8، float16 یا float32 در دسترس است. این مدل به دلیل ایجاد تعادل بین تاخیر و دقت توصیه می شود. هم دقیق است و هم برای بسیاری از موارد به اندازه کافی سبک وزن است.
نام مدل | شکل ورودی | نوع کوانتیزاسیون | نسخه ها |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 x 320 | int8 | آخرین |
EfficientDet-Lite0 (float 16) | 320 x 320 | شناور 16 | آخرین |
EfficientDet-Lite0 (float 32) | 320 x 320 | هیچکدام (float32) | آخرین |
مدل EfficientDet-Lite2
مدل EfficientDet-Lite2 از یک ستون فقرات EfficientNet-Lite2 با اندازه ورودی 448x448 و شبکه ویژگی BiFPN استفاده می کند. این مدل با مجموعه داده COCO آموزش داده شد، یک مجموعه داده تشخیص اشیا در مقیاس بزرگ که شامل 1.5 میلیون نمونه شی و 80 برچسب شی است. لیست کامل برچسب های پشتیبانی شده را ببینید. EfficientDet-Lite2 به عنوان مدل int8، float16 یا float32 در دسترس است. این مدل به طور کلی دقیق تر از EfficientDet-Lite0 است، اما همچنین کندتر و حافظه فشرده تر است. این مدل برای مواردی که دقت اولویت بیشتری نسبت به سرعت و اندازه دارد مناسب است.
نام مدل | شکل ورودی | نوع کوانتیزاسیون | نسخه ها |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 x 448 | int8 | آخرین |
EfficientDet-Lite2 (float 16) | 448 x 448 | شناور 16 | آخرین |
EfficientDet-Lite2 (float 32) | 448 x 448 | هیچکدام (float32) | آخرین |
مدل SSD MobileNetV2
مدل SSD MobileNetV2 از یک ستون فقرات MobileNetV2 با اندازه ورودی 256x256 و شبکه ویژگی SSD استفاده می کند. این مدل با مجموعه داده COCO آموزش داده شد، یک مجموعه داده تشخیص اشیا در مقیاس بزرگ که شامل 1.5 میلیون نمونه شی و 80 برچسب شی است. لیست کامل برچسب های پشتیبانی شده را ببینید. SSD MobileNetV2 به صورت مدل int8 و float 32 موجود است. این مدل سریعتر و سبکتر از EfficientDet-Lite0 است، اما به طور کلی دقت کمتری نیز دارد. این مدل برای موارد استفاده ای مناسب است که به یک مدل سریع و سبک وزن نیاز دارد که کمی دقت را قربانی می کند.
نام مدل | شکل ورودی | نوع کوانتیزاسیون | نسخه ها |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256×256 | int8 | آخرین |
SSDMobileNet-V2 (float 32) | 256×256 | هیچکدام (float32) | آخرین |
الزامات مدل و فراداده
اگر تصمیم به ساخت مدلی برای استفاده در این کار دارید، این بخش الزامات مدل های سفارشی را شرح می دهد. مدلهای سفارشی باید در قالب TensorFlow Lite باشند و باید شامل ابردادههایی باشند که پارامترهای عملیاتی مدل را توصیف میکنند.
الزامات طراحی
ورودی | شکل | شرح |
---|---|---|
تصویر ورودی | تانسور شکل Float32[1، ارتفاع، عرض، 3] | تصویر ورودی نرمال شده |
خروجی | شکل | شرح |
---|---|---|
detection_boxes | تانسور شکل Float32 [1, num_boxes, 4] | مکان جعبه هر شی شناسایی شده |
detection_classes | تانسور شکل Float32 [1، num_boxes] | شاخص های نام کلاس برای هر شی شناسایی شده. |
detection_scores | تانسور شکل float32 [1، num_boxes] | امتیازهای پیش بینی برای هر شی شناسایی شده |
num_boxes | تانسور Float32 سایز 1 | تعداد جعبه های شناسایی شده |
الزامات فراداده
پارامتر | شرح | شرح |
---|---|---|
input_norm_mean | مقدار میانگین استفاده شده در نرمال سازی تانسور ورودی. | تصویر ورودی نرمال شده |
input_norm_std | هنجار میدان مورد استفاده در نرمال سازی تانسور ورودی. | مکان جعبه هر شی شناسایی شده |
label_file_paths | مسیرهای فایل های برچسب تانسور دسته. اگر مدل هیچ فایل برچسبی ندارد، یک لیست خالی ارسال کنید. | شاخص های نام کلاس برای هر شی شناسایی شده. |
score_calibration_md | اطلاعات مربوط به عملیات کالیبراسیون امتیاز در تانسور طبقه بندی. اگر مدل از امتیاز استفاده نمی کند، این پارامتر مورد نیاز نیست تنظیم. | امتیازهای پیش بینی برای هر شی شناسایی شده |
num_boxes | تانسور Float32 سایز 1 | تعداد جعبه های شناسایی شده |
معیارهای وظیفه
در اینجا معیارهای کار برای مدل های از پیش آموزش دیده فوق آمده است. نتیجه تأخیر، متوسط تأخیر پیکسل 6 با استفاده از CPU / GPU است.
نام مدل | تاخیر CPU | تاخیر GPU |
---|---|---|
مدل EfficientDet-Lite0 float32 | 61.30 میلیثانیه | 27.83 میلیثانیه |
مدل EfficientDet-Lite0 float16 | 53.97 میلیثانیه | 27.97 میلیثانیه |
مدل EfficientDet-Lite0 int8 | 29.31 میلیثانیه | - |
مدل EfficientDet-Lite2 float32 | 197.98 میلیثانیه | 41.15 میلیثانیه |
مدل EfficientDet-Lite2 float16 | 198.77 میلیثانیه | 47.31 میلیثانیه |
مدل EfficientDet-Lite2 int8 | 70.91 میلیثانیه | - |
SSD MobileNetV2 مدل float32 | 36.30 میلیثانیه | 24.01 میلیثانیه |
SSD MobileNetV2 مدل float16 | 37.35 میلیثانیه | 28.16 میلیثانیه |