Reaaliaikainen objektien tunnistuspäätelmä Pythonissa YOLOv7 PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Reaaliaikainen objektintunnistuspäätelmä Pythonissa YOLOv7:n kanssa

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 objektien havaitsemisen Pythonissa huippuluokan YOLOv7:n avulla.

YOLO Landscape ja YOLOv7

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 rakennettiin YOLORin päälle (sama kirjoittaja). YOLOv7 on viimeisin edistysaskel YOLO-metodologiassa, ja mikä tärkeintä, YOLOv7 tarjoaa uusia mallipäitä, jotka voivat tulostaa avainpisteitä (luurankoja) ja suorittaa ilmentymien segmentointia vain rajaavan laatikon regression lisäksi, mikä ei ollut vakio aiemmissa YOLO-malleissa.

Tämä tekee ilmentymien segmentoinnista ja avainpisteiden tunnistamisesta nopeampaa kuin koskaan ennen!

Lisäksi YOLOv7 toimii nopeammin ja paremmin kuin aikaisemmat mallit pienemmän parametrimäärän ja paremman laskentatehokkuuden ansiosta:

Reaaliaikainen objektien tunnistuspäätelmä Pythonissa YOLOv7 PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

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

YOLOv7:n asentaminen ja käyttäminen tiivistyy GitHub-tietovaraston lataamiseen paikalliselle koneellesi ja sen mukana toimitettujen komentosarjojen suorittamiseen.

Huomautus: Valitettavasti YOLOv7 ei kirjoitettaessa tarjoa puhdasta ohjelmallista API:ta, kuten YOLOv5, joka tyypillisesti ladataan torch.hub(), välittää GitHub-tietovaraston. Tämä näyttää olevan ominaisuus, jonka pitäisi toimia, mutta se ei tällä hetkellä toimi. Kun se korjaantuu, päivitän oppaan tai julkaisen uuden ohjelmallisessa sovellusliittymässä. Toistaiseksi keskitymme arkistossa oleviin päätelmäskripteihin.

Voit kuitenkin havaita videoita, kuvia jne. reaaliajassa ja tallentaa tulokset helposti. Projekti noudattaa samoja käytäntöjä kuin YOLOv5, jolla on laaja dokumentaatio, joten löydät todennäköisesti vastauksia moniin kapeampiin kysymyksiin YOLOv5-arkistosta, jos sinulla on niitä.

Ladataan arkisto ja tehdään joitakin päätelmiä:

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

Tämä luo a yolov7 hakemistoon nykyisessä työhakemistossasi, jossa projekti sijaitsee. Siirrytään tähän hakemistoon ja katsotaan tiedostoja:

%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          runs

Huomautus: Google Colab -muistikirjassa sinun on suoritettava taika %cd komento jokaisessa solussa, johon haluat muuttaa hakemistosi yolov7, kun taas seuraava solu palauttaa sinut takaisin alkuperäiseen työhakemistoosi. Paikallisissa Jupyter-muistikirjoissa hakemiston muuttaminen kerran pitää sinut siinä, joten komentoa ei tarvitse antaa uudelleen useita kertoja.

- detect.py on päättelykomentosarja, joka suorittaa havainnot ja tallentaa tulokset alle runs/detect/video_name, jossa voit määrittää video_name kun soitat detect.py skriptejä. export.py vie mallin eri muotoihin, kuten ONNX, TFLite jne. train.py voidaan käyttää mukautetun YOLOv7-ilmaisimen kouluttamiseen (toisen oppaan aihe) ja test.py voidaan käyttää ilmaisimen testaamiseen (ladattu painotiedostosta).

Useat lisähakemistot sisältävät määritykset (cfg), esimerkkitiedot (inference), tiedot rakennusmalleista ja COCO-kokoonpanoista (data), Jne

YOLOv7 koot

YOLO-pohjaiset mallit skaalautuvat hyvin, ja ne viedään yleensä pienempinä, vähemmän tarkkoina ja suurempina, tarkempina malleina. Nämä otetaan sitten käyttöön heikompiin tai vahvempiin laitteisiin.

