آموزش AI - ابزارهای AI - برنامه نویسی - موبایل - هوش مصنوعی - ویندوز

آموزش ساخت برنامه تشخیص شی با YOLOv8 از صفر تا صد و Train مدل اختصاصی

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

در این آموزش، ساخت یک برنامه تشخیص شی با YOLOv8 را از نصب ابزارهای لازم تا آماده سازی داده، برچسب گذاری تصاویر، Train مدل اختصاصی و اجرای تشخیص روی تصویر، ویدیو و وب کم بررسی می کنیم. در پایان نیز روش ارزیابی و خروجی گرفتن از مدل آموزش دیده را توضیح می دهیم.

تشخیص شی چیست و چه تفاوتی با دسته بندی تصویر دارد؟

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

خروجی یک مدل تشخیص شی معمولا شامل اطلاعات زیر است:

  • نام یا شناسه کلاس
  • مختصات کادر محدود کننده
  • میزان اطمینان مدل
  • تعداد اشیای شناسایی شده
  • موقعیت هر شی در تصویر

برای مثال، اگر یک تصویر شامل دو خودرو، یک موتورسیکلت و سه نفر باشد، مدل تشخیص شی باید هر کدام را به صورت جداگانه پیدا کند و برای آن ها کادر و برچسب نمایش دهد.

YOLOv8 چیست؟

YOLO مخفف عبارت You Only Look Once است. این خانواده از مدل ها تصویر را در یک مرحله پردازش می کنند و به همین دلیل برای تشخیص اشیا با سرعت بالا مناسب هستند.

YOLOv8 توسط Ultralytics ارائه شده و از وظایف مختلف بینایی ماشین پشتیبانی می کند:

  • تشخیص اشیا یا Object Detection
  • دسته بندی تصویر یا Classification
  • قطعه بندی تصویر یا Segmentation
  • تخمین وضعیت بدن یا Pose Estimation
  • تشخیص اشیای چرخیده یا Oriented Bounding Box
  • ردیابی اشیا در ویدیو

رابط پایتون Ultralytics، فرایند Train، اعتبارسنجی، پیش بینی و خروجی گرفتن از مدل را ساده می کند. برای مشاهده ساختار کلی این ابزار می توانید به مستندات رسمی Ultralytics مراجعه کنید.

نکته: اگرچه نسخه های جدیدتری از خانواده YOLO منتشر شده اند، YOLOv8 همچنان در بسیاری از پروژه های آموزشی و عملی استفاده می شود. بهتر است پیش از شروع یک پروژه تجاری، مدل های موجود را از نظر سرعت، دقت، مجوز و سازگاری با سخت افزار ارزیابی کنید.

چرا از YOLOv8 برای تشخیص اشیا استفاده کنیم؟

مهم ترین مزایای YOLOv8 عبارت اند از:

  • نصب و راه اندازی ساده
  • امکان استفاده با زبان پایتون
  • پشتیبانی از پردازنده مرکزی و کارت گرافیک
  • وجود مدل های از پیش آموزش دیده
  • امکان Train مدل روی داده اختصاصی
  • قابلیت پردازش تصویر، ویدیو و وب کم
  • امکان خروجی گرفتن با فرمت هایی مانند ONNX
  • مناسب برای ساخت نمونه اولیه و پروژه های واقعی

البته کیفیت نهایی مدل فقط به معماری YOLO وابسته نیست. کیفیت تصاویر، دقت برچسب گذاری، تنوع داده ها، انتخاب پارامترهای Train و سخت افزار نیز تاثیر مستقیمی بر نتیجه دارند.

پیش نیازهای ساخت برنامه تشخیص شی با YOLOv8

برای اجرای این آموزش به ابزارهای زیر نیاز داریم:

  • Python نسخه 3.8 یا بالاتر
  • pip برای نصب کتابخانه ها
  • یک ویرایشگر مانند VS Code یا PyCharm
  • کتابخانه Ultralytics
  • کتابخانه OpenCV
  • مجموعه تصاویر برچسب گذاری شده برای Train مدل اختصاصی
  • کارت گرافیک NVIDIA به صورت اختیاری

