معرفی
تشخیص اشیا میدان بزرگی در بینایی کامپیوتری و یکی از مهمترین کاربردهای بینایی کامپیوتر در طبیعت است.
تشخیص اشیا به اندازه طبقهبندی تصویر استاندارد نیست، عمدتاً به این دلیل که بیشتر پیشرفتهای جدید بهجای کتابخانهها و چارچوبهای بزرگ، معمولاً توسط محققان، نگهداریکنندگان و توسعهدهندگان منفرد انجام میشود. بستهبندی اسکریپتهای کاربردی ضروری در چارچوبی مانند TensorFlow یا PyTorch و حفظ دستورالعملهای API که تاکنون توسعه را هدایت کردهاند، دشوار است.
این امر تشخیص اشیاء را تا حدودی پیچیدهتر، معمولاً پرمخاطبتر (اما نه همیشه) و کمتر از طبقهبندی تصویر میسازد.
خوشبختانه برای تودهها – Ultralytics یک API تشخیص شی ساده، بسیار قدرتمند و زیبا در اطراف YOLOv5 خود ایجاد کرده است که توسط سایر تیمهای تحقیق و توسعه به نسخههای جدیدتر مانند YOLOv7 گسترش یافته است.
در این راهنمای کوتاه، ما تخمین پوس (تشخیص نقطه کلید) را در پایتون، با پیشرفته ترین YOLOv7 انجام خواهیم داد.
نقاط کلیدی میتوانند نقاط مختلفی باشند - بخشهایی از صورت، اندامهای بدن، و غیره. تخمین پوز یک مورد خاص برای تشخیص نقطه کلیدی است - که در آن نقاط بخشهایی از بدن انسان هستند و میتوانند برای جایگزینی سختافزار گران قیمت ردیابی موقعیت استفاده شوند. کنترل روباتیک هوایی را فعال کنید و عصر جدیدی از بیان خود انسان را از طریق واقعیت افزوده و واقعیت مجازی تقویت کنید.
YOLO و تخمین پوس
یولو (شما فقط یک بار نگاه می کنید) یک متدولوژی و همچنین خانواده ای از مدل های ساخته شده برای تشخیص اشیا است. از زمان آغاز به کار در سال 2015، YOLOv1، YOLOv2 (YOLO9000) و YOLOv3 توسط نویسنده(های) یکسانی پیشنهاد شدهاند - و جامعه یادگیری عمیق با پیشرفتهای منبع باز در سالهای ادامه دار ادامه داد.
Ultralytics' YOLOv5 اولین پیاده سازی در مقیاس بزرگ YOLO در PyTorch است که آن را بیش از هر زمان دیگری در دسترس قرار داده است، اما دلیل اصلی که YOLOv5 چنین جایگاهی را به دست آورده است API بسیار ساده و قدرتمندی است که پیرامون آن ساخته شده است. این پروژه جزئیات غیر ضروری را انتزاع میکند، در حالی که امکان سفارشیسازی، عملاً همه قالبهای صادراتی قابل استفاده را فراهم میکند، و از شیوههای شگفتانگیزی استفاده میکند که کل پروژه را هم کارآمد و هم بهینه میکند.
YOLOv5 هنوز پروژه اصلی ساخت مدلهای تشخیص اشیاء است، و بسیاری از مخازن که هدفشان پیشرفت روش YOLO است، با YOLOv5 بهعنوان خط پایه شروع میکنند و یک API مشابه ارائه میدهند (یا به سادگی پروژه را فوک میکنند و در بالای آن میسازند). چنین موردی است YOLOR (شما فقط یک نمایش یاد می گیرید) و YOLOv7 که بر روی YOLOR (همان نویسنده) ساخته شده است که آخرین پیشرفت در روش YOLO است.
YOLOv7 فقط یک معماری تشخیص اشیاء نیست - سرهای مدل جدیدی را ارائه می دهد که می توانند نقاط کلیدی (اسکلت ها) را خروجی و تقسیم بندی نمونه را علاوه بر رگرسیون جعبه مرزی انجام دهند، که در مدل های قبلی YOLO استاندارد نبود. این تعجب آور نیست، زیرا بسیاری از معماریهای تشخیص اشیاء به دلیل معماری عمومی مشترک، با خروجیهای متفاوت بسته به وظیفه، قبلاً برای نمونهسازی و وظایف تشخیص نقطه کلید نیز تغییر کاربری داده شدند. حتی اگر تعجب آور نیست - پشتیبانی از تقسیمبندی نمونه و تشخیص نقطه کلید احتمالاً به استاندارد جدیدی برای مدلهای مبتنی بر YOLO تبدیل میشود که از چند سال پیش عملاً عملکرد بهتری از آشکارسازهای دو مرحلهای دیگر را آغاز کردهاند.
این باعث میشود که قطعهبندی نمونه و تشخیص نقطه کلید با معماری سادهتر از آشکارسازهای دو مرحلهای، سریعتر از همیشه انجام شود.
خود این مدل از طریق تغییرات معماری و همچنین بهینهسازی جنبههای آموزش ایجاد شد که به آن «bag-of-freebies» لقب گرفت، که دقت را بدون افزایش هزینه استنتاج افزایش داد.
در حال نصب YOLOv7
بیایید پیش برویم و پروژه را از GitHub نصب کنیم:
! 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
توجه داشته باشید: نوتبوکهای Google Colab حتی پس از تماس به فهرست اصلی کار در سلول بعدی بازنشانی میشوند %cd dirname
بنابراین باید در هر سلولی که میخواهید عملیاتی در آن انجام شود، آن را فراخوانی کنید. نوتبوکهای محلی Jupyter این تغییر را به خاطر میآورند، بنابراین دیگر نیازی به فراخوانی دستور نیست.
هر زمان که کدی را با مجموعه ای از وزن ها اجرا می کنید - آنها در این دایرکتوری دانلود و ذخیره می شوند. برای انجام تخمین پوز، می خواهیم وزنه های مدل YOLOv7 از پیش آموزش دیده را برای آن کار دانلود کنیم که در زیر /releases/download/
تب در GitHub:
! curl -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6-pose.pt -o yolov7-w6-pose.pt
%cd ..
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 153M 100 153M 0 0 3742k 0 0:00:42 0:00:42 --:--:-- 4573k
/Users/macbookpro/jup
عالی است، ما آن را دانلود کردیم yolov7-w6-pose.pt
فایل وزن، که می تواند برای بارگذاری و بازسازی یک مدل آموزش دیده برای تخمین پوز استفاده شود.
در حال بارگیری مدل تخمین پوس YOLOv7
بیایید کتابخانه هایی را که برای انجام تخمین پوزی نیاز داریم وارد کنیم:
import torch
from torchvision import transforms
from utils.datasets import letterbox
from utils.general import non_max_suppression_kpt
from utils.plots import output_to_keypoint, plot_skeleton_kpts
import matplotlib.pyplot as plt
import cv2
import numpy as np
torch
و torchvision
به اندازه کافی ساده هستند - YOLOv7 با PyTorch پیاده سازی شده است. این utils.datasets
, utils.general
و utils.plots
ماژول ها از پروژه YOLOv7 می آیند و روش هایی را در اختیار ما قرار می دهند که به پیش پردازش و آماده سازی ورودی برای مدل برای اجرای استنتاج کمک می کند. از جمله آنها هستند letterbox()
برای قرار دادن تصویر، non_max_supression_keypoint()
برای اجرای الگوریتم Non-Max Supression بر روی خروجی اولیه مدل و تولید یک خروجی تمیز برای تفسیر ما، و همچنین output_to_keypoint()
و plot_skeleton_kpts()
روش هایی برای افزودن نقاط کلیدی به یک تصویر مشخص، پس از پیش بینی آنها.
ما می توانیم مدل را از فایل وزن با torch.load()
. بیایید یک تابع ایجاد کنیم تا بررسی کنیم که یک GPU در دسترس است، مدل را بارگذاری کنیم، آن را در حالت استنتاج قرار دهیم و در صورت وجود آن را به GPU منتقل کنیم:
def load_model():
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = torch.load('yolov7/yolov7-w6-pose.pt', map_location=device)['model']
model.float().eval()
if torch.cuda.is_available():
model.half().to(device)
return model
model = load_model()
راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!
با بارگذاری مدل، اجازه دهید a ایجاد کنیم run_inference()
روشی که رشته ای را می پذیرد که به فایلی در سیستم ما اشاره می کند. این روش تصویر را با استفاده از OpenCV می خواند (cv2
)، آن را با پد letterbox()
، تبدیل ها را روی آن اعمال کنید و آن را به یک دسته تبدیل کنید (مدل بر روی آن آموزش دیده است و طبق معمول انتظار دسته ها را دارد):
def run_inference(url):
image = cv2.imread(url)
image = letterbox(image, 960, stride=64, auto=True)[0]
image = transforms.ToTensor()(image)
image = image.unsqueeze(0)
output, _ = model(image)
return output, image
در اینجا، تصویر تبدیل شده را برگردانده ایم (زیرا می خواهیم نسخه اصلی را استخراج کنیم و بر روی آن رسم کنیم) و خروجی های مدل. این خروجی ها حاوی 45900 پیش بینی نقطه کلیدی هستند که اکثر آنها همپوشانی دارند. ما میخواهیم Non-Max Supression را برای این پیشبینیهای خام اعمال کنیم، درست مانند پیشبینیهای تشخیص شی (که در آن بسیاری از جعبههای مرزی پیشبینی میشوند و سپس با توجه به مقداری اطمینان و آستانه IoU، آنها «جمع میشوند»). پس از سرکوب، میتوانیم هر نقطه کلیدی را روی تصویر اصلی رسم کرده و آن را نمایش دهیم:
def visualize_output(output, image):
output = non_max_suppression_kpt(output,
0.25,
0.65,
nc=model.yaml['nc'],
nkpt=model.yaml['nkpt'],
kpt_label=True)
with torch.no_grad():
output = output_to_keypoint(output)
nimg = image[0].permute(1, 2, 0) * 255
nimg = nimg.cpu().numpy().astype(np.uint8)
nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
for idx in range(output.shape[0]):
plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)
plt.figure(figsize=(12, 12))
plt.axis('off')
plt.imshow(nimg)
plt.show()
در حال حاضر، برای برخی از تصویر ورودی، مانند karate.jpg
در دایرکتوری کاری اصلی، می توانیم استنتاج را اجرا کنیم، Non-Max Supression را انجام دهیم و نتایج را با استفاده از:
output, image = run_inference('./karate.jpg')
visualize_output(output, image)
این نتیجه در:
استنباط این تصویر نسبتاً دشوار است! بیشتر بازوی راست تمرینکننده در سمت راست پنهان است، و ما میتوانیم ببینیم که مدل استنباط میکند که پنهان است و در سمت راست بدن است، بدون اینکه آرنج خم شده باشد و بخشی از بازو در جلو باشد. . تمرین کننده در سمت چپ، که بسیار واضح تر دیده می شود، به درستی استنباط می شود، حتی با یک پای پنهان.
در واقع - شخصی که در پشت نشسته است، تقریباً به طور کامل برای دوربین نامرئی است ژست آنها به ظاهر درست تخمین زده شده است، فقط بر اساس موقعیت باسن در هنگام نشستن. کار بزرگ از طرف شبکه!
نتیجه
در این راهنما - نگاهی کوتاه به YOLOv7 انداختهایم، آخرین پیشرفت در خانواده YOLO، که بر روی YOLOR ساخته شده است و قابلیتهای تقسیمبندی نمونه و تشخیص نقطه کلید را فراتر از قابلیتهای استاندارد تشخیص اشیا در اکثر مدلهای مبتنی بر YOLO ارائه میکند. .
سپس نگاهی انداختیم به اینکه چگونه میتوانیم فایلهای وزن منتشر شده را دانلود کنیم، آنها را بارگذاری کنیم تا یک مدل بسازیم و استنتاج تخمین پوز را برای انسان انجام دهیم، که نتایج قابل توجهی به دست آورد.
رفتن به جلو - یادگیری عمیق عملی برای بینایی کامپیوتر
طبیعت کنجکاو شما باعث می شود که بخواهید جلوتر بروید؟ توصیه می کنیم ما را بررسی کنید دوره: "یادگیری عمیق عملی برای بینایی کامپیوتر با پایتون".
یکی دیگر از دوره های بینایی کامپیوتر؟
ما طبقه بندی ارقام MNIST یا مد MNIST را انجام نخواهیم داد. آنها مدتها پیش نقش خود را انجام دادند. بسیاری از منابع یادگیری قبل از اینکه به معماریهای جعبه سیاه پیشرفته اجازه دهند بار عملکرد را به دوش بکشند، روی مجموعه دادههای پایه و معماریهای پایه تمرکز میکنند.
ما می خواهیم روی آن تمرکز کنیم ابهام زدایی, عملی بودن, درک, شهود و پروژه های واقعی. می خواهند یاد بگیرند چگونه تو می توانی تفاوت ایجاد کنی؟ ما شما را از روشی که مغزمان تصاویر را پردازش میکند تا نوشتن طبقهبندیکننده یادگیری عمیق برای سرطان سینه تا شبکههای یادگیری عمیق که «توهم میکنند»، آموزش اصول و تئوری به شما از طریق کار عملی، و تجهیز شما به دانش و ابزارهایی برای تبدیل شدن به یک متخصص در استفاده از یادگیری عمیق برای حل بینایی کامپیوتر.
داخل چیست؟
- اولین اصول بینایی و نحوه آموزش دیدن کامپیوترها
- وظایف و کاربردهای مختلف بینایی کامپیوتر
- ابزارهای تجارت که کار شما را آسان می کند
- یافتن، ایجاد و استفاده از مجموعه داده ها برای بینایی کامپیوتری
- تئوری و کاربرد شبکه های عصبی کانولوشنال
- مدیریت تغییر دامنه، همزمانی و سایر سوگیری ها در مجموعه داده ها
- آموزش را انتقال دهید و از زمان آموزشی و منابع محاسباتی دیگران به نفع خود استفاده کنید
- ساخت و آموزش پیشرفته ترین طبقه بندی سرطان سینه
- چگونه می توان دوز سالمی از شک و تردید را در ایده های جریان اصلی به کار برد و پیامدهای تکنیک های پذیرفته شده را درک کرد
- تجسم فضای مفهومی ConvNet با استفاده از t-SNE و PCA
- مطالعات موردی چگونگی استفاده شرکت ها از تکنیک های بینایی کامپیوتری برای دستیابی به نتایج بهتر
- ارزیابی صحیح مدل، تجسم فضای پنهان و شناسایی توجه مدل
- انجام تحقیقات دامنه، پردازش مجموعه داده های خود و ایجاد آزمون های مدل
- معماری های پیشرفته، پیشرفت ایده ها، آنچه آنها را منحصر به فرد می کند و نحوه اجرای آنها
- KerasCV - یک کتابخانه WIP برای ایجاد خطوط لوله و مدل های پیشرفته
- نحوه تجزیه و خواندن مقالات و پیاده سازی آنها توسط خودتان
- انتخاب مدل ها بسته به برنامه شما
- ایجاد خط لوله یادگیری ماشینی سرتاسر
- چشم انداز و شهود در تشخیص اشیا با R-CNN سریعتر، رتینا نت، SSD و YOLO
- نمونه و تقسیم بندی معنایی
- تشخیص شی در زمان واقعی با YOLOv5
- آموزش آشکارسازهای شی YOLOv5
- کار با ترانسفورماتورها با استفاده از KerasNLP (کتابخانه WIP با قدرت صنعتی)
- ادغام ترانسفورماتورها با ConvNets برای تولید شرح تصاویر
- عمیق
- بهینه سازی مدل یادگیری عمیق برای بینایی کامپیوتر
- بلاکچین
- ++C
- رمز
- coingenius
- چشم انداز کامپیوتر
- یادگیری عمیق
- جاوه
- تشخیص نقطه کلیدی
- فراگیری ماشین
- رمز غیر قابل شستشو
- باز می شود در
- پی اچ پی
- افلاطون
- افلاطون آی
- هوش داده افلاطون
- بازی افلاطون
- پلاتوبلاک چین
- PlatoData
- بازی پلاتو
- چند ضلعی
- تخمین پوس
- پــایتــون
- مارماهی
- واکنش نشان می دهند
- قرارداد هوشمند
- سولانا
- Stackabuse
- چشم انداز مشعل
- وایپر
- Web3
- یولو
- زفیرنت