YOLOv7 tarjoaa useita kokoja ja vertasi niitä MS COCO:han:

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!

Malli Testin koko APtesti AP50test AP75test erä 1 fps erä 32 keskimääräinen aika
YOLOV7 640 51.4% 69.7% 55.9% 161 fps 2.8 ms
YOLOv7-X 640 53.1% 71.2% 57.8% 114 fps 4.3 ms
YOLOv7-W6 1280 54.9% 72.6% 60.1% 84 fps 7.6 ms
YOLOv7-E6 1280 56.0% 73.5% 61.2% 56 fps 12.3 ms
YOLOv7-D6 1280 56.6% 74.0% 61.8% 44 fps 15.0 ms
YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36 fps 18.7 ms

Riippuen taustalla olevasta laitteistosta, jolla odotat mallin toimivan, ja vaaditusta tarkkuudesta – voit valita niistä. Pienin malli saavuttaa yli 160 FPS 640-koon kuvissa V100:lla! Voit odottaa tyydyttävää reaaliaikaista suorituskykyä myös yleisemmillä kuluttajagrafiikkasuorittimilla.

Videopäätelmä YOLOv7:n avulla

Luo inference-data kansio, johon tallennat kuvat ja/tai videot, joista haluat havaita. Olettaen, että se on samassa hakemistossa, voimme suorittaa tunnistuskomentosarjan:

! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img

Tämä kehottaa työpöydällesi Qt-pohjaisen videon, jossa voit nähdä reaaliaikaisen edistymisen ja johtopäätökset kehys kuvalta sekä tulostaa tilan vakiolähtöputkeen:

Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU

Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]

Fusing layers... 
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
 Convert model to Traced-model... 
 traced_script_module saved! 
 model is traced! 
 
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS

Huomaa, että projekti toimii hitaasti CPU-pohjaisissa koneissa (kuten 1000 ms per päättelyvaihe yllä olevassa lähdössä, suoritettiin Intel-pohjaisessa 2017 MacBook Prossa) ja huomattavasti nopeammin GPU-pohjaisissa koneissa (lähempänä ~5 ms/kehys V100:ssa). Jopa CPU-pohjaisissa järjestelmissä, kuten tämä, yolov7-tiny.pt juoksee 172ms/frame, joka on kaukana reaaliajasta, mutta on silti erittäin hyvä käsitellä näitä toimintoja prosessorilla.

Kun lenkki on suoritettu, löydät tuloksena olevan videon alta runs/video_1 (nimi, jonka toimitimme detect.py puhelu), tallennettu nimellä .mp4:

Reaaliaikainen objektien tunnistuspäätelmä Pythonissa YOLOv7 PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Päätelmät kuvista

Kuvien päättäminen tiivistyy samaan prosessiin – tiedostojärjestelmän kuvan URL-osoitteen syöttämiseen ja kutsumiseen detect.py:

! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt

Huomautus: Kirjoittaessa tulos ei skaalaa tarroja kuvan kokoon, vaikka määrität sen --img SIZE. Tämä tarkoittaa, että suurissa kuvissa on todella ohuita kehysviivoja ja pieniä tarroja.

Reaaliaikainen objektien tunnistuspäätelmä Pythonissa YOLOv7 PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Yhteenveto

Tässä lyhyessä oppaassa olemme ottaneet lyhyen katsauksen YOLOv7:ään, YOLO-perheen viimeisimpään edistykseen, joka perustuu YOLORin päälle. Olemme tarkastelleet, kuinka arkisto asennetaan paikalliselle koneellesi ja suoritetaan objektien tunnistuksen päättelykomentosarjat valmiiksi koulutetussa verkossa videoille ja kuville.

Muissa oppaissa käsittelemme avainpisteiden havaitsemista ja ilmentymien segmentointia.

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".

Reaaliaikainen objektien tunnistuspäätelmä Pythonissa YOLOv7 PlatoBlockchain Data Intelligencen avulla. 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