تشخیص شیء معمولاً علاوه بر نوع شیء، محل آن را هم در تصویر مشخص میکند؛ طبقهبندی کل تصویر لزوماً چنین خروجیای ندارد. یکی از معیارهای هندسی مقایسهٔ دو کادر، IoU است: مساحت اشتراک تقسیم بر مساحت اجتماع. این عدد، درستی نام شیء یا کاملبودن فهرست اشیای پیداشده را بهتنهایی ثابت نمیکند.
دو کادر و یک جواب قابل کنترل
مختصات را به صورت «x چپ، y بالا، x راست، y پایین» مینویسیم. کادر اول از (۰،۰) تا (۴،۴) و کادر دوم از (۲،۲) تا (۶،۶) است. مساحت هرکدام ۱۶ واحد مربع است؛ ناحیهٔ مشترک، مربعی ۲×۲ و مساحتش ۴ میشود. اجتماع برابر ۱۶+۱۶−۴، یعنی ۲۸ است؛ پس IoU برابر ۱÷۷ یا حدود ۰٫۱۴۲۸۵۷ خواهد بود.
| دو کادر | اشتراک | اجتماع | IoU |
|---|---|---|---|
| دو مربع مثال | ۴ | ۲۸ | حدود ۰٫۱۴۳ |
| یک کادر و خودش | ۱۶ | ۱۶ | ۱ |
| دو کادر جدا | ۰ | جمع دو مساحت | ۰ |
کد هندسه؛ بدون مدل یا تصویر شخصی
import math
def area(box):
if len(box)!=4 or not all(math.isfinite(x) for x in box):
raise ValueError('four finite xyxy coordinates required')
x1,y1,x2,y2 = box
if x2<=x1 or y2<=y1:
raise ValueError('positive width and height required')
return (x2-x1)*(y2-y1)
def iou(a,b):
aa,bb = area(a),area(b)
width=max(0,min(a[2],b[2])-max(a[0],b[0]))
height=max(0,min(a[3],b[3])-max(a[1],b[1]))
intersection=width*height
return intersection/(aa+bb-intersection)
a,b = [0,0,4,4],[2,2,6,6]
print('iou',iou(a,b))
assert abs(iou(a,b)-1/7)<1e-12
assert iou(a,a)==1
assert iou(a,[5,5,6,6])==0
assert iou(a,[4,0,8,4])==0
کد از مختصات پیوسته استفاده میکند و به طول ضلع عدد ۱ اضافه نمیکند. اگر دادهٔ شما اندیس پیکسل با قرارداد شامل دو سر باشد، باید ابتدا قرارداد را مشخص کنید. جابهجایی xyxy با xywh نیز کادر دیگری میسازد؛ پیش از حسابکردن، یک نمونه را روی تصویر مجاز رسم و کنترل کنید.
چرا کادر وارونه را اصلاح خودکار نمیکنیم؟
اگر مختصات راست از چپ کوچکتر باشد، تابع خطا میدهد. مرتبکردن بیصدای مختصات میتواند اشکال خروجی تولیدکننده را پنهان کند. در این تمرین عرض و ارتفاع باید مثبت باشند؛ رفتار کادر با مساحت صفر، انتخابی صریح و خارج از دامنهٔ تابع است. مختصات نامتناهی هم ورودی معتبر نیستند.
برای تصویر بریده یا کوچکشده، همهٔ کادرها باید به دستگاه مختصات مشترک برگردند. کادری روی عکس اصلی را با کادری روی نسخهٔ نصفاندازه مستقیم نسنجید. همچنین خروجی را به چند رقم اعشار فقط برای نمایش گرد کنید؛ محاسبه و آستانهٔ تصمیم را روی مقدار اصلی نگه دارید.
IoU بالا چه چیزهایی را نمیگوید؟
کادر «صندلی» ممکن است جای یک «میز» را خوب پوشانده باشد؛ همپوشانی بالا خطای برچسب را رفع نمیکند. اگر سه شیء وجود داشته و فقط یکی پیدا شده باشد، IoU همان یک جفت، کاملبودن خروجی را نشان نمیدهد. برای چند کادر، قاعدهٔ تطبیق پیشبینی با مرجع، کلاس، امتیاز اطمینان و آستانه باید جدا ثبت شوند. از این مثال، mAP یا دقت یک مدل واقعی به دست نمیآید.
دیدن تصویر و پاسخ درست موضوعی گستردهتر از هندسهٔ کادر است. در کاربرد سند نیز انتخاب مسیر فایل تصویری را پیش از اجرای مدل روشن کنید. این راهنما معرفی سامانهٔ تشخیص شیء اپرا نیست؛ برای نیازهای پاسخگویی، گفتار یا تحلیل تماس، مسیرهای واقعی خدمات را ببینید.
فایل تمرین و منابع
دریافت کد مستقل این راهنما. دادهها ساختگی و آموزشیاند؛ کد اتصال شبکه، فایل شخصی یا فراخوانی سرویس ندارد.
تاریخ مطالعهٔ منبع: ۳ نوامبر ۲۰۲۶. محاسبهها و مثال این مطلب برای آموزش طراحی شدهاند.