معرفی
تشخیص اشیا میدان بزرگی در بینایی کامپیوتری و یکی از مهمترین کاربردهای بینایی کامپیوتر در طبیعت است.
تشخیص اشیا به اندازه طبقهبندی تصویر استاندارد نیست، عمدتاً به این دلیل که بیشتر پیشرفتهای جدید بهجای کتابخانهها و چارچوبهای بزرگ، معمولاً توسط محققان، نگهداریکنندگان و توسعهدهندگان منفرد انجام میشود. بستهبندی اسکریپتهای کاربردی ضروری در چارچوبی مانند TensorFlow یا PyTorch و حفظ دستورالعملهای API که تاکنون توسعه را هدایت کردهاند، دشوار است.
این امر تشخیص اشیاء را تا حدودی پیچیدهتر، معمولاً پرمخاطبتر (اما نه همیشه) و کمتر از طبقهبندی تصویر میسازد.
خوشبختانه برای تودهها – Ultralytics یک API تشخیص شی ساده، بسیار قدرتمند و زیبا در اطراف YOLOv5 خود ایجاد کرده است که توسط سایر تیمهای تحقیق و توسعه به نسخههای جدیدتر مانند YOLOv7 گسترش یافته است.
در این راهنمای کوتاه، ما تشخیص اشیاء را در پایتون با پیشرفته ترین YOLOv7 انجام خواهیم داد.
YOLO Landscape و YOLOv7
یولو (شما فقط یک بار نگاه می کنید) یک متدولوژی و همچنین خانواده ای از مدل های ساخته شده برای تشخیص اشیا است. از زمان آغاز به کار در سال 2015، YOLOv1، YOLOv2 (YOLO9000) و YOLOv3 توسط نویسنده(های) یکسانی پیشنهاد شدهاند - و جامعه یادگیری عمیق با پیشرفتهای منبع باز در سالهای ادامه دار ادامه داد.
Ultralytics' YOLOv5 اولین پیاده سازی در مقیاس بزرگ YOLO در PyTorch است که آن را بیش از هر زمان دیگری در دسترس قرار داده است، اما دلیل اصلی که YOLOv5 چنین جایگاهی را به دست آورده است API بسیار ساده و قدرتمندی است که پیرامون آن ساخته شده است. این پروژه جزئیات غیر ضروری را انتزاع میکند، در حالی که امکان سفارشیسازی، عملاً همه قالبهای صادراتی قابل استفاده را فراهم میکند، و از شیوههای شگفتانگیزی استفاده میکند که کل پروژه را هم کارآمد و هم بهینه میکند.
YOLOv5 هنوز پروژه اصلی ساخت مدلهای تشخیص اشیاء است، و بسیاری از مخازن که هدفشان پیشرفت روش YOLO است، با YOLOv5 بهعنوان خط پایه شروع میکنند و یک API مشابه ارائه میدهند (یا به سادگی پروژه را فوک میکنند و در بالای آن میسازند). چنین موردی است YOLOR (شما فقط یک نمایش یاد می گیرید) و YOLOv7 که بر روی YOLOR ساخته شده است (همان نویسنده). YOLOv7 آخرین پیشرفت در متدولوژی YOLO است و مهمتر از همه، YOLOv7 سرهای مدل جدیدی را ارائه میکند که میتواند نقاط کلیدی (اسکلتها) را خروجی دهد و قطعهبندی نمونه را علاوه بر رگرسیون جعبه مرزی، که در مدلهای قبلی YOLO استاندارد نبود، انجام دهد.
این باعث میشود که قطعهبندی نمونه و تشخیص نقطه کلید سریعتر از همیشه باشد!
علاوه بر این، YOLOv7 به دلیل کاهش تعداد پارامترها و راندمان محاسباتی بالاتر، سریعتر و با درجه دقت بالاتری نسبت به مدلهای قبلی عمل میکند:
خود این مدل از طریق تغییرات معماری و همچنین بهینهسازی جنبههای آموزش ایجاد شد که به آن «bag-of-freebies» لقب گرفت، که دقت را بدون افزایش هزینه استنتاج افزایش داد.
در حال نصب YOLOv7
نصب و استفاده از YOLOv7 به بارگیری مخزن GitHub در دستگاه محلی شما و اجرای اسکریپت های بسته بندی شده با آن خلاصه می شود.
توجه داشته باشید: متأسفانه، تا زمان نگارش، YOLOv7 یک API برنامهریزی تمیز مانند YOLOv5 ارائه نمیکند، که معمولاً از torch.hub()
به نظر می رسد که این یک ویژگی است که باید کار کند اما در حال حاضر ناموفق است. با رفع مشکل، راهنما را بهروزرسانی میکنم یا راهنما جدیدی را در API برنامهریزی منتشر میکنم. در حال حاضر - ما روی اسکریپت های استنتاج ارائه شده در مخزن تمرکز خواهیم کرد.
با این وجود، میتوانید در زمان واقعی روی فیلمها، تصاویر و غیره تشخیص دهید و نتایج را به راحتی ذخیره کنید. این پروژه از همان قراردادهای YOLOv5 پیروی می کند، که دارای مستندات گسترده است، بنابراین احتمالاً اگر پاسخی برای سؤالات خاص بیشتری در مخزن YOLOv5 دارید، پیدا کنید.
بیایید مخزن را دانلود کنیم و استنباط هایی انجام دهیم:
! git clone https://github.com/WongKinYiu/yolov7.git
این یک ایجاد می کند yolov7
دایرکتوری در فهرست کاری فعلی شما که پروژه را در خود جای داده است. بیایید به آن دایرکتوری برویم و به فایل ها نگاهی بیندازیم:
%cd yolov7
!ls
/Users/macbookpro/jup/yolov7
LICENSE.md detect.py models tools
README.md export.py paper train.py
cfg figure requirements.txt train_aux.py
data hubconf.py scripts utils
deploy inference test.py runs
توجه داشته باشید: در یک نوت بوک Google Colab، باید جادو را اجرا کنید %cd
دستور در هر سلولی که می خواهید دایرکتوری خود را به آن تغییر دهید yolov7
، در حالی که سلول بعدی شما را به دایرکتوری اصلی خود باز می گرداند. در نوت بوک های محلی Jupyter، تغییر دایرکتوری یک بار شما را در آن نگه می دارد، بنابراین نیازی به صدور چندباره دستور نیست.
La detect.py
اسکریپت های استنتاجی است که تشخیص ها را اجرا می کند و نتایج را در زیر ذخیره می کند runs/detect/video_name
، جایی که می توانید مشخص کنید video_name
در حین تماس با detect.py
اسکریپت export.py
مدل را به فرمت های مختلف مانند ONNX، TFLite و غیره صادر می کند. train.py
می توان برای آموزش یک آشکارساز YOLOv7 سفارشی (موضوع راهنمای دیگری) استفاده کرد و test.py
می تواند برای آزمایش یک آشکارساز (بارگذاری شده از یک فایل وزن) استفاده شود.
چندین دایرکتوری اضافی تنظیمات را نگه می دارند (cfg
داده های نمونه (inference
، داده های مربوط به ساخت مدل ها و تنظیمات COCO (data
)، و غیره
سایزهای YOLOv7
مدلهای مبتنی بر YOLO به خوبی مقیاس میشوند و معمولاً به عنوان مدلهای کوچکتر و با دقت کمتر و مدلهای بزرگتر و دقیقتر صادر میشوند. آنها سپس به ترتیب در دستگاه های ضعیف تر یا قوی تر مستقر می شوند.
YOLOv7 چندین اندازه را ارائه می دهد و آنها را با MS COCO محک زده است:
راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!
مدل | اندازه تست | APآزمون | AP50 تست | AP75 تست | دسته ای 1 فریم در ثانیه | دسته 32 میانگین زمان |
---|---|---|---|---|---|---|
YOLOv7 | 640 | ٪۱۰۰ | ٪۱۰۰ | ٪۱۰۰ | 161 فریم در ثانیه | MS 2.8 |
YOLOv7-X | 640 | ٪۱۰۰ | ٪۱۰۰ | ٪۱۰۰ | 114 فریم در ثانیه | MS 4.3 |
YOLOv7-W6 | 1280 | ٪۱۰۰ | ٪۱۰۰ | ٪۱۰۰ | 84 فریم در ثانیه | MS 7.6 |
YOLOv7-E6 | 1280 | ٪۱۰۰ | ٪۱۰۰ | ٪۱۰۰ | 56 فریم در ثانیه | MS 12.3 |
YOLOv7-D6 | 1280 | ٪۱۰۰ | ٪۱۰۰ | ٪۱۰۰ | 44 فریم در ثانیه | MS 15.0 |
YOLOv7-E6E | 1280 | ٪۱۰۰ | ٪۱۰۰ | ٪۱۰۰ | 36 فریم در ثانیه | MS 18.7 |
بسته به سخت افزار زیرینی که انتظار دارید مدل روی آن اجرا شود و دقت مورد نیاز - می توانید بین آنها یکی را انتخاب کنید. کوچکترین مدل با سرعت بالای 160 فریم در ثانیه در تصاویر با اندازه 640، در V100! همچنین میتوانید عملکرد بیدرنگ رضایتبخشی را در پردازندههای گرافیکی رایجتر مصرفکننده نیز انتظار داشته باشید.
استنتاج ویدیویی با YOLOv7
ایجاد یک inference-data
پوشه ای برای ذخیره تصاویر و/یا ویدیوهایی که می خواهید از آنها شناسایی کنید. با فرض اینکه در همان دایرکتوری قرار دارد، میتوانیم یک اسکریپت شناسایی را با استفاده از:
! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img
این یک ویدیوی مبتنی بر Qt را بر روی دسکتاپ شما ایجاد می کند که در آن می توانید پیشرفت و استنتاج زنده را، فریم به فریم، و همچنین خروجی وضعیت را در لوله خروجی استاندارد ما مشاهده کنید:
Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU
Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]
Fusing layers...
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
Convert model to Traced-model...
traced_script_module saved!
model is traced!
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS
توجه داشته باشید که این پروژه در ماشینهای مبتنی بر CPU کند اجرا میشود (مانند 1000 میلیثانیه در هر مرحله استنتاج در خروجی بالا، اجرا بر روی مکبوک پرو 2017 مبتنی بر اینتل)، و در ماشینهای مبتنی بر GPU به طور قابلتوجهی سریعتر (نزدیک به 5 میلیثانیه بر فریم) در V100). حتی در سیستم های مبتنی بر CPU مانند این، yolov7-tiny.pt
اجرا می شود در 172ms/frame
، که اگرچه از زمان واقعی فاصله دارد، اما برای انجام این عملیات در یک CPU بسیار مناسب است.
پس از اتمام اجرا، می توانید ویدیوی حاصل را در زیر پیدا کنید runs/video_1
(نامی که ما در detect.py
تماس)، ذخیره شده به عنوان .mp4
:
استنباط در مورد تصاویر
استنتاج بر روی تصاویر به همین فرآیند خلاصه می شود - ارائه URL به یک تصویر در سیستم فایل و فراخوانی detect.py
:
! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt
توجه داشته باشید: در زمان نوشتن، خروجی برچسب ها را به اندازه تصویر تغییر نمی دهد، حتی اگر تنظیم کنید --img SIZE
. این بدان معنی است که تصاویر بزرگ دارای خطوط مرزی بسیار نازک و برچسب های کوچک خواهند بود.
نتیجه
در این راهنمای کوتاه - ما نگاهی کوتاه به YOLOv7، آخرین پیشرفت در خانواده YOLO، که بر روی YOLOR ساخته شده است، انداختهایم. ما نگاهی به نحوه نصب مخزن بر روی ماشین محلی خود و اجرای اسکریپت های استنتاج تشخیص اشیا با یک شبکه از پیش آموزش دیده روی فیلم ها و تصاویر انداخته ایم.
در راهنماهای بعدی، تشخیص نقاط کلیدی و تقسیمبندی نمونه را پوشش خواهیم داد.
رفتن به جلو - یادگیری عمیق عملی برای بینایی کامپیوتر
طبیعت کنجکاو شما باعث می شود که بخواهید جلوتر بروید؟ توصیه می کنیم ما را بررسی کنید دوره: "یادگیری عمیق عملی برای بینایی کامپیوتر با پایتون".
یکی دیگر از دوره های بینایی کامپیوتر؟
ما طبقه بندی ارقام MNIST یا مد MNIST را انجام نخواهیم داد. آنها مدتها پیش نقش خود را انجام دادند. بسیاری از منابع یادگیری قبل از اینکه به معماریهای جعبه سیاه پیشرفته اجازه دهند بار عملکرد را به دوش بکشند، روی مجموعه دادههای پایه و معماریهای پایه تمرکز میکنند.
ما می خواهیم روی آن تمرکز کنیم ابهام زدایی, عملی بودن, درک, شهود و پروژه های واقعی. می خواهند یاد بگیرند چگونه تو می توانی تفاوت ایجاد کنی؟ ما شما را از روشی که مغزمان تصاویر را پردازش میکند تا نوشتن طبقهبندیکننده یادگیری عمیق برای سرطان سینه تا شبکههای یادگیری عمیق که «توهم میکنند»، آموزش اصول و تئوری به شما از طریق کار عملی، و تجهیز شما به دانش و ابزارهایی برای تبدیل شدن به یک متخصص در استفاده از یادگیری عمیق برای حل بینایی کامپیوتر.
داخل چیست؟
- اولین اصول بینایی و نحوه آموزش دیدن کامپیوترها
- وظایف و کاربردهای مختلف بینایی کامپیوتر
- ابزارهای تجارت که کار شما را آسان می کند
- یافتن، ایجاد و استفاده از مجموعه داده ها برای بینایی کامپیوتری
- تئوری و کاربرد شبکه های عصبی کانولوشنال
- مدیریت تغییر دامنه، همزمانی و سایر سوگیری ها در مجموعه داده ها
- آموزش را انتقال دهید و از زمان آموزشی و منابع محاسباتی دیگران به نفع خود استفاده کنید
- ساخت و آموزش پیشرفته ترین طبقه بندی سرطان سینه
- چگونه می توان دوز سالمی از شک و تردید را در ایده های جریان اصلی به کار برد و پیامدهای تکنیک های پذیرفته شده را درک کرد
- تجسم فضای مفهومی ConvNet با استفاده از t-SNE و PCA
- مطالعات موردی چگونگی استفاده شرکت ها از تکنیک های بینایی کامپیوتری برای دستیابی به نتایج بهتر
- ارزیابی صحیح مدل، تجسم فضای پنهان و شناسایی توجه مدل
- انجام تحقیقات دامنه، پردازش مجموعه داده های خود و ایجاد آزمون های مدل
- معماری های پیشرفته، پیشرفت ایده ها، آنچه آنها را منحصر به فرد می کند و نحوه اجرای آنها
- KerasCV - یک کتابخانه WIP برای ایجاد خطوط لوله و مدل های پیشرفته
- نحوه تجزیه و خواندن مقالات و پیاده سازی آنها توسط خودتان
- انتخاب مدل ها بسته به برنامه شما
- ایجاد خط لوله یادگیری ماشینی سرتاسر
- چشم انداز و شهود در تشخیص اشیا با R-CNN سریعتر، رتینا نت، SSD و YOLO
- نمونه و تقسیم بندی معنایی
- تشخیص شی در زمان واقعی با YOLOv5
- آموزش آشکارسازهای شی YOLOv5
- کار با ترانسفورماتورها با استفاده از KerasNLP (کتابخانه WIP با قدرت صنعتی)
- ادغام ترانسفورماتورها با ConvNets برای تولید شرح تصاویر
- عمیق
- بهینه سازی مدل یادگیری عمیق برای بینایی کامپیوتر