وقتی آموزش مدل YOLO تمام میشود، تازه بخش مهم ماجرا شروع میشود. خیلی از افراد مدل را Train میکنند، فایل خروجی را میگیرند و مستقیم سراغ استفاده از مدل میروند. اما سؤال اصلی اینجاست که از کجا بفهمیم مدل واقعاً خوب آموزش دیده است؟
در این مقاله میخواهیم به زبان ساده و کاربردی یاد بگیریم بعد از Train کردن مدل YOLO، چطور خروجیها را بررسی کنیم، تفاوت best.pt و last.pt را بفهمیم، معیارهایی مثل Precision، Recall، mAP50 و mAP50-95 را تحلیل کنیم و در نهایت بفهمیم مدل برای استفاده واقعی قابل اعتماد هست یا نه.

چرا ارزیابی مدل YOLO مهم است؟
Train کردن مدل فقط یک بخش از کار است. اگر بعد از آموزش، خروجی مدل را درست بررسی نکنیم، ممکن است مدلی داشته باشیم که روی دادههای آموزشی خوب عمل میکند، اما روی عکسها و ویدیوهای واقعی نتیجه ضعیفی میدهد.
ارزیابی مدل به ما کمک میکند بفهمیم:
مدل چقدر دقیق پیشبینی میکند.
چند درصد از اشیای واقعی را پیدا میکند.
بین کدام کلاسها بیشتر اشتباه دارد.
آیا مدل Overfit شده یا نه.
کدام فایل وزن برای استفاده نهایی مناسبتر است.
پس قبل از اینکه مدل را وارد پروژه واقعی کنیم، باید خروجیهای آن را با دقت بررسی کنیم.
بعد از Train کردن YOLO چه فایلهایی ساخته میشود؟
بعد از پایان آموزش، YOLO معمولاً داخل مسیر runs/train یک پوشه جدید میسازد. داخل این پوشه چند فایل و نمودار مهم قرار دارد که هرکدام بخشی از وضعیت آموزش مدل را نشان میدهند.
مهمترین خروجیها معمولاً این موارد هستند:
best.ptlast.ptresults.pngconfusion_matrix.pngPR_curve.pngF1_curve.pngP_curve.pngR_curve.pnglabels.jpgopt.yaml
فایل best.pt معمولاً مهمترین خروجی برای استفاده نهایی است. این فایل بهترین وزن مدل را بر اساس عملکرد روی دادههای Validation ذخیره میکند.
فایل last.pt آخرین وزن مدل در پایان آموزش است. این فایل بیشتر زمانی کاربرد دارد که بخواهیم آموزش را ادامه بدهیم.
نمودارهایی مثل results.png، PR_curve.png و confusion_matrix.png هم برای تحلیل عملکرد مدل استفاده میشوند.

تفاوت best.pt و last.pt چیست؟
بعد از آموزش YOLO، معمولاً دو فایل وزن مهم ساخته میشود. این دو فایل best.pt و last.pt هستند. فایل best.pt چیست؟
فایل best.pt بهترین وزن مدل در طول فرایند آموزش است. یعنی مدلی که روی دادههای Validation بهترین عملکرد را داشته، در این فایل ذخیره شده است. در بیشتر پروژهها، اگر هدف شما استفاده نهایی از مدل باشد، باید از best.pt استفاده کنید. مثلاً برای تست مدل روی تصویر یا ویدیو بهتر است این فایل را انتخاب کنیم:
yolo predict model=best.pt source=image.jpgفایل last.pt چیست؟
فایل last.pt آخرین وزن ذخیرهشده در پایان آخرین epoch است. این فایل لزوماً بهترین مدل نیست، فقط آخرین وضعیت مدل را نگه میدارد.
این فایل بیشتر برای زمانی مناسب است که بخواهیم آموزش را ادامه بدهیم یا فرایند Train را Resume کنیم. کدام را انتخاب کنیم؟ اگر هدف شما تست، استنتاج یا استفاده نهایی از مدل است، معمولاً best.pt انتخاب بهتری است. اگر میخواهید آموزش را از آخرین نقطه ادامه بدهید، last.pt مناسبتر است.

