Εκτίμηση θέσης/Ανίχνευση σημείων κλειδιού με το YOLOv7 στο Python PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Εκτίμηση θέσης/Ανίχνευση σημείων κλειδιού με το YOLOv7 στην Python

Εισαγωγή

Η ανίχνευση αντικειμένων είναι ένα μεγάλο πεδίο στην όραση υπολογιστή και μια από τις πιο σημαντικές εφαρμογές της όρασης υπολογιστή «στη φύση».

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

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

Ευτυχώς για τις μάζες – η Ultralytics έχει αναπτύξει ένα απλό, πολύ ισχυρό και όμορφο API ανίχνευσης αντικειμένων γύρω από το YOLOv5, το οποίο έχει επεκταθεί από άλλες ομάδες έρευνας και ανάπτυξης σε νεότερες εκδόσεις, όπως το YOLOv7.

Σε αυτόν τον σύντομο οδηγό, θα εκτελούμε Εκτίμηση Πόσης (Ανίχνευση Σημείων Κλειδιού) σε Python, με το υπερσύγχρονο YOLOv7.

Τα σημεία κλειδιά μπορεί να είναι διάφορα σημεία – μέρη προσώπου, άκρα σώματος κ.λπ. Η εκτίμηση πόζας είναι μια ειδική περίπτωση ανίχνευσης σημείων κλειδιού – στην οποία τα σημεία είναι μέρη ενός ανθρώπινου σώματος και μπορούν να χρησιμοποιηθούν για την αντικατάσταση ακριβού υλικού παρακολούθησης θέσης, ενεργοποιήστε τον έλεγχο της ρομποτικής over-the-air και τροφοδοτήστε μια νέα εποχή ανθρώπινης έκφρασης μέσω AR και VR.

YOLO και εκτίμηση πόζας

YOLO (Μόνο μια φορά κοιτάς) είναι μια μεθοδολογία, καθώς και μια οικογένεια μοντέλων που έχουν κατασκευαστεί για την ανίχνευση αντικειμένων. Από την αρχή το 2015, τα YOLOv1, YOLOv2 (YOLO9000) και YOLOv3 έχουν προταθεί από τους ίδιους συγγραφείς – και η κοινότητα βαθιάς μάθησης συνέχισε με προόδους ανοιχτού κώδικα τα επόμενα χρόνια.

YOLOv5 της Ultralytics είναι η πρώτη μεγάλης κλίμακας υλοποίηση του 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, με βέλτιστες πρακτικές, πρότυπα αποδεκτά από τον κλάδο και συμπεριλαμβανόμενο φύλλο εξαπάτησης. Σταματήστε τις εντολές του Git στο Google και πραγματικά μαθαίνουν το!

Με το μοντέλο φορτωμένο, ας δημιουργήσουμε ένα 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 στον κύριο κατάλογο εργασίας, μπορούμε να εκτελέσουμε συμπέρασμα, να εκτελέσουμε μη μέγιστη καταστολή και να σχεδιάσουμε τα αποτελέσματα με:

output, image = run_inference('./karate.jpg')
visualize_output(output, image)

Αυτο εχει ως αποτελεσμα:

Αυτή είναι μια αρκετά δύσκολη εικόνα! Το μεγαλύτερο μέρος του δεξιού βραχίονα του ασκούμενου στα δεξιά είναι κρυμμένο και μπορούμε να δούμε ότι το μοντέλο συμπέρανε ότι είναι κρυμμένο και στα δεξιά του σώματος, λείπει ότι ο αγκώνας είναι λυγισμένος και ότι ένα τμήμα του βραχίονα είναι μπροστά . Ο ασκούμενος στα αριστερά, που φαίνεται πολύ πιο καθαρά, συμπεραίνεται σωστά, ακόμη και με κρυφό πόδι.

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

Συμπέρασμα

Σε αυτόν τον οδηγό – ρίξαμε μια σύντομη ματιά στο YOLOv7, την πιο πρόσφατη εξέλιξη στην οικογένεια YOLO, η οποία βασίζεται στο YOLOR και παρέχει περαιτέρω δυνατότητες τμηματοποίησης και ανίχνευσης σημείων κλειδιού πέρα ​​από τις τυπικές δυνατότητες ανίχνευσης αντικειμένων των περισσότερων μοντέλων που βασίζονται στο YOLO .

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

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

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

Εκτίμηση θέσης/Ανίχνευση σημείων κλειδιού με το YOLOv7 στο Python 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
  • Βελτιστοποίηση μοντέλου Deep Learning για όραση υπολογιστή

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

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