استفاده از کارت گرافیک برای اجرای مدل الزامی نیست، اما سرعت آموزش را به شکل محسوسی افزایش می دهد. اگر سیستم مناسبی در اختیار ندارید، می توانید از Google Colab یا سرور دارای GPU استفاده کنید.

ساخت محیط پروژه YOLOv8

ابتدا یک پوشه برای پروژه ایجاد کنید:

mkdir yolo-object-detection
cd yolo-object-detection

سپس محیط مجازی پایتون را بسازید:

python -m venv venv

فعال سازی محیط مجازی در ویندوز:

venv\Scripts\activate

فعال سازی در لینوکس و macOS:

source venv/bin/activate

اکنون کتابخانه های مورد نیاز را نصب کنید:

pip install ultralytics opencv-python

برای بررسی نصب صحیح Ultralytics می توانید دستور زیر را اجرا کنید:

yolo checks

همچنین نسخه نصب شده را از طریق پایتون بررسی کنید:

import ultralytics

print(ultralytics.__version__)

انتخاب مدل مناسب YOLOv8

مدل های تشخیص شی YOLOv8 در اندازه های مختلف ارائه شده اند:

مدل سرعت دقت نسبی مصرف منابع کاربرد پیشنهادی
YOLOv8n بسیار بالا پایه بسیار کم موبایل، وب کم و سیستم ضعیف
YOLOv8s بالا مناسب کم پروژه های سبک و نمونه اولیه
YOLOv8m متوسط بهتر متوسط پروژه های عمومی
YOLOv8l کمتر بالا زیاد سرور و پردازش دقیق تر
YOLOv8x کمترین بالاتر بسیار زیاد سیستم قدرتمند و پردازش آفلاین

حرف n در نام مدل به Nano، حرف s به Small، حرف m به Medium، حرف l به Large و حرف x به Extra Large اشاره دارد.

برای شروع، مدل yolov8n.pt انتخاب مناسبی است؛ زیرا حجم کمی دارد و سریع اجرا می شود. پس از تکمیل نمونه اولیه می توانید مدل های بزرگ تر را آزمایش کنید.

اجرای اولین تشخیص شی با مدل آماده

مدل های آماده YOLOv8 روی مجموعه داده COCO آموزش دیده اند و توانایی تشخیص کلاس های عمومی مانند انسان، خودرو، اتوبوس، گربه، سگ، دوچرخه و صندلی را دارند.

فایل زیر را با نام predict_image.py ایجاد کنید:

from ultralytics import YOLO

model = YOLO("yolov8n.pt")

results = model.predict(
    source="test.jpg",
    conf=0.4,
    save=True
)

print(results)

در اولین اجرا، فایل وزن مدل به صورت خودکار دانلود می شود. تصویر پردازش شده نیز در مسیر runs/detect/predict ذخیره خواهد شد.

پارامتر conf حداقل میزان اطمینان را تعیین می کند. اگر مقدار آن برابر 0.4 باشد، تشخیص هایی که اطمینان کمتر از 40 درصد دارند کنار گذاشته می شوند.

نمایش نتیجه تشخیص با OpenCV

اگر بخواهیم نتیجه را در یک پنجره نمایش دهیم، می توانیم از OpenCV استفاده کنیم:

import cv2
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
results = model.predict(source="test.jpg", conf=0.4)

annotated_frame = results[0].plot()

cv2.imshow("YOLOv8 Detection", annotated_frame)
cv2.waitKey(0)
cv2.destroyAllWindows()

متد plot() کادرها، نام کلاس ها و میزان اطمینان مدل را روی تصویر ترسیم می کند.

استخراج اطلاعات اشیای شناسایی شده

در بسیاری از پروژه ها فقط نمایش تصویر کافی نیست. ممکن است بخواهیم مختصات، نام کلاس و میزان اطمینان هر شی را در پایگاه داده ذخیره کنیم یا برای بخش دیگری از نرم افزار ارسال کنیم.

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
result = model("test.jpg")[0]

for box in result.boxes:
    class_id = int(box.cls[0])
    confidence = float(box.conf[0])
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    class_name = model.names[class_id]

    print({
        "class_id": class_id,
        "class_name": class_name,
        "confidence": round(confidence, 3),
        "box": [x1, y1, x2, y2]
    })

مختصات x1 و y1 گوشه بالا و سمت چپ کادر هستند. مقادیر x2 و y2 نیز گوشه پایین و سمت راست را نشان می دهند.

ساخت برنامه تشخیص شی با YOLOv8 و وب کم

برای تشخیص اشیا به صورت زنده، شماره دوربین را به عنوان ورودی مشخص می کنیم. دوربین اصلی سیستم معمولا با شماره صفر در دسترس است.

import cv2
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
camera = cv2.VideoCapture(0)

if not camera.isOpened():
    raise RuntimeError("Camera could not be opened.")

while True:
    success, frame = camera.read()

    if not success:
        break

    results = model.predict(
        source=frame,
        conf=0.4,
        verbose=False
    )

    annotated_frame = results[0].plot()
    cv2.imshow("Real-time Object Detection", annotated_frame)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

camera.release()
cv2.destroyAllWindows()

با فشردن کلید q برنامه متوقف می شود. اگر چند دوربین به سیستم متصل است، می توانید مقدار 0 را به 1 یا 2 تغییر دهید.

برای افزایش سرعت پردازش می توان اندازه تصویر ورودی را کاهش داد، مدل کوچک تری انتخاب کرد یا بعضی فریم ها را نادیده گرفت.

Train مدل اختصاصی YOLOv8 چه زمانی لازم است؟

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

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

مراحل کلی Train مدل اختصاصی عبارت اند از:

  1. تعریف کلاس ها
  2. جمع آوری تصاویر
  3. پاک سازی داده ها
  4. برچسب گذاری اشیا
  5. تقسیم داده ها
  6. ساخت فایل YAML
  7. اجرای Train
  8. ارزیابی مدل
  9. آزمایش روی داده واقعی
  10. خروجی گرفتن و استقرار مدل

جمع آوری دیتاست برای تشخیص شی

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

در زمان جمع آوری داده به موارد زیر توجه کنید:

  • تصاویر را از زاویه های مختلف تهیه کنید.
  • فاصله های متفاوت از شی را در نظر بگیرید.
  • نور روز، نور کم و سایه را پوشش دهید.
  • پس زمینه های متنوع داشته باشید.
  • نمونه های کوچک، بزرگ، ناقص و پوشیده شده را اضافه کنید.
  • تصاویر بسیار مشابه و تکراری را محدود کنید.
  • برای تمام کلاس ها تعداد مناسبی نمونه تهیه کنید.
  • تصاویر بدون شی هدف را نیز در صورت نیاز اضافه کنید.

تعداد دقیق تصاویر به پیچیدگی مسئله بستگی دارد. برای یک نمونه اولیه ساده ممکن است چند صد تصویر نتیجه اولیه ایجاد کند، اما پروژه های حساس و محیط های متنوع معمولا به داده بسیار بیشتری نیاز دارند.

برچسب گذاری تصاویر در فرمت YOLO

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

  • CVAT
  • Label Studio
  • LabelImg
  • Roboflow

هر تصویر در فرمت YOLO یک فایل متنی هم نام دارد. برای مثال:

images/train/product_001.jpg
labels/train/product_001.txt

هر خط فایل برچسب از ساختار زیر پیروی می کند:

class_id x_center y_center width height

نمونه:

0 0.512 0.430 0.280 0.360
1 0.225 0.610 0.170 0.240

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

اگر دو شی در یک تصویر وجود داشته باشد، فایل برچسب باید دو خط داشته باشد. اگر تصویر هیچ شی هدفی ندارد، فایل برچسب آن می تواند خالی باشد.

ساختار استاندارد دیتاست YOLOv8

ساختار پیشنهادی پروژه به صورت زیر است:

yolo-object-detection/
├── dataset/
│   ├── images/
│   │   ├── train/
│   │   ├── val/
│   │   └── test/
│   ├── labels/
│   │   ├── train/
│   │   ├── val/
│   │   └── test/
│   └── data.yaml
├── train.py
├── predict.py
└── requirements.txt