Precision در YOLO یعنی چه؟
Precision یکی از معیارهای مهم برای بررسی دقت پیشبینیهای مدل است.Precision به ما میگوید از بین تمام چیزهایی که مدل تشخیص داده، چند مورد واقعاً درست بودهاند. فرمول Precision به این شکل است:
Precision = TP / (TP + FP)در این فرمول:
TPیعنی پیشبینی درستFPیعنی پیشبینی اشتباه
مثلاً فرض کنید مدل 100 شیء را تشخیص داده است. اگر 85 مورد درست باشند و 15 مورد اشتباه باشند، Precision مدل برابر با 0.85 خواهد بود.
Precision بالا یعنی مدل کمتر تشخیص اشتباه میدهد.
Recall در YOLO یعنی چه؟
Recall نشان میدهد مدل از بین تمام اشیای واقعی موجود در تصویر، چند مورد را پیدا کرده است. فرمول Recall به این شکل است:
Recall = TP / (TP + FN)در این فرمول:
TPیعنی شیء واقعی که مدل درست تشخیص دادهFNیعنی شیء واقعی که مدل آن را از دست داده و تشخیص نداده
مثلاً اگر در تصاویر 100 شیء واقعی وجود داشته باشد و مدل 80 مورد را پیدا کند، Recall برابر با 0.80 خواهد بود.
Recall بالا یعنی مدل اشیای واقعی کمتری را از دست میدهد.

Precision مهمتر است یا Recall؟
جواب این سؤال به نوع پروژه بستگی دارد. اگر در پروژه شما تشخیص اشتباه خیلی بد باشد، Precision مهمتر است. مثلاً اگر مدل قرار است فقط وقتی کاملاً مطمئن است هشدار بدهد، باید Precision بالا باشد. اما اگر در پروژه شما از دست دادن شیء واقعی خطرناک باشد، Recall مهمتر است. مثلاً در پروژههای امنیتی، پزشکی یا کنترل کیفیت، گاهی بهتر است مدل چیزی را از دست ندهد، حتی اگر چند هشدار اشتباه هم داشته باشد. در بیشتر پروژهها باید بین Precision و Recall تعادل خوبی ایجاد شود.
mAP در YOLO چیست؟
mAP یکی از مهمترین معیارهای ارزیابی مدلهای Object Detection است. عبارت mAP مخفف Mean Average Precision است. این معیار بهصورت کلی نشان میدهد مدل در تشخیص کلاسهای مختلف چقدر خوب عمل کرده است. برای فهمیدن mAP، اول باید مفهوم IoU را بشناسیم.
IoU چیست؟
IoU مخفف Intersection over Union است.IoU میزان همپوشانی بین جعبه واقعی و جعبه پیشبینیشده توسط مدل را اندازه میگیرد.اگر جعبهای که مدل کشیده، دقیقاً روی شیء واقعی قرار بگیرد، مقدار IoU بالا میرود. اگر جعبه مدل از محل واقعی شیء فاصله داشته باشد، مقدار IoU پایین میآید. به زبان ساده:
IoU بالا یعنی جعبه مدل دقیقتر است.
IoU پایین یعنی مدل جای شیء را خوب تشخیص نداده است.
mAP50 یعنی چه؟
mAP50 یعنی مدل با آستانه IoU برابر با 0.50 ارزیابی شده است. یعنی اگر جعبه پیشبینیشده حداقل 50 درصد با جعبه واقعی همپوشانی داشته باشد، آن پیشبینی قابل قبول در نظر گرفته میشود.mAP50 معمولاً عدد بالاتری نسبت به mAP50-95 دارد، چون سختگیری کمتری دارد. این معیار برای بررسی سریع عملکرد مدل بسیار کاربردی است.
mAP50-95 یعنی چه؟
mAP50-95 معیار سختگیرانهتری است. در این حالت، مدل فقط با آستانه 0.50 بررسی نمیشود. بلکه در چند آستانه مختلف از 0.50 تا 0.95 ارزیابی میشود. به همین دلیل mAP50-95 معمولاً عدد پایینتری دارد، اما معیار دقیقتر و حرفهایتری است. اگر بخواهیم عملکرد مدل را جدیتر بررسی کنیم، باید به mAP50-95 هم توجه کنیم.

