Asennon arviointi/avainpisteen tunnistus YOLOv7:n avulla Python PlatoBlockchain Data Intelligencessä. Pystysuuntainen haku. Ai.

Asennon arviointi/avainpisteen tunnistus YOLOv7:llä Pythonissa

esittely

Objektien havaitseminen on laaja kenttä tietokonenäössä ja yksi tärkeimmistä tietokonenäön sovelluksista "luonnossa".

Objektien tunnistus ei ole yhtä standardoitua kuin kuvien luokittelu, lähinnä siksi, että useimmat uudet kehitystyöt ovat tyypillisesti yksittäisten tutkijoiden, ylläpitäjien ja kehittäjien tekemiä suurten kirjastojen ja kehysten sijaan. Tarvittavia apuohjelmia on vaikea pakata TensorFlow- tai PyTorchin kaltaisiin puitteisiin ja ylläpitää kehitystä tähän asti ohjaaneita API-ohjeita.

Tämä tekee objektien havaitsemisesta jonkin verran monimutkaisempaa, tyypillisesti monisanaisempaa (mutta ei aina) ja vähemmän lähestyttävää kuin kuvien luokittelu.

Masojen onneksi – Ultralytics on kehittänyt YOLOv5:n ympärille yksinkertaisen, erittäin tehokkaan ja kauniin objektintunnistussovellusliittymän, jota muut tutkimus- ja kehitystiimit ovat laajentaneet uudempiin versioihin, kuten YOLOv7.

Tässä lyhyessä oppaassa suoritamme asennon arvioinnin (avainpisteen havaitsemisen) Pythonissa huippuluokan YOLOv7:n avulla.

Avainpisteet voivat olla erilaisia ​​pisteitä – kasvojen osia, kehon raajoja jne. Asennon estimointi on avainpisteiden havaitsemisen erikoistapaus – jossa pisteet ovat ihmiskehon osia ja niitä voidaan käyttää korvaamaan kalliita asennonseurantalaitteita, mahdollistaa over-the-air robotiikan hallinnan ja antaa voiman ihmisen itseilmaisun uudelle aikakaudelle AR:n ja VR:n avulla.

YOLO ja asentoarvio

YOLO (katsot vain kerran) on metodologia sekä malliperhe, joka on rakennettu kohteen havaitsemiseen. Vuoden 2015 alusta lähtien YOLOv1:tä, YOLOv2:ta (YOLO9000) ja YOLOv3:a ovat ehdottaneet samat kirjoittajat – ja syväoppimisyhteisö on jatkanut avoimen lähdekoodin kehitystyötä jatkuvien vuosien aikana.

Ultralyticsin YOLOv5 on ensimmäinen laajamittainen YOLO-toteutus PyTorchissa, mikä teki siitä helpomman kuin koskaan ennen, mutta tärkein syy YOLOv5:n jalansijalle on myös sen ympärille rakennettu kauniin yksinkertainen ja tehokas API. Projekti abstrahoi pois tarpeettomat yksityiskohdat, sallien samalla muokattavuuden, käytännössä kaikki käyttökelpoiset vientimuodot ja hyödyntää hämmästyttäviä käytäntöjä, jotka tekevät koko projektista sekä tehokkaan että mahdollisimman optimaalisen.

YOLOv5 on edelleen perusprojekti objektientunnistusmallien rakentamiseen, ja monet arkistot, jotka pyrkivät edistämään YOLO-menetelmää, alkavat YOLOv5:stä perustana ja tarjoavat samanlaisen API:n (tai yksinkertaisesti haaroittele projektia ja rakenna sen päälle). Tällainen on tilanne YOLOR (opit vain yhden esityksen) ja YOLOv7, joka perustuu YOLORiin (sama kirjoittaja), joka on YOLO-metodologian viimeisin edistysaskel.

YOLOv7 ei ole vain objektintunnistusarkkitehtuuri – se tarjoaa uusia mallipäät, jotka voivat tulostaa avainpisteitä (luurankoja) ja suorittaa ilmentymien segmentointia pelkän rajoituslaatikon regression lisäksi, mikä ei ollut vakio aiemmissa YOLO-malleissa. Tämä ei ole yllättävää, koska monet objektien tunnistusarkkitehtuurit on myös aikaisemmin käytetty uudelleen esimerkiksi segmentointi- ja avainpisteen havaitsemistehtäviä varten yhteisen yleisarkkitehtuurin vuoksi, eri lähdöillä tehtävästä riippuen. Vaikka se ei ole yllättävää – ilmentymien segmentoinnin ja avainpisteen tunnistuksen tukemisesta tulee todennäköisesti uusi standardi YOLO-pohjaisille malleille, jotka ovat alkaneet ylittää käytännössä kaikki muut kaksivaiheiset ilmaisimet pari vuotta sitten.

Tämä tekee ilmentymien segmentoinnista ja avainpisteiden havaitsemisesta nopeampaa kuin koskaan ennen, ja sen arkkitehtuuri on yksinkertaisempi kuin kaksivaiheiset ilmaisimet.

Itse malli luotiin arkkitehtonisilla muutoksilla sekä koulutuksen optimoinnilla, joita kutsuttiin "bag-of-freebies"iksi, mikä lisäsi tarkkuutta lisämättä päättelykustannuksia.

YOLOv7:n asentaminen

Mennään eteenpäin ja asenna projekti GitHubista:

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

Tämä luo a yolov7 nykyisen työhakemistosi alainen hakemisto, josta löydät perusprojektitiedostot:

%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

Huomautus: Google Colab -muistikirjat palautuvat seuraavan solun päätyöhakemistoon, jopa soittamisen jälkeen %cd dirname, joten sinun on kutsuttava sitä jokaisessa solussa, jossa haluat suorittaa toiminnon. Paikalliset Jupyter-muistikirjat muistavat muutoksen, joten komentoa ei tarvitse kutsua jatkuvasti.

Aina kun suoritat koodia tietyllä painosarjalla – ne ladataan ja tallennetaan tähän hakemistoon. Asennon arvioinnin suorittamiseksi haluamme ladata painot kyseiseen tehtävään valmiiksi koulutetulle YOLOv7-mallille, jotka löytyvät /releases/download/ välilehti GitHubissa:

! 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

Hienoa, olemme ladanneet yolov7-w6-pose.pt painot-tiedosto, jota voidaan käyttää koulutetun mallin lataamiseen ja rekonstruoimiseen asennon arvioimista varten.

Ladataan YOLOv7-asennonarviointimallia

Tuodaan kirjastot, joita tarvitsemme asennon arvioimiseen:

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 ovat riittävän yksinkertaisia ​​- YOLOv7 on toteutettu PyTorchin kanssa. The utils.datasets, utils.general ja utils.plots moduulit tulevat YOLOv7-projektista, ja ne tarjoavat meille menetelmiä, jotka auttavat esikäsittelyssä ja syötteiden valmistelussa mallia varten päätelmien suorittamista varten. Niiden joukossa ovat letterbox() pehmustaa kuvaa, non_max_supression_keypoint() suorittaa Non-Max Supression -algoritmi mallin alkuperäisessä lähdössä ja tuottaa puhdas tulos tulkintaamme varten sekä output_to_keypoint() ja plot_skeleton_kpts() menetelmiä avainpisteiden lisäämiseksi tiettyyn kuvaan, kun ne on ennustettu.

Voimme ladata mallin painotiedostosta torch.load(). Luodaan funktio, jolla tarkistetaan onko GPU saatavilla, ladataan malli, laitetaan se päättelytilaan ja siirretään GPU:lle jos saatavilla:

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

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Kun malli on ladattu, luodaan a run_inference() menetelmä, joka hyväksyy järjestelmässämme olevaan tiedostoon osoittavan merkkijonon. Menetelmä lukee kuvan OpenCV:llä (cv2), täytä se letterbox(), käytä siihen muunnoksia ja muuta se eräksi (malli on koulutettu ja odottaa eriä, kuten tavallista):

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

Täällä olemme palauttaneet muunnetun kuvan (koska haluamme purkaa alkuperäisen ja piirtää sen päälle) ja mallin tulosteet. Nämä lähdöt sisältävät 45900 XNUMX avainpisteen ennustetta, joista useimmat menevät päällekkäin. Haluamme käyttää Non-Max Supressiota näihin raakaennusteisiin, aivan kuten Object Detection -ennusteisiin (jossa ennustetaan monia rajallisia ruutuja ja sitten ne "kutistetaan" tietyn varmuuden ja IoU-kynnyksen vuoksi). Tukahdutuksen jälkeen voimme piirtää jokaisen avainpisteen alkuperäiseen kuvaan ja näyttää sen:

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

Nyt jollekin syötekuvalle, kuten esim karate.jpg päätyöhakemistossa voimme suorittaa päätelmiä, suorittaa ei-maksimivaimennusta ja piirtää tulokset käyttämällä:

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

Tämä johtaa:

Tämä kuva on melko vaikea päätellä! Suurin osa oikeanpuoleisen harjoittajan oikeasta käsivarresta on piilossa, ja voimme nähdä, että malli päätteli, että se on piilossa ja vartalon oikealla puolella, mutta puuttui, että kyynärpää on taipunut ja että osa käsivarresta on edessä . Vasemmalla oleva harjoittaja, joka näkyy paljon selvemmin, on päätelty oikein, jopa piilossa olevalla jalalla.

Itse asiassa - takana istuva henkilö, lähes täysin näkymätön kameralle on arvioinut asentonsa näennäisesti oikein, pelkästään lantion asennon perusteella istuessaan. Hienoa työtä verkoston puolesta!

Yhteenveto

Tässä oppaassa olemme ottaneet lyhyen katsauksen YOLOv7:ään, YOLO-perheen viimeisimpään edistykseen, joka perustuu YOLORin päälle ja tarjoaa lisäksi esiintymien segmentointi- ja avainpisteiden tunnistusominaisuudet, jotka ylittävät useimpien YOLO-pohjaisten mallien vakioobjektien tunnistusominaisuudet. .

Olemme sitten tarkastelleet, kuinka voimme ladata julkaistut painotiedostot, ladata ne mallin rakentamiseksi ja tehdä asennonarviointipäätelmiä ihmisille, mikä tuottaa vaikuttavia tuloksia.

Jatketaan – Käytännön syvällistä oppimista tietokonenäköön

Utelias luonteesi saa sinut haluamaan pidemmälle? Suosittelemme tutustumaan meidän Kurssi: "Käytännön syvällinen oppiminen tietokonenäön käyttöön Pythonilla".

Asennon arviointi/avainpisteen tunnistus YOLOv7:n avulla Python PlatoBlockchain Data Intelligencessä. Pystysuuntainen haku. Ai.

Toinen tietokonenäkökurssi?

Emme luokittele MNIST-numeroita tai MNIST-muotia. He palvelivat osansa kauan sitten. Liian monet oppimisresurssit keskittyvät perustietosarjoihin ja perusarkkitehtuureihin, ennen kuin edistyneiden black-box-arkkitehtuurien annetaan kantaa suoritustaakka.

Haluamme keskittyä demystifikaatio, käytännöllisyys, ymmärtäminen, intuitio ja oikeita projekteja. Haluan oppia miten voitko vaikuttaa? Viemme sinut matkalle aivomme prosessoinnista kuvien tutkimiseen rintasyövän syväoppimisluokittajan kirjoittamiseen syväoppimisverkostoihin, jotka "halusinoivat", opettaen sinulle periaatteita ja teoriaa käytännön työssä ja varustamalla tietotaitoa ja työkaluja tullaksesi asiantuntijaksi syväoppimisen soveltamisessa tietokonenäön ratkaisemiseen.

Mitä on sisällä?

  • Näön ensimmäiset periaatteet ja kuinka tietokoneet voidaan opettaa "näkemään"
  • Tietokonenäön eri tehtävät ja sovellukset
  • Ammatin työkalut, jotka helpottavat työtäsi
  • Tietokokonaisuuksien etsiminen, luominen ja hyödyntäminen tietokonenäköä varten
  • Konvoluutiohermoverkkojen teoria ja sovellus
  • Verkkotunnuksen siirtymisen, samanaikaisen esiintymisen ja muiden vääristymien käsittely tietojoukoissa
  • Siirrä Oppiminen ja muiden koulutusajan ja laskennallisten resurssien hyödyntäminen hyödyksesi
  • Huippuluokan rintasyövän luokittelijan rakentaminen ja kouluttaminen
  • Kuinka soveltaa tervettä annos skeptisyyttä valtavirran ideoihin ja ymmärtää laajalti käytettyjen tekniikoiden vaikutukset
  • ConvNetin "konseptitilan" visualisointi t-SNE:n ja PCA:n avulla
  • Tapaustutkimuksia siitä, kuinka yritykset käyttävät tietokonenäkötekniikoita parempien tulosten saavuttamiseksi
  • Oikea mallin arviointi, piilevän tilan visualisointi ja mallin huomion tunnistaminen
  • Toimialuetutkimuksen suorittaminen, omien tietojoukkojen käsittely ja mallitestien laatiminen
  • Huippuluokan arkkitehtuurit, ideoiden eteneminen, mikä tekee niistä ainutlaatuisia ja miten ne toteutetaan
  • KerasCV – WIP-kirjasto uusimpien putkien ja mallien luomiseen
  • Kuinka jäsentää ja lukea papereita ja toteuttaa ne itse
  • Mallien valinta sovelluksesi mukaan
  • Luodaan päästä päähän koneoppimisputki
  • Maisema ja intuitio kohteen havaitsemisessa nopeampien R-CNN-, RetinaNet-, SSD- ja YOLO-verkkojen avulla
  • Instanssi ja semanttinen segmentointi
  • Reaaliaikainen objektintunnistus YOLOv5:n avulla
  • YOLOv5-objektitunnistimien koulutus
  • Työskentely Transformersin kanssa KerasNLP:n (teollisuuden vahvuus WIP-kirjasto) avulla
  • Transformersin integrointi ConvNet-verkkojen kanssa kuvien tekstitysten luomiseksi
  • Deepdream
  • Deep Learning -mallin optimointi tietokonenäköä varten

Aikaleima:

Lisää aiheesta Stackabus