داده ها معمولا به سه بخش تقسیم می شوند:

  • train: داده های مورد استفاده برای یادگیری مدل
  • val: داده های مورد استفاده برای ارزیابی حین Train
  • test: داده های نهایی برای بررسی عملکرد واقعی

یک تقسیم بندی متداول می تواند 70 درصد برای Train، حدود 20 درصد برای Validation و 10 درصد برای Test باشد. این نسبت ثابت نیست و با توجه به اندازه دیتاست تغییر می کند.

تصاویر یک ویدیو یا تصاویر بسیار مشابه را به صورت تصادفی بین این بخش ها پخش نکنید. در غیر این صورت، مدل در بخش ارزیابی با نمونه هایی تقریبا مشابه داده های Train روبرو می شود و نتیجه غیرواقعی به دست می آید.

ساخت فایل data.yaml

فایل data.yaml مسیر دیتاست و نام کلاس ها را مشخص می کند:

path: dataset
train: images/train
val: images/val
test: images/test

names:
  0: helmet
  1: person
  2: vest

در این مثال سه کلاس کلاه ایمنی، انسان و جلیقه تعریف شده اند. ترتیب نام کلاس ها باید دقیقا با شناسه های موجود در فایل های برچسب مطابقت داشته باشد.

اگر مسیر نسبی برای سیستم شما درست کار نکرد، می توانید مسیر کامل دیتاست را در مقدار path قرار دهید.

Train مدل YOLOv8 با پایتون

فایل train.py را ایجاد کنید:

from ultralytics import YOLO

model = YOLO("yolov8n.pt")

results = model.train(
    data="dataset/data.yaml",
    epochs=100,
    imgsz=640,
    batch=16,
    project="runs/custom",
    name="helmet_detector",
    patience=20,
    workers=4,
    device=0
)

print(results)

در این روش آموزش از وزن های از پیش آموزش دیده شروع می شود. این رویکرد که انتقال یادگیری نام دارد، معمولا با داده و زمان کمتر به نتیجه بهتری نسبت به شروع کاملا تصادفی می رسد.

راهنمای کامل گزینه های آموزش در صفحه Train مدل در مستندات Ultralytics در دسترس است.

مفهوم پارامترهای Train

پارامترهای مهم کد بالا عبارت اند از:

  • data: مسیر فایل تنظیمات دیتاست
  • epochs: تعداد دوره های آموزش
  • imgsz: اندازه ورودی تصویر
  • batch: تعداد تصاویر پردازش شده در هر مرحله
  • project: پوشه اصلی ذخیره نتایج
  • name: نام اجرای فعلی
  • patience: توقف آموزش در صورت بهبود نیافتن نتیجه
  • workers: تعداد پردازش های بارگذاری داده
  • device: سخت افزار مورد استفاده

برای استفاده از اولین کارت گرافیک NVIDIA مقدار device=0 را قرار دهید. برای اجرای Train روی پردازنده مرکزی می توانید از مقدار زیر استفاده کنید:

device="cpu"

اگر با خطای کمبود حافظه GPU مواجه شدید، مقدار batch یا imgsz را کاهش دهید.

آموزش YOLOv8 با خط فرمان

همان فرایند را می توان بدون ساخت فایل پایتون اجرا کرد:

yolo detect train data=dataset/data.yaml model=yolov8n.pt epochs=100 imgsz=640 batch=16

استفاده از خط فرمان برای آزمایش سریع پارامترها مناسب است. در پروژه های قابل نگهداری، ذخیره تنظیمات داخل فایل پایتون یا فایل پیکربندی، تکرار آزمایش ها را ساده تر می کند.

آیا می توان YOLOv8 را از وزن تصادفی Train کرد؟

بله. اگر منظور از آموزش از صفر، استفاده نکردن از وزن های آماده باشد، باید فایل معماری مدل را بارگذاری کنید:

from ultralytics import YOLO

model = YOLO("yolov8n.yaml")

model.train(
    data="dataset/data.yaml",
    epochs=300,
    imgsz=640,
    batch=16,
    device=0
)