Confusion Matrix چه چیزی را نشان میدهد؟
Confusion Matrix یا ماتریس سردرگمی نشان میدهد مدل بین کلاسها چقدر درست یا اشتباه عمل کرده است. اگر چند کلاس مختلف داشته باشیم، این ماتریس مشخص میکند مدل کدام کلاسها را درست تشخیص داده و بین کدام کلاسها اشتباه کرده است. مثلاً اگر کلاسهای ما اینها باشند:
car
person
bicycle
Confusion Matrix نشان میدهد:
چند car درست تشخیص داده شده
چند person اشتباه bicycle تشخیص داده شده
کدام کلاسها بیشتر با هم اشتباه گرفته شدهاند
در این ماتریس، مقادیر روی قطر اصلی معمولاً پیشبینیهای درست هستند. هرچه مقادیر روی قطر اصلی بیشتر باشد، مدل بهتر عمل کرده است.
مقادیر خارج از قطر اصلی نشاندهنده خطاهای مدل هستند. اگر دیدید مدل بین دو کلاس خاص زیاد اشتباه میکند، احتمالاً باید دیتاست آن بخش را بهتر کنید.

از کجا بفهمیم مدل Overfit شده است؟
Overfitting یعنی مدل روی دادههای آموزشی خیلی خوب عمل میکند، اما روی دادههای جدید و واقعی عملکرد ضعیفی دارد. این مشکل معمولاً زمانی اتفاق میافتد که مدل به جای یادگیری الگوی کلی، دادههای آموزشی را بیش از حد حفظ کرده باشد. چند نشانه رایج برای Overfitting وجود دارد:
Train Loss همچنان کاهش پیدا میکند.
Validation Loss متوقف میشود یا افزایش پیدا میکند.
اختلاف بین Train و Validation زیاد میشود.
مدل روی دادههای آموزشی عالی است، اما روی دادههای Validation ضعیف عمل میکند.
mAP روی Train خوب است، اما روی Validation پایین میماند.
اگر این نشانهها را دیدید، احتمالاً مدل Overfit شده است.
راههای کاهش Overfitting
برای کاهش Overfitting میتوانید از این روشها استفاده کنید:
دادههای بیشتری جمعآوری کنید.
کیفیت Annotation را بهتر کنید.
از Data Augmentation استفاده کنید.
تعداد epoch را منطقی انتخاب کنید.
از مدل خیلی بزرگ برای دیتاست کوچک استفاده نکنید.
دادههای Train و Validation را درست جدا کنید.
هدف این است که مدل فقط تصاویر آموزشی را حفظ نکند، بلکه بتواند روی تصاویر جدید هم خوب عمل کند.

چطور مدل YOLO را روی عکس تست کنیم؟
بعد از ارزیابی عددی، بهتر است مدل را روی عکسهای واقعی تست کنیم. برای تست مدل روی یک عکس میتوانید از دستور زیر استفاده کنید:
yolo predict model=best.pt source=image.jpgبعد از اجرا، خروجی معمولاً در پوشه runs/detect ذخیره میشود.
در خروجی باید بررسی کنید که مدل:
اشیا را درست پیدا کرده یا نه.
جعبهها را دقیق کشیده یا نه.
کلاسها را درست تشخیص داده یا نه.
تشخیص اشتباه زیاد دارد یا نه.
چطور مدل YOLO را روی ویدیو تست کنیم؟
برای تست مدل روی ویدیو میتوانید از این دستور استفاده کنید:
yolo predict model=best.pt source=video.mp4تست روی ویدیو بسیار مهم است، چون رفتار مدل را در شرایط واقعیتر نشان میدهد.
در ویدیو باید به این موارد دقت کنید:
مدل در فریمهای مختلف پایدار است یا نه.
جعبهها زیاد پرش دارند یا نه.
مدل در نور و زاویههای مختلف خوب عمل میکند یا نه.
سرعت مدل برای پروژه شما مناسب است یا نه.
چطور مدل YOLO را روی وبکم تست کنیم؟
برای تست زنده با وبکم میتوانید از دستور زیر استفاده کنید:
yolo predict model=best.pt source=0عدد 0 معمولاً به وبکم اصلی سیستم اشاره میکند. اگر چند دوربین داشته باشید، ممکن است لازم باشد عددهای دیگر مثل 1 یا 2 را امتحان کنید. تست روی وبکم برای پروژههای Real-Time بسیار کاربردی است.

