Ανίχνευση αντικειμένων RetinaNet με PyTorch και torchvision PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

RetinaNet Object Detection με PyTorch και torchvision

Εισαγωγή

Η ανίχνευση αντικειμένων είναι ένα μεγάλο πεδίο στην όραση υπολογιστή και μια από τις πιο σημαντικές εφαρμογές της όρασης υπολογιστή «στη φύση». Από τη μία πλευρά, μπορεί να χρησιμοποιηθεί για την κατασκευή αυτόνομων συστημάτων που πλοηγούν πράκτορες μέσα από περιβάλλοντα – είτε πρόκειται για ρομπότ που εκτελούν εργασίες είτε για αυτοοδηγούμενα αυτοκίνητα, αλλά αυτό απαιτεί διασταύρωση με άλλα πεδία. Ωστόσο, η ανίχνευση ανωμαλιών (όπως ελαττωματικά προϊόντα σε μια γραμμή), ο εντοπισμός αντικειμένων μέσα σε εικόνες, η ανίχνευση προσώπου και διάφορες άλλες εφαρμογές ανίχνευσης αντικειμένων μπορούν να γίνουν χωρίς να διασταυρωθούν άλλα πεδία.

Η ανίχνευση αντικειμένων δεν είναι τόσο τυποποιημένη όσο η ταξινόμηση εικόνων, κυρίως επειδή οι περισσότερες από τις νέες εξελίξεις γίνονται συνήθως από μεμονωμένους ερευνητές, συντηρητές και προγραμματιστές, παρά από μεγάλες βιβλιοθήκες και πλαίσια. Είναι δύσκολο να συσκευάσετε τα απαραίτητα σενάρια βοηθητικών προγραμμάτων σε ένα πλαίσιο όπως το TensorFlow ή το PyTorch και να διατηρήσετε τις οδηγίες API που καθοδηγούσαν την ανάπτυξη μέχρι στιγμής.

Αυτό καθιστά την ανίχνευση αντικειμένων κάπως πιο περίπλοκη, συνήθως πιο περιεκτική (αλλά όχι πάντα) και λιγότερο προσιτή από την ταξινόμηση εικόνων. Ένα από τα σημαντικότερα οφέλη της ύπαρξης σε ένα οικοσύστημα είναι ότι σας παρέχει έναν τρόπο να μην αναζητάτε χρήσιμες πληροφορίες σχετικά με καλές πρακτικές, εργαλεία και προσεγγίσεις χρήσης. Με την ανίχνευση αντικειμένων – οι περισσότεροι πρέπει να κάνουν πολύ περισσότερη έρευνα στο τοπίο του πεδίου για να αποκτήσουν καλή πρόσφυση.

Ανίχνευση αντικειμένων με το RetinaNet της PyTorch/TorchVision

torchvision είναι το έργο Computer Vision της PyTorch και στοχεύει να διευκολύνει την ανάπτυξη μοντέλων βιογραφικών που βασίζονται σε PyTorch, παρέχοντας σενάρια μετασχηματισμού και αύξησης, έναν ζωολογικό κήπο με προεκπαιδευμένα βάρη, σύνολα δεδομένων και βοηθητικά προγράμματα που μπορούν να είναι χρήσιμα για έναν επαγγελματία.

Ενώ είναι ακόμα σε beta και πολύ πειραματικό – torchvision προσφέρει ένα σχετικά απλό API ανίχνευσης αντικειμένων με μερικά μοντέλα για να διαλέξετε:

  • Ταχύτερο R-CNN
  • RetinaNet
  • 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()

Η 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 στο Google και πραγματικά μαθαίνουν το!

Μπορείτε να αλλάξετε το 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()

Going Further – Πρακτική βαθιά μάθηση για το Computer Vision

Η περιπετειώδης φύση σας σας κάνει να θέλετε να πάτε παραπέρα; Σας προτείνουμε να ελέγξετε το δικό μας Πορεία: "Πρακτική βαθιά μάθηση για την όραση υπολογιστή με Python".

Ανίχνευση αντικειμένων RetinaNet με PyTorch και torchvision PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Ένα άλλο μάθημα Computer Vision;

Δεν θα κάνουμε ταξινόμηση ψηφίων MNIST ή μόδας MNIST. Υπηρέτησαν το μέρος τους εδώ και πολύ καιρό. Πάρα πολλοί πόροι εκμάθησης εστιάζουν σε βασικά σύνολα δεδομένων και βασικές αρχιτεκτονικές πριν αφήσουν τις προηγμένες αρχιτεκτονικές μαύρου κουτιού να επωμιστούν το βάρος της απόδοσης.

