זיהוי אובייקטים של RetinaNet עם PyTorch ו- Torchvision PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

זיהוי אובייקטים של RetinaNet עם PyTorch ו-torchvision

מבוא

זיהוי אובייקטים הוא תחום גדול בראייה ממוחשבת, ואחד היישומים החשובים יותר של ראייה ממוחשבת "בטבע". מצד אחד, זה יכול לשמש לבניית מערכות אוטונומיות שמנווטות סוכנים בסביבות - בין אם זה רובוטים המבצעים משימות או מכוניות בנהיגה עצמית, אבל זה דורש הצטלבות עם תחומים אחרים. עם זאת, זיהוי חריגות (כגון מוצרים פגומים בקו), איתור אובייקטים בתוך תמונות, זיהוי פנים ויישומים שונים אחרים של זיהוי אובייקטים יכולים להתבצע מבלי לחתוך שדות אחרים.

זיהוי אובייקטים אינו סטנדרטי כמו סיווג תמונות, בעיקר בגלל שרוב הפיתוחים החדשים נעשים בדרך כלל על ידי חוקרים בודדים, מתחזקים ומפתחים, במקום ספריות ומסגרות גדולות. קשה לארוז את סקריפטי השירות הנחוצים במסגרת כמו TensorFlow או PyTorch ולשמור על הנחיות ה-API שהנחו את הפיתוח עד כה.

זה הופך את זיהוי האובייקט למורכב יותר, בדרך כלל יותר מילולי (אך לא תמיד), ופחות נגיש מסיווג תמונה. אחד היתרונות העיקריים של להיות במערכת אקולוגית הוא שהיא מספקת לך דרך לא לחפש מידע שימושי על שיטות עבודה טובות, כלים וגישות לשימוש. עם זיהוי אובייקטים - רובם צריכים לעשות הרבה יותר מחקר על הנוף של השדה כדי לקבל אחיזה טובה.

זיהוי אובייקטים עם RetinaNet של PyTorch/TorchVision

torchvision הוא פרויקט Computer Vision של PyTorch, ומטרתו להקל על הפיתוח של מודלים של CV מבוססי PyTorch, על ידי אספקת סקריפטים של טרנספורמציה והגדלה, גן חיות מודל עם משקולות, מערכי נתונים וכלי עזר מאומנים מראש שיכולים להיות שימושיים עבור מתרגל.

עוד בגרסת בטא ומאוד ניסיוני - torchvision מציע ממשק API פשוט יחסית לזיהוי אובייקטים עם כמה דגמים לבחירה:

  • R-CNN מהיר יותר
  • רשתית רשת
  • FCOS (RetinaNet קונבולוציונית מלאה)
  • SSD (עמוד השדרה VGG16... איכס)
  • 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()

השמיים 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()

זו התוצאה:

RetinaNet למעשה סיווגה את האדם שמציץ מאחורי המכונית! זה סיווג די קשה.

עיין במדריך המעשי והמעשי שלנו ללימוד Git, עם שיטות עבודה מומלצות, סטנדרטים מקובלים בתעשייה ודף רמאות כלול. תפסיק לגוגל פקודות 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()

הולך רחוק יותר - למידה עמוקה מעשית לראייה ממוחשבת

האופי הסקרן שלך גורם לך לרצות ללכת רחוק יותר? אנו ממליצים לבדוק את שלנו קורס: "למידה עמוקה מעשית עבור ראייה ממוחשבת עם Python".

זיהוי אובייקטים של RetinaNet עם PyTorch ו- Torchvision PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

עוד קורס ראיית מחשב?

לא נעשה סיווג של ספרות MNIST או אופנת MNIST. הם שירתו את תפקידם מזמן. משאבי למידה רבים מדי מתמקדים במערך נתונים בסיסיים ובארכיטקטורות בסיסיות לפני שהם מאפשרים לארכיטקטורות מתקדמות של קופסאות שחורות לשאת בנטל הביצועים.

אנחנו רוצים להתמקד דה-מיסטיפיקציה, מעשיות, הבנה, אינטואיציה ו פרויקטים אמיתיים. רוצה ללמוד אֵיך אתה יכול לעשות שינוי? ניקח אותך לסיבוב מהאופן שבו המוח שלנו מעבד תמונות לכתיבת סיווג למידה עמוקה לסרטן השד בדרגת מחקר לרשתות למידה עמוקה ש"הזויה", מלמדת אותך את העקרונות והתיאוריה באמצעות עבודה מעשית, ומציידה אותך ב ידע וכלים כדי להפוך למומחה ביישום למידה עמוקה לפתרון ראייה ממוחשבת.

מה יש בפנים?

  • העקרונות הראשונים של חזון וכיצד ניתן ללמד מחשבים "לראות"
  • משימות ויישומים שונים של ראייה ממוחשבת
  • כלי המקצוע שיקלו עליכם את העבודה
  • מציאת, יצירה וניצול של מערכי נתונים עבור ראייה ממוחשבת
  • התיאוריה והיישום של רשתות עצביות קונבולוציונליות
  • טיפול בהסטת תחום, התרחשות משותפת והטיות אחרות במערך נתונים
  • העבר למידה וניצול זמן ההדרכה ומשאבי החישוב של אחרים לטובתך
  • בנייה והדרכה של סיווג סרטן שד חדיש
  • כיצד ליישם מנה בריאה של ספקנות על רעיונות מיינסטרים ולהבין את ההשלכות של טכניקות מאומצות באופן נרחב
  • הדמיית "מרחב הקונספט" של ConvNet באמצעות t-SNE ו-PCA
  • תיאורי מקרה של האופן שבו חברות משתמשות בטכניקות ראייה ממוחשבת כדי להשיג תוצאות טובות יותר
  • הערכת מודל נכונה, הדמיית מרחב סמוי וזיהוי תשומת הלב של המודל
  • ביצוע מחקר תחום, עיבוד מערכי נתונים משלך והקמת בדיקות מודל
  • ארכיטקטורות חדשניות, התקדמות רעיונות, מה מייחד אותם וכיצד ליישם אותם
  • KerasCV – ספריית WIP ליצירת צינורות ודגמים מתקדמים
  • כיצד לנתח ולקרוא מאמרים וליישם אותם בעצמך
  • בחירת דגמים בהתאם ליישום שלך
  • יצירת צינור למידת מכונה מקצה לקצה
  • נוף ואינטואיציה על זיהוי אובייקטים עם R-CNN מהירים יותר, RetinaNets, SSDs ו-YOLO
  • מופע ופילוח סמנטי
  • זיהוי אובייקטים בזמן אמת עם YOLOv5
  • הכשרת גלאי אובייקטים של YOLOv5
  • עבודה עם רובוטריקים באמצעות KerasNLP (ספריית WIP בעלת חוזק בתעשייה)
  • שילוב רובוטריקים עם ConvNets ליצירת כיתובים של תמונות
  • חלום עמוק

סיכום

זיהוי אובייקטים הוא תחום חשוב של ראיית מחשב, ולמרבה הצער פחות נגיש ממה שהוא צריך להיות.

במדריך הקצר הזה, בדקנו כיצד torchvision, חבילת Computer Vision של PyTorch, מקלה על ביצוע זיהוי אובייקטים בתמונות, באמצעות RetinaNet.

בול זמן:

עוד מ Stackabuse