Poseerimise hindamine/võtmepunkti tuvastamine YOLOv7-ga Python PlatoBlockchain Data Intelligence'is. Vertikaalne otsing. Ai.

Poseerimise hindamine/võtmepunkti tuvastamine YOLOv7-ga Pythonis

Sissejuhatus

Objektide tuvastamine on arvutinägemise suur valdkond ja üks olulisemaid arvutinägemise rakendusi "looduses".

Objektide tuvastamine ei ole nii standardiseeritud kui piltide klassifitseerimine, peamiselt seetõttu, et enamiku uutest arendustest teevad tavaliselt üksikud teadlased, hooldajad ja arendajad, mitte suured raamatukogud ja raamistikud. Raske on pakkida vajalikke utiliidi skripte raamistikku, nagu TensorFlow või PyTorch, ja säilitada API juhiseid, mis seni arendust juhtisid.

See muudab objektide tuvastamise mõnevõrra keerukamaks, tavaliselt paljusõnalisemaks (kuid mitte alati) ja vähem ligipääsetavaks kui kujutiste klassifitseerimine.

Suurte inimeste õnneks – Ultralytics on oma YOLOv5 ümber välja töötanud lihtsa, väga võimsa ja kauni objektituvastuse API, mida teised uurimis- ja arendusmeeskonnad on laiendanud uuemateks versioonideks, näiteks YOLOv7.

Selles lühikeses juhendis teostame Pythonis poseerimise hindamist (võtmepunkti tuvastamist) tipptasemel YOLOv7-ga.

Võtmepunktid võivad olla erinevad punktid – näoosad, kehajäsemed jne. Poosi hindamine on võtmepunktide tuvastamise erijuhtum – kus punktid on inimkeha osad ja neid saab kasutada kalli asendijälgimise riistvara asendamiseks, võimaldada õhu kaudu robootika juhtimist ja anda AR-i ja VR-i kaudu inimese eneseväljenduse uus ajastu.

YOLO ja poosi hindamine

YOLO (sa vaatad ainult korra) on metoodika, samuti objektide tuvastamiseks loodud mudelite perekond. Alates loomisest 2015. aastal on YOLOv1, YOLOv2 (YOLO9000) ja YOLOv3 pakkunud sama(d) autor(id) – ja süvaõppekogukond jätkas jätkuvatel aastatel avatud lähtekoodiga edusammudega.

Ultralytics YOLOv5 on YOLO esimene suuremahuline juurutus PyTorchis, mis muutis selle ligipääsetavamaks kui kunagi varem, kuid peamine põhjus, miks YOLOv5 niisuguse jalad alla on saanud, on ka selle ümber ehitatud kaunilt lihtne ja võimas API. Projekt abstraheerib mittevajalikud üksikasjad, võimaldades samal ajal kohandamist, praktiliselt kõiki kasutatavaid ekspordivorminguid ja kasutab hämmastavaid tavasid, mis muudavad kogu projekti nii tõhusaks kui ka optimaalseks.

YOLOv5 on endiselt põhiprojekt objektide tuvastamise mudelite koostamiseks ja paljud hoidlad, mille eesmärk on YOLO meetodit edendada, alustavad YOLOv5-st lähtetasemena ja pakuvad sarnast API-t (või lihtsalt ühendage projekt ja ehitage sellele edasi). Selline on juhtum YOLOR (õpid ainult ühe esituse) ja YOLOv7, mis tugines YOLORile (sama autor), mis on YOLO metoodika uusim edasiminek.

YOLOv7 ei ole lihtsalt objektide tuvastamise arhitektuur – pakub uusi mudelipäid, mis suudavad väljastada võtmepunkte (skelette) ja teostada eksemplari segmenteerimist lisaks piirdekasti regressioonile, mis ei olnud eelmiste YOLO mudelite puhul standardne. See pole üllatav, kuna paljusid objektituvastusarhitektuure kasutati jagatud üldarhitektuuri tõttu ka varem segmenteerimise ja võtmepunkti tuvastamise ülesannete jaoks ümber, sõltuvalt ülesandest erinevate väljunditega. Kuigi see pole üllatav – eksemplaride segmenteerimise ja võtmepunkti tuvastamise toetamisest saab tõenäoliselt uus standard YOLO-põhistele mudelitele, mis on paar aastat tagasi hakanud ületama praktiliselt kõiki teisi kaheastmelisi detektoreid.

See muudab eksemplari segmentimise ja võtmepunktide tuvastamise kiiremaks kui kunagi varem ning lihtsama arhitektuuriga kui kaheastmelised detektorid.

Mudel ise loodi nii arhitektuursete muudatuste kui ka koolituse optimeerimise kaudu, mida nimetati "tasuta tasuta kottideks", mis suurendas täpsust ilma järelduskulusid suurendamata.

YOLOv7 installimine

Lähme edasi ja installime projekti GitHubist:

! git clone https://github.com/WongKinYiu/yolov7.git

See loob a yolov7 kataloogi oma praeguse töökataloogi all, kust leiate põhilised projektifailid:

%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

Märge: Google Colabi märkmikud lähtestatakse järgmises lahtris põhitöökataloogi, isegi pärast helistamist %cd dirname, nii et peate jätkama selle kutsumist igas lahtris, milles soovite toimingut sooritada. Kohalikud Jupyteri sülearvutid jätavad muudatuse meelde, seega pole vaja käsku pidevalt kutsuda.

Kui käivitate koodi antud kaalukomplektiga, laaditakse need alla ja salvestatakse sellesse kataloogi. Poseerimise hindamiseks tahame alla laadida selle ülesande jaoks ettevalmistatud YOLOv7 mudeli kaalud, mille leiate jaotisest /releases/download/ vahekaart GitHubis:

! 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

Suurepärane, laadisime alla yolov7-w6-pose.pt kaalufaili, mida saab kasutada treenitud mudeli laadimiseks ja rekonstrueerimiseks poosi hindamiseks.

YOLOv7 poosihinnangu mudeli laadimine

Impordime teegid, mida vajame positsioneerimise hindamiseks:

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 ja torchvision on piisavalt lihtsad – YOLOv7 on rakendatud PyTorchiga. The utils.datasets, utils.general ja utils.plots moodulid pärinevad YOLOv7 projektist ja pakuvad meile meetodeid, mis aitavad eeltöötlemisel ja sisendi ettevalmistamisel mudelile järelduste tegemiseks. Nende hulgas on letterbox() pildi polsterdamiseks, non_max_supression_keypoint() käivitada mittemaksimaalse summutamise algoritm mudeli algväljundis ja toota meie tõlgenduse jaoks puhas väljund, samuti output_to_keypoint() ja plot_skeleton_kpts() meetodid võtmepunktide lisamiseks antud pildile, kui need on ennustatud.

Mudeli saame laadida kaalufailist koos torch.load(). Loome funktsiooni, mis kontrollib, kas GPU on saadaval, laadime mudeli, paneme selle järeldamisrežiimi ja teisaldame GPU-sse, kui see on saadaval:

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()

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Kui mudel on laaditud, loome a run_inference() meetod, mis aktsepteerib stringi, mis osutab meie süsteemis olevale failile. Meetod loeb pilti kasutades OpenCV (cv2), polsterdage see letterbox(), rakendage sellele teisendusi ja muutke see partiiks (mudel on koolitatud ja ootab partiisid, nagu tavaliselt):

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

Siin oleme tagastanud teisendatud pildi (sest tahame originaali välja võtta ja sellele joonistada) ja mudeli väljundid. Need väljundid sisaldavad 45900 võtmepunkti ennustust, millest enamik kattub. Soovime nendele töötlemata ennustustele rakendada mittemaksimaalset supressiooni, nagu ka objektituvastuse ennustuste puhul (kus ennustatakse palju piiravaid kaste ja seejärel need "kokku surutakse", arvestades teatud usaldusväärsust ja IoU läve). Pärast mahasurumist saame joonistada iga võtmepunkti originaalpildile ja kuvada selle:

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()

Nüüd mõne sisendpildi jaoks, nt karate.jpg peamises töökataloogis saame käivitada järeldused, teostada mittemaksimaalset allasurumist ja joonistada tulemused järgmisega:

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

Selle tulemuseks on:

Seda pilti on üsna raske järeldada! Suurem osa paremal asuva praktiku paremast käest on peidetud ja me näeme, et mudel järeldas, et see on peidetud ja asub kehast paremal, ilma et küünarnukk oleks kõverdatud ja et osa käest on ees. . Vasakpoolne praktik, mis on palju selgemalt näha, on õigesti järeldatud, isegi peidetud jalaga.

Tegelikult – taga istuv inimene, kaamerale peaaegu täielikult nähtamatu on lasknud oma poosi näiliselt õigesti hinnata, lähtudes just puusade asendist istudes. Suurepärane töö võrgustiku nimel!

Järeldus

Selles juhendis oleme heitnud põgusa pilgu YOLOv7-le, YOLO perekonna uusimale edusammule, mis põhineb YOLORil ning pakub lisaks enamiku YOLO-põhiste mudelite standardsetele objektituvastusvõimalustele ka eksemplaride segmenteerimise ja võtmepunktide tuvastamise võimalusi. .

Seejärel oleme vaadanud, kuidas saame vabastatud kaalufaile alla laadida, mudeli koostamiseks laadida ja inimeste jaoks poosi hinnanguid teha, andes muljetavaldavaid tulemusi.

Edasiminek – praktiline süvaõpe arvutinägemise jaoks

Sinu uudishimulik loomus tekitab sinus soovi minna kaugemale? Soovitame tutvuda meiega Kursus: "Praktiline süvaõpe arvutinägemise jaoks Pythoniga".

Poseerimise hindamine/võtmepunkti tuvastamine YOLOv7-ga Python PlatoBlockchain Data Intelligence'is. Vertikaalne otsing. Ai.

Veel üks arvutinägemise kursus?

Me ei klassifitseeri MNIST-i numbreid ega MNIST-moodi. Nad teenisid oma osa juba ammu. Liiga paljud õpperessursid keskenduvad põhiandmekogumitele ja põhiarhitektuuridele, enne kui lasevad täiustatud musta kasti arhitektuurid jõudluskoormuse enda kanda võtta.

Tahame keskenduda demüstifitseerimine, praktilisus, mõistmine, intuitsioon ja tõelisi projekte. Tahad õppida kuidas saate midagi muuta? Viime teid teele alates viisist, kuidas meie aju töötleb pilte, kuni rinnavähi süvaõppe klassifikaatori kirjutamiseni kuni süvaõppevõrgustikeni, mis "hallutsineerivad", õpetades teile põhimõtteid ja teooriat praktilise töö kaudu, varustades teid oskusteavet ja tööriistu, et saada eksperdiks süvaõppe rakendamisel arvutinägemise lahendamisel.

Mis seal sees on?

  • Nägemise esimesed põhimõtted ja see, kuidas arvuteid saab õpetada nägema
  • Arvutinägemise erinevad ülesanded ja rakendused
  • Tööriistad, mis muudavad teie töö lihtsamaks
  • Arvutinägemise andmestike otsimine, loomine ja kasutamine
  • Konvolutsiooniliste närvivõrkude teooria ja rakendus
  • Domeeni nihke, koosesinemise ja muude andmekogumite eelarvamuste käsitlemine
  • Teisaldage õppimine ja teiste koolitusaja ja arvutusressursside kasutamine teie kasuks
  • Kaasaegse rinnavähi klassifikaatori ehitamine ja väljaõpe
  • Kuidas rakendada tervet annust skepsist peavoolu ideede suhtes ja mõista laialdaselt kasutusele võetud tehnikate mõju
  • ConvNeti "kontseptsiooniruumi" visualiseerimine t-SNE ja PCA abil
  • Juhtumiuuringud, kuidas ettevõtted kasutavad arvutinägemise tehnikaid paremate tulemuste saavutamiseks
  • Mudeli nõuetekohane hindamine, varjatud ruumi visualiseerimine ja mudeli tähelepanu tuvastamine
  • Domeeniuuringu läbiviimine, oma andmekogumite töötlemine ja mudelitestide loomine
  • Tipptasemel arhitektuurid, ideede edenemine, mis teeb need ainulaadseks ja kuidas neid ellu viia
  • KerasCV – WIP-teek tipptasemel torujuhtmete ja mudelite loomiseks
  • Kuidas töid sõeluda ja lugeda ning neid ise rakendada
  • Mudelite valimine sõltuvalt teie rakendusest
  • Täieliku masinõppe torujuhtme loomine
  • Maastik ja intuitsioon objektide tuvastamisel kiiremate R-CNN-ide, RetinaNetside, SSD-de ja YOLO-ga
  • Eksemplar ja semantiline segmenteerimine
  • Reaalajas objektituvastus YOLOv5-ga
  • YOLOv5 objektidetektorite koolitamine
  • Transformeritega töötamine KerasNLP-ga (tööstuse tugev WIP-teek)
  • Transformerite integreerimine ConvNetsiga, et luua piltide pealdised
  • Deepdream
  • Süvaõppe mudeli optimeerimine arvutinägemise jaoks

Ajatempel:

Veel alates Stackabus