تفاوت اصلی این دو روش در فایل ورودی است:

YOLO("yolov8n.pt")    # انتقال یادگیری با وزن آماده
YOLO("yolov8n.yaml")  # آموزش از وزن تصادفی

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

فایل های خروجی Train مدل

پس از پایان آموزش، نتایج در پوشه اجرای مدل ذخیره می شوند. دو فایل مهم عبارت اند از:

weights/best.pt
weights/last.pt

فایل best.pt بهترین وزن ثبت شده براساس معیارهای اعتبارسنجی است. فایل last.pt وزن مدل در آخرین دوره آموزش را نگهداری می کند.

برای پیش بینی نهایی معمولا از best.pt استفاده می شود:

from ultralytics import YOLO

model = YOLO("runs/custom/helmet_detector/weights/best.pt")
model.predict(source="sample.jpg", conf=0.4, save=True)

ادامه Train متوقف شده

اگر آموزش به دلیل قطع برق، بسته شدن برنامه یا محدودیت زمانی متوقف شد، می توان آن را از آخرین وضعیت ادامه داد:

from ultralytics import YOLO

model = YOLO("runs/custom/helmet_detector/weights/last.pt")
model.train(resume=True)

برای امکان ادامه صحیح، فایل ها و تنظیمات اجرای قبلی را حذف یا جابه جا نکنید.

ارزیابی مدل آموزش دیده

صرف مشاهده چند تصویر برای تایید کیفیت مدل کافی نیست. مدل باید با داده هایی ارزیابی شود که در آموزش ندیده است.

from ultralytics import YOLO

model = YOLO("runs/custom/helmet_detector/weights/best.pt")
metrics = model.val(data="dataset/data.yaml")

print(metrics)

معیارهای مهم ارزیابی عبارت اند از:

Precision

Precision نشان می دهد چه مقدار از تشخیص های مدل واقعا صحیح بوده اند. پایین بودن Precision معمولا به معنی زیاد بودن تشخیص های اشتباه است.

Recall

Recall مشخص می کند مدل چه مقدار از اشیای واقعی را پیدا کرده است. پایین بودن Recall نشان می دهد مدل تعداد زیادی از اشیا را از دست می دهد.

mAP

معیار mAP عملکرد کلی مدل را در کلاس ها و آستانه های مختلف بررسی می کند. دو معیار mAP50 و mAP50-95 معمولا در گزارش نتایج نمایش داده می شوند.

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

آزمایش مدل اختصاصی روی ویدیو

برای اجرای مدل روی یک فایل ویدیویی می توانید از کد زیر استفاده کنید:

from ultralytics import YOLO

model = YOLO("runs/custom/helmet_detector/weights/best.pt")

model.predict(
    source="input.mp4",
    conf=0.4,
    iou=0.5,
    save=True,
    show=False
)

پارامتر iou در کنترل هم پوشانی کادرهای تشخیص داده شده موثر است. انتخاب مقدار مناسب برای conf و iou باید براساس داده Validation و نیاز پروژه انجام شود.

تشخیص فقط کلاس های مشخص

اگر مدل چند کلاس دارد، اما فقط به بعضی از آن ها نیاز دارید، شناسه کلاس ها را مشخص کنید:

results = model.predict(
    source="input.mp4",
    classes=[0, 2],
    conf=0.4,
    save=True
)

در این مثال فقط کلاس های صفر و دو پردازش می شوند. شناسه کلاس ها باید با فایل data.yaml مطابقت داشته باشد.

شمارش اشیای شناسایی شده

کد زیر تعداد اشیای هر کلاس را در یک تصویر محاسبه می کند:

from collections import Counter
from ultralytics import YOLO

model = YOLO("runs/custom/helmet_detector/weights/best.pt")
result = model("sample.jpg", conf=0.4)[0]

class_names = [
    model.names[int(class_id)]
    for class_id in result.boxes.cls.tolist()
]

counts = Counter(class_names)

for class_name, count in counts.items():
    print(f"{class_name}: {count}")