چه عددهایی برای یک مدل خوب قابل قبول است؟
عدد مناسب برای هر پروژه متفاوت است. اما بهصورت تقریبی میتوان چند محدوده عمومی در نظر گرفت.
اگر Precision کمتر از 0.60 باشد، مدل معمولاً تشخیص اشتباه زیادی دارد.
اگر Recall کمتر از 0.60 باشد، مدل اشیای زیادی را از دست میدهد.
اگر mAP50 بالاتر از 0.75 باشد، معمولاً عملکرد مدل خوب در نظر گرفته میشود.
اگر mAP50-95 بالاتر از 0.50 باشد، برای بسیاری از پروژهها عدد قابل قبولی است.
اگر F1 Score بالاتر از 0.80 باشد، معمولاً مدل تعادل خوبی بین Precision و Recall دارد.
البته این اعداد قطعی نیستند. همیشه باید نوع پروژه، سختی دادهها، تعداد کلاسها و هدف نهایی را هم در نظر بگیرید.

چند اشتباه رایج در ارزیابی مدل YOLO
در زمان بررسی خروجی مدل، چند اشتباه رایج وجود دارد که باید مراقب آنها باشید.
فقط به mAP50 توجه نکنید
گاهی mAP50 عدد خوبی دارد، اما mAP50-95 پایین است. این یعنی مدل شاید اشیا را پیدا کند، اما جعبهها دقیق نیستند.
فقط روی تصاویر آموزشی تست نکنید
اگر مدل را فقط روی تصاویر Train تست کنید، احتمالاً نتیجه خیلی خوب دیده میشود. اما این نتیجه واقعی نیست.
مدل باید روی تصاویر جدید و دیدهنشده تست شود.
به کیفیت دیتاست بیتوجه نباشید
اگر Annotation اشتباه باشد، مدل هم اشتباه یاد میگیرد. خیلی وقتها مشکل از مدل نیست، بلکه از کیفیت دیتاست است.
فقط عددها را نبینید
گاهی عددهای مدل خوب هستند، اما خروجی تصویری مشکل دارد. همیشه خروجی مدل را بهصورت چشمی هم بررسی کنید.
جمعبندی
بعد از Train کردن مدل YOLO، فقط گرفتن فایل best.pt کافی نیست.
برای اینکه بفهمیم مدل واقعاً خوب آموزش دیده یا نه، باید چند بخش را با هم بررسی کنیم:
فایلهای خروجی آموزش
تفاوت
best.ptوlast.ptمقدار Precision
مقدار Recall
مقدار mAP50
مقدار mAP50-95
Confusion Matrix
احتمال Overfitting
تست مدل روی عکس، ویدیو و وبکم
در بیشتر پروژهها، برای استفاده نهایی بهتر است از best.pt استفاده کنید. اما قبل از استفاده واقعی، حتماً مدل را روی دادههای جدید و واقعی تست کنید. یک مدل خوب فقط مدلی نیست که عددهای خوبی در خروجی آموزش داشته باشد. مدل خوب مدلی است که روی دادههای واقعی هم پایدار، دقیق و قابل اعتماد عمل کند.