از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
تشخیص شی و تقسیمبندی نمونه در پایتون با Detectron2
معرفی
تشخیص اشیا میدان بزرگی در بینایی کامپیوتری است و یکی از مهمترین کاربردهای بینایی کامپیوتر در طبیعت است. از یک طرف، میتوان از آن برای ساخت سیستمهای مستقلی استفاده کرد که عوامل را در محیطها هدایت میکنند – چه روباتهایی که وظایف را انجام میدهند یا ماشینهای خودران، اما این نیاز به تقاطع با زمینههای دیگر دارد. با این حال، تشخیص ناهنجاری (مانند محصولات معیوب روی یک خط)، مکان یابی اشیاء درون تصاویر، تشخیص چهره و کاربردهای مختلف دیگر تشخیص اشیا را می توان بدون تلاقی فیلدهای دیگر انجام داد.
تشخیص اشیا به اندازه طبقهبندی تصویر استاندارد نیست، عمدتاً به این دلیل که بیشتر پیشرفتهای جدید بهجای کتابخانهها و چارچوبهای بزرگ، معمولاً توسط محققان، نگهداریکنندگان و توسعهدهندگان منفرد انجام میشود. بستهبندی اسکریپتهای کاربردی ضروری در چارچوبی مانند TensorFlow یا PyTorch و حفظ دستورالعملهای API که تاکنون توسعه را هدایت کردهاند، دشوار است.
این امر تشخیص اشیاء را تا حدودی پیچیدهتر، معمولاً پرمخاطبتر (اما نه همیشه) و کمتر از طبقهبندی تصویر میسازد. یکی از مهمترین مزایای حضور در یک اکوسیستم این است که راهی برای جستجو نکردن اطلاعات مفید در اختیار شما قرار می دهد. روی شیوه ها، ابزارها و رویکردهای خوب برای استفاده. با تشخیص شی – بیشتر آنها باید تحقیقات بیشتری انجام دهند روی چشم انداز میدان را به خوبی در دست بگیرید.
در این راهنمای کوتاه، ما با استفاده از Mask R-CNN، در پایتون، با پلتفرم Detectron2، که در PyTorch نوشته شده است، Object Detection و Instance Segmentation را انجام خواهیم داد.
دتکترون 2 Meta AI (قبلاً FAIR – تحقیقات هوش مصنوعی فیس بوک) بسته منبع باز تشخیص، تقسیم بندی و تخمین ژست اشیاء است – همه در یک. با توجه به یک تصویر ورودی، میتواند برچسبها، جعبههای مرزی، امتیازات اطمینان، ماسکها و اسکلتهای اشیاء را برگرداند. این به خوبی نشان داده شده است روی مخزن page:
قرار است از آن به عنوان کتابخانه استفاده شود روی در بالای آن می توانید پروژه های تحقیقاتی بسازید. الف را ارائه می دهد باغ وحش مدل با تکیه اکثر پیاده سازی ها روی R-CNN و R-CNN ها را به طور کلی در کنار RetinaNet بپوشانید. آنها نیز نسبتا مناسب و معقول هستند مستندات. بیایید یک اسکریپت استنتاج نمونه اجرا کنیم!
ابتدا بیایید وابستگی ها را نصب کنیم:
$ pip install pyyaml==5.1
$ pip install 'git+https://github.com/facebookresearch/detectron2.git'
بعد، ما import ابزارهای Detectron2 – اینجا جایی است که دانش چارچوب-دامنه وارد عمل می شود. شما می توانید یک آشکارساز با استفاده از DefaultPredictor
کلاس، با ارسال یک شیء پیکربندی که آن را تنظیم می کند. این Visualizer
برای تجسم نتایج پشتیبانی می کند. MetadataCatalog
و DatasetCatalog
متعلق به API داده Detectron2 و اطلاعات ارائه شده است روی مجموعه داده های داخلی و همچنین ابرداده های آنها.
اجازه دهید import کلاس ها و توابعی که استفاده خواهیم کرد:
import torch, detectron2
from detectron2.utils.logger import setup_logger
setup_logger()
from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog, DatasetCatalog
استفاده کردن requests
، یک تصویر را دانلود کرده و در درایو محلی خود ذخیره می کنیم:
import matplotlib.pyplot as plt
import requests
response = requests.get('http://images.cocodataset.org/val2017/000000439715.jpg')
open("input.jpg", "wb").write(response.content)
im = cv2.imread("./input.jpg")
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))
این نتیجه در:
اکنون، پیکربندی را بارگذاری می کنیم، در صورت نیاز تغییراتی را اعمال می کنیم (مدل ها اجرا می شوند روی GPU به طور پیش فرض، بنابراین اگر GPU ندارید، می خواهید دستگاه را روی آن تنظیم کنید "cpu"
در تنظیمات):
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
در اینجا، ما مشخص می کنیم که کدام مدل را می خواهیم اجرا کنیم model_zoo
. ما یک مدل تقسیمبندی نمونه را بر اساس وارد کردهایم روی معماری Mask R-CNN و با ستون فقرات ResNet50. بسته به روی آنچه را که میخواهید به دست آورید (تشخیص نقطه کلید، تقسیمبندی نمونه، تقسیمبندی پانوپتیک یا تشخیص شی)، در مدل مناسب بارگیری میکنید.
در نهایت، ما می توانیم با این یک پیش بینی بسازیم cfg
و آن را اجرا کنید روی ورودی ها! این Visualizer
کلاس برای ترسیم پیش بینی استفاده می شود روی تصویر (در این مورد، نمونههای تقسیمبندی شده، کلاسها و کادرهای محدود:
predictor = DefaultPredictor(cfg)
outputs = predictor(im)
v = Visualizer(im(:, :, ::-1), MetadataCatalog.get(cfg.DATASETS.TRAIN(0)), scale=1.2)
out = v.draw_instance_predictions(outputs("instances").to("cpu"))
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(out.get_image()(:, :, ::-1))
در نهایت، این نتیجه می شود:
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-04 03:20:03