معرفی
تشخیص اشیا میدان بزرگی در بینایی کامپیوتری و یکی از مهمترین کاربردهای بینایی کامپیوتر در طبیعت است. از یک طرف، میتوان از آن برای ساخت سیستمهای مستقلی استفاده کرد که عوامل را در محیطها هدایت میکنند – چه روباتهایی که وظایف را انجام میدهند یا ماشینهای خودران، اما این امر مستلزم تقاطع با زمینههای دیگر است. با این حال، تشخیص ناهنجاری (مانند محصولات معیوب در یک خط)، مکان یابی اشیاء در تصاویر، تشخیص چهره و کاربردهای مختلف دیگر تشخیص اشیاء را می توان بدون تلاقی سایر زمینه ها انجام داد.
تشخیص اشیا به اندازه طبقهبندی تصویر استاندارد نیست، عمدتاً به این دلیل که بیشتر پیشرفتهای جدید بهجای کتابخانهها و چارچوبهای بزرگ، معمولاً توسط محققان، نگهداریکنندگان و توسعهدهندگان منفرد انجام میشود. بستهبندی اسکریپتهای کاربردی ضروری در چارچوبی مانند TensorFlow یا PyTorch و حفظ دستورالعملهای API که تاکنون توسعه را هدایت کردهاند، دشوار است.
این امر تشخیص اشیاء را تا حدودی پیچیدهتر، معمولاً پرمخاطبتر (اما نه همیشه) و کمتر از طبقهبندی تصویر میسازد. یکی از مزایای اصلی حضور در یک اکوسیستم این است که راهی برای جستجو نکردن اطلاعات مفید در مورد شیوه های خوب، ابزارها و رویکردهای استفاده در اختیار شما قرار می دهد. با تشخیص اشیا - بیشتر آنها باید تحقیقات بیشتری را در مورد چشم انداز میدان انجام دهند تا به خوبی به آن دست پیدا کنند.
تشخیص اشیا با PyTorch/TorchVision's RetinaNet
torchvision
پروژه چشم انداز کامپیوتری PyTorch است و با ارائه اسکریپت های تبدیل و تقویت، یک باغ وحش مدل با وزن ها، مجموعه داده ها و ابزارهای از پیش آموزش دیده که می تواند برای یک پزشک مفید باشد، توسعه مدل های CV مبتنی بر PyTorch را آسان تر می کند.
در حالی که هنوز در نسخه بتا و بسیار آزمایشی - torchvision
یک API نسبتاً ساده Object Detection را با چند مدل برای انتخاب ارائه می دهد:
- R-CNN سریعتر
- رتینا نت
- FCOS (RetinaNet کاملا کانولوشنال)
- SSD (VGG16 backbone… ykes)
- SSDLite (ستون اصلی MobileNetV3)
در حالی که API به اندازه برخی دیگر از API های شخص ثالث صیقلی یا ساده نیست، نقطه شروع بسیار مناسبی برای کسانی است که هنوز امنیت بودن در اکوسیستمی را که با آن آشنا هستند ترجیح می دهند. قبل از رفتن به جلو، مطمئن شوید که PyTorch و Torchvision را نصب کرده اید:
$ pip install torch torchvision
اجازه دهید برخی از توابع ابزار، مانند read_image()
, draw_bounding_boxes()
و to_pil_image()
برای آسانتر کردن خواندن، طراحی و خروجی تصاویر، به دنبال آن وارد کردن RetinaNet و وزنهای از پیش آموزشدیده آن (MS COCO):
from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import retinanet_resnet50_fpn_v2, RetinaNet_ResNet50_FPN_V2_Weights
import matplotlib.pyplot as plt
RetinaNet از یک ستون فقرات ResNet50 و یک شبکه هرمی ویژگی (FPN) در بالای آن استفاده می کند. در حالی که نام کلاس پرمخاطب است، نشان دهنده معماری است. بیایید یک تصویر با استفاده از requests
کتابخانه و آن را به عنوان یک فایل در درایو محلی ما ذخیره کنید:
import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)
img = read_image("obj_det.jpeg")
با یک تصویر در جای خود - می توانیم مدل و وزن خود را مثال بزنیم:
weights = RetinaNet_ResNet50_FPN_V2_Weights.DEFAULT
model = retinanet_resnet50_fpn_v2(weights=weights, score_thresh=0.35)
model.eval()
preprocess = weights.transforms()
La score_thresh
آرگومان آستانه ای را تعریف می کند که در آن یک شی به عنوان یک شی از یک کلاس شناسایی می شود. به طور شهودی، آستانه اطمینان است، و اگر مدل کمتر از 35٪ مطمئن باشد که به یک کلاس تعلق دارد، ما یک شی را به یک کلاس طبقه بندی نمی کنیم.
بیایید تصویر را با استفاده از تبدیلهای وزنهایمان از قبل پردازش کنیم، یک دسته ایجاد کنیم و استنتاج را اجرا کنیم:
batch = [preprocess(img)]
prediction = model(batch)[0]
همین است، ما prediction
فرهنگ لغت دارای کلاسها و مکانهای شی استنتاج شده است! اکنون، نتایج در این شکل برای ما چندان مفید نیستند - میخواهیم برچسبها را با توجه به ابردادهها از وزنها استخراج کنیم و جعبههای مرزبندی را ترسیم کنیم، که میتوان از طریق این کار انجام داد. draw_bounding_boxes()
:
labels = [weights.meta["categories"][i] for i in prediction["labels"]]
box = draw_bounding_boxes(img, boxes=prediction["boxes"],
labels=labels,
colors="cyan",
width=2,
font_size=30,
font='Arial')
im = to_pil_image(box.detach())
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()
این نتیجه در:
رتینا نت در واقع فردی را که پشت ماشین نگاه می کند طبقه بندی کرد! این یک طبقه بندی بسیار دشوار است.
راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!
شما می توانید RetinaNet را به یک FCOS (RetinaNet کاملاً کانولوشنال) با جایگزینی تغییر دهید retinanet_resnet50_fpn_v2
با fcos_resnet50_fpn
و استفاده از FCOS_ResNet50_FPN_Weights
وزن ها:
from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import fcos_resnet50_fpn, FCOS_ResNet50_FPN_Weights
import matplotlib.pyplot as plt
import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)
img = read_image("obj_det.jpeg")
weights = FCOS_ResNet50_FPN_Weights.DEFAULT
model = fcos_resnet50_fpn(weights=weights, score_thresh=0.35)
model.eval()
preprocess = weights.transforms()
batch = [preprocess(img)]
prediction = model(batch)[0]
labels = [weights.meta["categories"][i] for i in prediction["labels"]]
box = draw_bounding_boxes(img, boxes=prediction["boxes"],
labels=labels,
colors="cyan",
width=2,
font_size=30,
font='Arial')
im = to_pil_image(box.detach())
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()
رفتن به جلو - یادگیری عمیق عملی برای بینایی کامپیوتر
طبیعت کنجکاو شما باعث می شود که بخواهید جلوتر بروید؟ توصیه می کنیم ما را بررسی کنید دوره: "یادگیری عمیق عملی برای بینایی کامپیوتر با پایتون".
یکی دیگر از دوره های بینایی کامپیوتر؟
ما طبقه بندی ارقام MNIST یا مد MNIST را انجام نخواهیم داد. آنها مدتها پیش نقش خود را انجام دادند. بسیاری از منابع یادگیری قبل از اینکه به معماریهای جعبه سیاه پیشرفته اجازه دهند بار عملکرد را به دوش بکشند، روی مجموعه دادههای پایه و معماریهای پایه تمرکز میکنند.
ما می خواهیم روی آن تمرکز کنیم ابهام زدایی, عملی بودن, درک, شهود و پروژه های واقعی. می خواهند یاد بگیرند چگونه تو می توانی تفاوت ایجاد کنی؟ ما شما را از روشی که مغزمان تصاویر را پردازش میکند تا نوشتن طبقهبندیکننده یادگیری عمیق برای سرطان سینه تا شبکههای یادگیری عمیق که «توهم میکنند»، آموزش اصول و تئوری به شما از طریق کار عملی، و تجهیز شما به دانش و ابزارهایی برای تبدیل شدن به یک متخصص در استفاده از یادگیری عمیق برای حل بینایی کامپیوتر.
داخل چیست؟
- اولین اصول بینایی و نحوه آموزش دیدن کامپیوترها
- وظایف و کاربردهای مختلف بینایی کامپیوتر
- ابزارهای تجارت که کار شما را آسان می کند
- یافتن، ایجاد و استفاده از مجموعه داده ها برای بینایی کامپیوتری
- تئوری و کاربرد شبکه های عصبی کانولوشنال
- مدیریت تغییر دامنه، همزمانی و سایر سوگیری ها در مجموعه داده ها
- آموزش را انتقال دهید و از زمان آموزشی و منابع محاسباتی دیگران به نفع خود استفاده کنید
- ساخت و آموزش پیشرفته ترین طبقه بندی سرطان سینه
- چگونه می توان دوز سالمی از شک و تردید را در ایده های جریان اصلی به کار برد و پیامدهای تکنیک های پذیرفته شده را درک کرد
- تجسم فضای مفهومی ConvNet با استفاده از t-SNE و PCA
- مطالعات موردی چگونگی استفاده شرکت ها از تکنیک های بینایی کامپیوتری برای دستیابی به نتایج بهتر
- ارزیابی صحیح مدل، تجسم فضای پنهان و شناسایی توجه مدل
- انجام تحقیقات دامنه، پردازش مجموعه داده های خود و ایجاد آزمون های مدل
- معماری های پیشرفته، پیشرفت ایده ها، آنچه آنها را منحصر به فرد می کند و نحوه اجرای آنها
- KerasCV - یک کتابخانه WIP برای ایجاد خطوط لوله و مدل های پیشرفته
- نحوه تجزیه و خواندن مقالات و پیاده سازی آنها توسط خودتان
- انتخاب مدل ها بسته به برنامه شما
- ایجاد خط لوله یادگیری ماشینی سرتاسر
- چشم انداز و شهود در تشخیص اشیا با R-CNN سریعتر، رتینا نت، SSD و YOLO
- نمونه و تقسیم بندی معنایی
- تشخیص شی در زمان واقعی با YOLOv5
- آموزش آشکارسازهای شی YOLOv5
- کار با ترانسفورماتورها با استفاده از KerasNLP (کتابخانه WIP با قدرت صنعتی)
- ادغام ترانسفورماتورها با ConvNets برای تولید شرح تصاویر
- عمیق
نتیجه
تشخیص اشیا یکی از زمینه های مهم بینایی کامپیوتری است و متاسفانه کمتر از آنچه که باید قابل دسترسی است.
در این راهنمای کوتاه، نگاهی به چگونگی آن انداخته ایم torchvision
پکیج PyTorch's Computer Vision، تشخیص اشیاء روی تصاویر را با استفاده از RetinaNet آسان تر می کند.