Θέλουμε να επικεντρωθούμε απομυθοποίηση, πρακτικότητα, κατανόηση, διαίσθηση και πραγματικά έργα. Θέλω να μάθω πως μπορείς να κάνεις την διαφορά? Θα σας μεταφέρουμε από τον τρόπο με τον οποίο ο εγκέφαλός μας επεξεργάζεται εικόνες έως τη σύνταξη ενός ταξινομητή βαθιάς μάθησης για τον καρκίνο του μαστού σε δίκτυα βαθιάς μάθησης που «παραισθάνονται», διδάσκοντάς σας τις αρχές και τη θεωρία μέσω πρακτικής εργασίας, εξοπλίζοντάς σας με τεχνογνωσία και εργαλεία για να γίνετε ειδικός στην εφαρμογή της βαθιάς μάθησης για την επίλυση της όρασης υπολογιστή.

Τι είναι μέσα?

  • Οι πρώτες αρχές της όρασης και πώς οι υπολογιστές μπορούν να διδαχθούν να «βλέπουν»
  • Διαφορετικές εργασίες και εφαρμογές της όρασης υπολογιστή
  • Τα εργαλεία του εμπορίου που θα κάνουν τη δουλειά σας πιο εύκολη
  • Εύρεση, δημιουργία και χρήση συνόλων δεδομένων για την όραση υπολογιστή
  • Η θεωρία και η εφαρμογή των συνελικτικών νευρωνικών δικτύων
  • Χειρισμός μετατόπισης τομέα, συνεμφάνισης και άλλων προκαταλήψεων στα σύνολα δεδομένων
  • Μεταφέρετε τη μάθηση και χρησιμοποιείτε τον χρόνο εκπαίδευσης και τους υπολογιστικούς πόρους άλλων προς όφελός σας
  • Κατασκευή και εκπαίδευση ενός υπερσύγχρονου ταξινομητή καρκίνου του μαστού
  • Πώς να εφαρμόσετε μια υγιή δόση σκεπτικισμού στις επικρατούσες ιδέες και να κατανοήσετε τις επιπτώσεις των ευρέως υιοθετημένων τεχνικών
  • Οπτικοποίηση του «εννοιολογικού χώρου» ενός ConvNet χρησιμοποιώντας t-SNE και PCA
  • Μελέτες περίπτωσης για το πώς οι εταιρείες χρησιμοποιούν τεχνικές όρασης υπολογιστή για να επιτύχουν καλύτερα αποτελέσματα
  • Σωστή αξιολόγηση μοντέλου, οπτικοποίηση λανθάνοντος χώρου και αναγνώριση της προσοχής του μοντέλου
  • Εκτέλεση έρευνας τομέα, επεξεργασία των δικών σας συνόλων δεδομένων και δημιουργία δοκιμών μοντέλων
  • Αρχιτεκτονικές αιχμής, η εξέλιξη των ιδεών, τι τις κάνει μοναδικές και πώς να τις εφαρμόσετε
  • KerasCV – μια βιβλιοθήκη WIP για τη δημιουργία αγωγών και μοντέλων τελευταίας τεχνολογίας
  • Πώς να αναλύετε και να διαβάζετε έγγραφα και να τα εφαρμόζετε μόνοι σας
  • Επιλογή μοντέλων ανάλογα με την εφαρμογή σας
  • Δημιουργία ενός αγωγού μηχανικής εκμάθησης από άκρο σε άκρο
  • Τοπίο και διαίσθηση για την ανίχνευση αντικειμένων με ταχύτερα R-CNN, RetinaNets, SSD και YOLO
  • Παρουσίαση και σημασιολογική κατάτμηση
  • Αναγνώριση αντικειμένων σε πραγματικό χρόνο με το YOLOv5
  • Εκπαίδευση ανιχνευτών αντικειμένων YOLOv5
  • Εργασία με μετασχηματιστές χρησιμοποιώντας KerasNLP (βιβλιοθήκη WIP με αντοχή στη βιομηχανία)
  • Ενσωμάτωση Transformers με ConvNets για τη δημιουργία λεζάντων εικόνων
  • DeepDream

Συμπέρασμα

Η ανίχνευση αντικειμένων είναι ένα σημαντικό πεδίο της όρασης υπολογιστών και δυστυχώς λιγότερο προσιτό από όσο θα έπρεπε.

Σε αυτόν τον σύντομο οδηγό, ρίξαμε μια ματιά στο πώς torchvision, το πακέτο Computer Vision της PyTorch, διευκολύνει την εκτέλεση ανίχνευσης αντικειμένων σε εικόνες, χρησιμοποιώντας το RetinaNet.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse