Ocena poze/zaznavanje ključne točke z YOLOv7 v Python PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Ocena poze/zaznavanje ključne točke z YOLOv7 v Pythonu

Predstavitev

Zaznavanje predmetov je obsežno področje računalniškega vida in ena pomembnejših aplikacij računalniškega vida »v naravi«.

Zaznavanje objektov ni tako standardizirano kot klasifikacija slik, predvsem zato, ker večino novega razvoja običajno opravijo posamezni raziskovalci, vzdrževalci in razvijalci, ne pa velike knjižnice in ogrodja. Težko je zapakirati potrebne pomožne skripte v ogrodje, kot sta TensorFlow ali PyTorch, in vzdrževati smernice API-ja, ki so usmerjale dosedanji razvoj.

Zaradi tega je zaznavanje objektov nekoliko bolj zapleteno, običajno bolj podrobno (vendar ne vedno) in manj dostopno kot klasifikacija slik.

Na srečo za množice – Ultralytics je razvil preprost, zelo zmogljiv in lep API za zaznavanje predmetov okoli svojega YOLOv5, ki so ga druge raziskovalne in razvojne ekipe razširile v novejše različice, kot je YOLOv7.

V tem kratkem vodniku bomo izvedli oceno poze (odkrivanje ključnih točk) v Pythonu z najsodobnejšim YOLOv7.

Ključne točke so lahko različne točke – deli obraza, okončine telesa itd. Ocena položaja je poseben primer zaznavanja ključnih točk – pri katerem so točke deli človeškega telesa in se lahko uporabijo za zamenjavo drage strojne opreme za sledenje položaju, omogočajo nadzor robotov po zraku in spodbujajo novo dobo človeškega samoizražanja prek AR in VR.

YOLO in ocena poze

YOLO (pogledaš samo enkrat) je metodologija, pa tudi družina modelov, zgrajenih za odkrivanje objektov. Od ustanovitve leta 2015 so YOLOv1, YOLOv2 (YOLO9000) in YOLOv3 predlagali isti avtorji – in skupnost za globoko učenje je v naslednjih letih nadaljevala z odprtokodnim napredkom.

Ultralytics' YOLOv5 je prva obsežna implementacija YOLO v PyTorch, zaradi katere je postal bolj dostopen kot kdaj koli prej, vendar je glavni razlog, da je YOLOv5 pridobil tako oporo, tudi čudovito preprost in zmogljiv API, zgrajen okoli njega. Projekt abstrahira nepotrebne podrobnosti, hkrati pa omogoča prilagodljivost, praktično vse uporabne izvozne formate in uporablja neverjetne prakse, zaradi katerih je celoten projekt hkrati učinkovit in čim bolj optimalen.

YOLOv5 je še vedno glavni projekt za izgradnjo modelov zaznavanja objektov in številna skladišča, ki si prizadevajo za napredek metode YOLO, se začnejo z YOLOv5 kot osnovo in ponujajo podoben API (ali preprosto razcepijo projekt in nadgradijo). Takšen je primer YOLOR (Naučiš se samo enega prikaza) in YOLOv7, ki temelji na YOLOR (isti avtor), ki je najnovejši napredek v metodologiji YOLO.

YOLOv7 ni le arhitektura za zaznavanje objektov – ponuja nove glave modelov, ki lahko izpišejo ključne točke (okostja) in izvedejo segmentacijo primerkov poleg le regresije omejevalnih okvirjev, kar ni bilo standardno pri prejšnjih modelih YOLO. To ni presenetljivo, saj je bilo zaradi skupne splošne arhitekture veliko arhitektur zaznavanja objektov spremenjenih namenov za na primer naloge segmentacije in zaznavanja ključnih točk, z različnimi izhodi glede na nalogo. Čeprav ni presenetljivo – podpora segmentaciji primerkov in zaznavanju ključnih točk bo verjetno postala nov standard za modele, ki temeljijo na YOLO, ki so pred nekaj leti začeli prekašati skoraj vse druge dvostopenjske detektorje.

Zaradi tega sta segmentacija primerkov in zaznavanje ključnih točk hitrejša kot kdaj koli prej, s preprostejšo arhitekturo kot dvostopenjski detektorji.

Sam model je bil ustvarjen z arhitekturnimi spremembami, pa tudi z optimiziranimi vidiki usposabljanja, imenovanimi »bag-of-freebies«, kar je povečalo natančnost brez povečanja stroškov sklepanja.

Namestitev YOLOv7

Pojdimo naprej in namestimo projekt iz GitHub:

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

To ustvari a yolov7 imenik pod vašim trenutnim delovnim imenikom, v katerem boste lahko našli osnovne projektne datoteke:

%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

Opomba: Beležnice Google Colab se ponastavijo v glavni delovni imenik v naslednji celici, tudi po klicu %cd dirname, zato ga boste morali še naprej klicati v vsaki celici, v kateri želite izvesti operacijo. Lokalni prenosni računalniki Jupyter si zapomnijo spremembo, zato ni potrebe po klicanju ukaza.

Kadarkoli zaženete kodo z danim naborom uteži – te bodo prenesene in shranjene v tem imeniku. Za izvedbo ocene položaja bomo želeli prenesti uteži za vnaprej pripravljen model YOLOv7 za to nalogo, ki ga lahko najdete pod /releases/download/ zavihek na GitHubu:

! 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

Odlično, prenesli smo yolov7-w6-pose.pt datoteko uteži, ki jo je mogoče uporabiti za nalaganje in rekonstrukcijo usposobljenega modela za oceno položaja.

Nalaganje modela za ocenjevanje poze YOLOv7

Uvozimo knjižnice, ki jih bomo potrebovali za izvedbo ocene položaja:

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 in torchvision so dovolj enostavni – YOLOv7 je implementiran s PyTorch. The utils.datasets, utils.general in utils.plots moduli izvirajo iz projekta YOLOv7 in nam nudijo metode, ki pomagajo pri predprocesiranju in pripravi vhodnih podatkov za model za izvajanje sklepanja. Med temi so letterbox() podložiti sliko, non_max_supression_keypoint() za zagon algoritma Non-Max Supression na začetnem izhodu modela in za izdelavo čistega izhoda za našo interpretacijo, kot tudi output_to_keypoint() in plot_skeleton_kpts() metode za dejansko dodajanje ključnih točk dani sliki, ko so predvidene.

Model lahko naložimo iz datoteke teže z torch.load(). Ustvarimo funkcijo za preverjanje, ali je GPE na voljo, naložimo model, ga prestavimo v način sklepanja in premaknemo v GPE, če je na voljo:

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

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

Z naloženim modelom ustvarimo a run_inference() metoda, ki sprejme niz, ki kaže na datoteko v našem sistemu. Metoda bo prebrala sliko z uporabo OpenCV (cv2), obložite z letterbox(), uporabite transformacije zanj in ga spremenite v paket (model je naučen in pričakuje pakete, kot običajno):

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

Tukaj smo vrnili preoblikovano sliko (ker bomo želeli izvleči izvirnik in narisati na njem) in rezultate modela. Ti rezultati vsebujejo 45900 napovedi ključnih točk, od katerih se večina prekriva. Za te neobdelane napovedi bomo želeli uporabiti zatiranje, ki ni največje, tako kot pri predvidevanjih zaznavanja objektov (kjer je predvidenih veliko omejevalnih okvirjev, nato pa so »strnjeni« glede na določeno stopnjo zaupanja in prag IoU). Po zatiranju lahko vsako ključno točko narišemo na izvirno sliko in jo prikažemo:

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

Zdaj pa za neko vhodno sliko, kot je npr karate.jpg v glavnem delovnem imeniku lahko izvedemo sklepanje, izvedemo ne-max supresijo in narišemo rezultate z:

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

Rezultat tega je:

To je precej težko sklepati sliko! Večji del desne roke praktikanta na desni je skrit in vidimo, da je model sklepal, da je skrita in na desni strani telesa, manjka pa, da je komolec upognjen in da je del roke spredaj . Vadilec na levi, ki je veliko bolj jasno viden, je sklepan pravilno, tudi s skrito nogo.

Pravzaprav – oseba, ki sedi zadaj, skoraj popolnoma neviden za kamero ima na videz pravilno ocenjeno njihovo pozo, le na podlagi položaja bokov med sedenjem. Odlično delo v imenu mreže!

zaključek

V tem vodniku – na kratko smo si ogledali YOLOv7, najnovejši napredek v družini YOLO, ki nadgrajuje YOLOR in nadalje zagotavlja segmentacijo primerkov in zmožnosti zaznavanja ključnih točk, ki presegajo standardne zmožnosti zaznavanja objektov večine modelov, ki temeljijo na YOLO. .

Nato smo si ogledali, kako lahko prenesemo objavljene datoteke s težo, jih naložimo, da izdelamo model in izvedemo sklepanje o oceni položaja za ljudi, kar prinaša impresivne rezultate.

Naprej – Praktično poglobljeno učenje za računalniški vid

Ali zaradi vaše radovedne narave želite iti dlje? Priporočamo, da si ogledate naše Tečaj: »Praktično poglobljeno učenje za računalniški vid s Pythonom«.

Ocena poze/zaznavanje ključne točke z YOLOv7 v Python PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Še en tečaj računalniškega vida?

Ne bomo izvajali klasifikacije števk MNIST ali načina MNIST. Svojo so že zdavnaj odslužili. Preveč učnih virov se osredotoča na osnovne nabore podatkov in osnovne arhitekture, preden prepusti naprednim arhitekturam črnih skrinjic breme zmogljivosti.

Želimo se osredotočiti na demistifikacija, praktičnosti, razumevanje, intuicija in pravi projekti. Želim se naučiti kako lahko kaj spremeniš? Popeljali vas bomo od načina, na katerega naši možgani obdelujejo slike, do pisanja raziskovalnega klasifikatorja globokega učenja za raka dojke do omrežij globokega učenja, ki »halucinirajo«, vas naučijo načel in teorije s praktičnim delom ter vas opremijo z znanje in izkušnje ter orodja, da postanete strokovnjak za uporabo globokega učenja za reševanje računalniškega vida.

Kaj je notri?

  • Prva načela vida in kako lahko računalnike naučimo "videti"
  • Različne naloge in aplikacije računalniškega vida
  • Strokovna orodja, ki vam bodo olajšala delo
  • Iskanje, ustvarjanje in uporaba naborov podatkov za računalniški vid
  • Teorija in uporaba konvolucijskih nevronskih mrež
  • Obravnava premikov domene, sopojavljanja in drugih pristranskosti v nizih podatkov
  • Prenos učenja in uporaba časa za usposabljanje in računalniških virov drugih v vašo korist
  • Izdelava in usposabljanje najsodobnejšega klasifikatorja raka dojke
  • Kako uporabiti zdrav odmerek skepticizma za glavne ideje in razumeti posledice splošno sprejetih tehnik
  • Vizualizacija »konceptnega prostora« ConvNet z uporabo t-SNE in PCA
  • Študije primerov o tem, kako podjetja uporabljajo tehnike računalniškega vida za doseganje boljših rezultatov
  • Pravilno vrednotenje modela, vizualizacija latentnega prostora in prepoznavanje pozornosti modela
  • Izvajanje domenskih raziskav, obdelava lastnih naborov podatkov in vzpostavljanje testov modelov
  • Vrhunske arhitekture, razvoj idej, kaj jih dela edinstvene in kako jih uresničiti
  • KerasCV – knjižnica WIP za ustvarjanje najsodobnejših cevovodov in modelov
  • Kako razčleniti in brati prispevke ter jih implementirati sami
  • Izbira modelov glede na vašo aplikacijo
  • Ustvarjanje cevovoda strojnega učenja od konca do konca
  • Pokrajina in intuicija pri zaznavanju predmetov s hitrejšimi R-CNN, RetinaNets, SSD in YOLO
  • Instančna in pomenska segmentacija
  • Prepoznavanje predmetov v realnem času z YOLOv5
  • Usposabljanje detektorjev predmetov YOLOv5
  • Delo s transformatorji z uporabo KerasNLP (industrijska knjižnica WIP)
  • Integracija Transformers s ConvNets za ustvarjanje napisov slik
  • Deepdream
  • Optimizacija modela globokega učenja za računalniški vid

Časovni žig:

Več od Stackabuse