برای شمارش اشیا در ویدیو باید به مفهوم ردیابی نیز توجه کرد. شمارش ساده در هر فریم باعث می شود یک شی چندین بار شمرده شود. در چنین شرایطی باید برای هر شی یک شناسه ردیابی ایجاد شود و عبور آن از خط یا ناحیه مشخص بررسی گردد.

خروجی گرفتن از مدل برای استفاده در برنامه های دیگر

برای استفاده از مدل در محیط های مختلف می توان آن را به فرمت مناسب تبدیل کرد. برای نمونه، خروجی ONNX به صورت زیر ساخته می شود:

from ultralytics import YOLO

model = YOLO("runs/custom/helmet_detector/weights/best.pt")

model.export(
    format="onnx",
    imgsz=640,
    dynamic=True
)

فرمت های قابل استفاده با توجه به نسخه کتابخانه و محیط اجرا متفاوت هستند. برخی گزینه های رایج عبارت اند از:

  • ONNX برای اجرای بین پلتفرمی
  • TensorRT برای بهینه سازی روی کارت های NVIDIA
  • CoreML برای محصولات اپل
  • TFLite برای بعضی سناریوهای موبایل و لبه
  • OpenVINO برای سخت افزارهای سازگار اینتل

پیش از انتخاب فرمت، مقصد نهایی، سیستم عامل، نوع پردازنده، محدودیت حافظه، سرعت مورد نیاز و مجوز استفاده از مدل را بررسی کنید.

ساخت فایل requirements.txt

برای اینکه نصب وابستگی های پروژه روی سیستم دیگر ساده باشد، فایل requirements.txt را ایجاد کنید:

ultralytics
opencv-python

سپس وابستگی ها با دستور زیر نصب می شوند:

pip install -r requirements.txt

در پروژه عملی بهتر است نسخه کتابخانه ها پس از تست مشخص شود تا به روز رسانی ناگهانی، رفتار برنامه را تغییر ندهد:

pip freeze > requirements.txt

خطاهای رایج هنگام Train مدل YOLOv8

پیدا نشدن تصاویر یا برچسب ها

این مشکل معمولا به دلیل مسیر اشتباه در data.yaml یا ساختار نادرست پوشه ها رخ می دهد. مسیرها و نام پوشه های images و labels را بررسی کنید.

اشتباه بودن شناسه کلاس

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

خطای CUDA out of memory

این خطا یعنی حافظه کارت گرافیک کافی نیست. راهکارهای پیشنهادی:

  • کاهش مقدار batch
  • کاهش مقدار imgsz
  • استفاده از مدل کوچک تر
  • بستن برنامه های مصرف کننده GPU
  • اجرای Train روی سخت افزار قوی تر

تشخیص همه اشیا به عنوان یک کلاس

این مشکل ممکن است به دلیل داده نامتوازن، شباهت زیاد کلاس ها، برچسب گذاری نادرست یا کمبود نمونه رخ دهد. ابتدا ماتریس سردرگمی و نمونه های هر کلاس را بررسی کنید.

دقت بالا در Validation و عملکرد ضعیف در محیط واقعی

این وضعیت معمولا نشانه تفاوت داده های Train با محیط واقعی یا نشت داده است. تصاویر Validation باید مستقل باشند و شرایط واقعی دوربین، نور، زاویه و پس زمینه را پوشش دهند.

اجرا نشدن پنجره OpenCV

در محیط های بدون رابط گرافیکی مانند بعضی سرورها، cv2.imshow() کار نمی کند. در این شرایط نتیجه را ذخیره کنید یا از رابط وب برای نمایش خروجی استفاده کنید.

چگونه دقت مدل تشخیص شی را افزایش دهیم؟

برای بهبود نتیجه، ابتدا مشکل را از طریق خروجی های Validation و نمونه های خطادار شناسایی کنید. سپس یکی از اقدامات زیر را انجام دهید:

  • تصاویر واقعی و متنوع تری اضافه کنید.
  • برچسب های اشتباه را اصلاح کنید.
  • تعداد نمونه کلاس های کم تعداد را افزایش دهید.
  • تصاویر تار یا غیرقابل استفاده را حذف کنید.
  • اندازه ورودی را برای اشیای کوچک افزایش دهید.
  • مدل بزرگ تری را آزمایش کنید.
  • تعداد Epoch را با توجه به نمودارها تنظیم کنید.
  • آستانه اطمینان را براساس نیاز پروژه انتخاب کنید.
  • داده های سخت و مواردی که مدل اشتباه می کند به دیتاست اضافه کنید.
  • مدل را روی دستگاه و محیط نهایی آزمایش کنید.

افزایش Epoch همیشه باعث بهتر شدن مدل نمی شود. ادامه بیش از حد آموزش ممکن است مدل را به داده های Train وابسته کند و توانایی تعمیم آن را کاهش دهد.

نکات امنیتی و عملی برای استفاده تجاری

یک مدل تشخیص شی قبل از ورود به محیط عملی باید از نظر فنی و حقوقی بررسی شود. این موضوع در پروژه هایی که تصاویر افراد، محیط کار، اطلاعات مشتریان یا تجهیزات حساس را پردازش می کنند اهمیت بیشتری دارد.

موارد مهم عبارت اند از:

  • بررسی مجوز Ultralytics و وابستگی های پروژه
  • دریافت رضایت لازم برای پردازش تصاویر افراد
  • تعیین سیاست نگهداری و حذف تصاویر
  • رمزنگاری ارتباط میان دوربین، سرور و API
  • ثبت خطاها بدون ذخیره اطلاعات حساس غیرضروری
  • کنترل دسترسی به مدل و داده ها
  • بررسی خطاهای مدل در گروه ها و شرایط مختلف
  • پیش بینی رفتار سیستم در زمان قطع دوربین یا سرور
  • نظارت انسانی در کاربردهای حساس

Ultralytics مدل های مجوز متفاوتی ارائه می کند. پیش از عرضه محصول یا استفاده سازمانی، شرایط روز مجوز را در صفحه مجوز Ultralytics بررسی کنید.

کاربردهای برنامه تشخیص شی با YOLOv8

مدل اختصاصی تشخیص اشیا می تواند در پروژه های متنوعی استفاده شود:

  • تشخیص استفاده از کلاه و تجهیزات ایمنی
  • شمارش محصولات روی خط تولید
  • شناسایی نقص ظاهری کالا
  • تشخیص و شمارش خودرو
  • مدیریت فضای پارکینگ
  • تحلیل تردد افراد
  • شناسایی آفات و بیماری های گیاهی
  • کنترل موجودی فروشگاه
  • پردازش تصاویر پزشکی با نظارت متخصص
  • ساخت اپلیکیشن موبایل مبتنی بر دوربین
  • نظارت تصویری هوشمند
  • دسته بندی و کنترل بسته بندی محصولات

در پروژه های واقعی معمولا خود مدل تنها بخشی از سامانه است. بخش های دیگری مانند API، پنل مدیریت، پایگاه داده، اپلیکیشن موبایل، گزارش گیری و زیرساخت پردازش نیز باید طراحی شوند.

طراحی یک سامانه کامل تشخیص اشیا

معماری یک سامانه عملی می تواند از اجزای زیر تشکیل شود:

  1. دوربین یا منبع دریافت تصویر
  2. ماژول دریافت و کاهش نرخ فریم
  3. مدل YOLOv8 برای استنتاج
  4. ماژول ردیابی و شمارش
  5. منطق تجاری و تعریف هشدار
  6. API برای انتقال نتایج
  7. پایگاه داده
  8. پنل تحت وب یا اپلیکیشن موبایل
  9. سیستم ثبت رویداد و پایش عملکرد

برای مثال، در سامانه کنترل تجهیزات ایمنی، مدل حضور فرد، کلاه و جلیقه را تشخیص می دهد. سپس منطق برنامه ارتباط میان اشیا را بررسی می کند و در صورت نبود تجهیزات، رویداد ثبت می شود. بنابراین وجود هر کلاس در تصویر به تنهایی برای تصمیم گیری کافی نیست.

تیم طراحان نوین با توجه به حوزه فعالیت خود می تواند در طراحی بخش های مکمل چنین سامانه هایی، از جمله نرم افزار دسکتاپ، اپلیکیشن موبایل، پنل تحت وب، API و رابط کاربری پروژه نقش داشته باشد. تعریف دقیق نیاز، محدودیت سخت افزار و معیار موفقیت باید پیش از شروع توسعه انجام شود.

آیا YOLOv8 بدون کارت گرافیک اجرا می شود؟

بله. امکان اجرای مدل و حتی Train روی پردازنده مرکزی وجود دارد، اما آموزش روی CPU معمولا بسیار کندتر است. برای آزمایش اولیه می توان از مدل YOLOv8n استفاده کرد.

برای Train مدل اختصاصی به چند تصویر نیاز داریم؟

عدد ثابتی وجود ندارد. تنوع داده، تعداد کلاس ها، اندازه اشیا و پیچیدگی محیط تعیین کننده هستند. بهتر است با چند صد تصویر باکیفیت نمونه اولیه بسازید، خطاها را تحلیل کنید و سپس دیتاست را هدفمند گسترش دهید.

تفاوت YOLOv8n و YOLOv8x چیست؟

YOLOv8n کوچک تر و سریع تر است و منابع کمتری مصرف می کند. YOLOv8x ظرفیت بیشتری دارد، اما به حافظه و توان پردازشی بالاتری نیاز خواهد داشت. انتخاب مدل باید براساس توازن سرعت و دقت انجام شود.

آیا برای هر پروژه باید مدل را دوباره Train کنیم؟

اگر کلاس های مورد نیاز در مدل آماده وجود داشته باشند و دقت آن کافی باشد، نیازی به Train اختصاصی نیست. برای اشیای تخصصی یا شرایط متفاوت، آموزش یا تنظیم مدل روی دیتاست اختصاصی ضروری است.

چرا مدل روی تصاویر Train خوب و روی تصاویر جدید ضعیف عمل می کند؟

مهم ترین دلایل شامل بیش برازش، نشت داده، کمبود تنوع تصاویر و تفاوت محیط واقعی با دیتاست هستند. باید داده های مستقل و شرایط واقعی بیشتری به مجموعه اضافه کنید.

آیا می توان مدل YOLOv8 را در اندروید یا iOS اجرا کرد؟

بله، اما مدل باید به فرمت سازگار تبدیل و برای دستگاه مقصد بهینه شود. حجم مدل، حافظه دستگاه، سرعت پردازنده و مصرف باتری در این تصمیم اهمیت دارند.

آیا می توان خروجی YOLOv8 را به API متصل کرد؟

بله. می توان مدل را در یک سرویس پایتون مانند FastAPI اجرا کرد و تصویر یا ویدیو را از طریق API دریافت نمود. برای محیط عملی باید مدیریت همزمانی درخواست ها، امنیت، محدودیت حجم فایل و پایش منابع نیز در نظر گرفته شود.

بهترین مقدار Epoch برای Train چیست؟

مقدار یکسانی برای همه پروژه ها وجود ندارد. تعداد Epoch باید براساس اندازه دیتاست، روند کاهش خطا، معیارهای Validation و توقف زودهنگام انتخاب شود. بیشتر بودن تعداد Epoch لزوما به معنی مدل بهتر نیست.

جمع بندی

ساخت برنامه تشخیص شی با YOLOv8 شامل چند مرحله اصلی است: انتخاب مدل، نصب کتابخانه ها، آماده سازی و برچسب گذاری دیتاست، ساخت فایل data.yaml، اجرای Train، ارزیابی مدل و استفاده از وزن best.pt در برنامه نهایی.

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

موفقیت پروژه بیش از هر چیز به کیفیت داده، تعریف صحیح کلاس ها و ارزیابی دقیق وابسته است. پس از آماده شدن مدل نیز می توان آن را در نرم افزار دسکتاپ، اپلیکیشن موبایل، پنل تحت وب یا سامانه نظارت تصویری ادغام کرد. برای طراحی و توسعه بخش های نرم افزاری چنین پروژه هایی می توانید نیازهای فنی خود را با تیم طراحان نوین بررسی کنید.

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

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