Johdatus liikkeen estimointiin optisen virtauksen kanssa

tässä opetusohjelmassa sukellamme optisen virtauksen perusteisiin, tarkastelemme joitakin sen sovelluksia ja toteutamme sen kaksi päävarianttia (harva ja tiheä). Keskustelemme lyhyesti myös uudemmista lähestymistavoista, joissa käytetään syväoppimista ja lupaavia tulevaisuuden suuntia.

Viimeaikaiset läpimurrot tietokonenäkötutkimuksessa ovat mahdollistaneet sen, että koneet pystyvät hahmottamaan ympäröivää maailmaa sellaisten tekniikoiden avulla kuin objektien havaitseminen tiettyyn luokkaan kuuluvien esineiden havaitsemiseksi ja semanttinen segmentointi pikseliviisaaseen luokitteluun.

reaaliaikaisen videotulon käsittelyssä useimmat näiden tekniikoiden toteutukset käsittelevät kuitenkin vain samassa kehyksessä olevien objektien suhteita \((x, y)\) ottamatta huomioon aikatietoa \((t)\). Toisin sanoen, he arvioivat jokaisen kehyksen uudelleen itsenäisesti, ikään kuin ne olisivat täysin toisiinsa liittymättömiä kuvia, jokaiselle ajolle. Entä jos tarvitsemme peräkkäisten kehysten välisiä suhteita, esimerkiksi haluamme seurata ajoneuvojen liikettä kehyksissä arvioidaksemme sen nykyisen nopeuden ja ennustaaksemme sen sijainnin seuraavassa kehyksessä?

harva optinen liikennevirta (jokainen nuoli osoittaa vastaavan pikselin ennustetun virtauksen suuntaan).

tai vaihtoehtoisesti, mitä jos tarvitsemme tietoa ihmisen pose-suhteista peräkkäisten kehysten välillä tunnistaaksemme ihmisen teot, kuten jousiammunnan, baseballin ja koripallon?

Various sports action classifications
Various action classifications
luokittelemalla toimintoja optisella virtauksella
luokittelemalla toimintoja optisella virtauksella

tässä opetusohjelmassa opimme, mitä optinen virtaus on, kuinka toteuttaa sen kaksi päämuunnosta (harva ja tiheä), ja saamme myös ison kuvan uudemmista lähestymistavoista, jotka sisältävät syväoppimista ja lupaavia tulevaisuuden suuntia.

mikä on optinen virtaus?
harvan optisen virtauksen toteuttaminen
tiheän optisen virtauksen toteuttaminen
Syväoppiminen ja sen jälkeen

mikä on optinen virtaus?

aloittakaamme korkean tason ymmärryksellä optisesta virtauksesta. Optinen virtaus on kappaleiden liike peräkkäisten peräkkäisten kehysten välillä, mikä johtuu kohteen ja kameran välisestä suhteellisesta liikkeestä. Optisen virtauksen ongelma voidaan ilmaista seuraavasti:

optinen virtausongelma
optinen virtausongelma

jossa peräkkäisten kehysten välillä voidaan ilmaista kuvan voimakkuus \((I)\) avaruuden funktiona \((x, y)\) ja aika \((t)\). Toisin sanoen, jos otamme ensimmäisen kuvan \(I (x, y, t)\) ja siirrämme sen pikseleitä \((DX, dy)\) \(t\) ajan kuluessa, saamme uuden kuvan \(I(x + dx, y + dy, t + dt)\).

ensinnäkin oletamme, että kohteen pikselitehot ovat vakio peräkkäisten kehysten välillä.

Vakiovoimakkuusoletus optiselle virtaukselle
Vakiovoimakkuusoletus optiselle virtaukselle

toiseksi otetaan RHS: n Taylorin sarjan likiarvo ja poistetaan yhteiset termit.

Taylor Series Approksimation of pixel intensity
Taylor Series Approksimation of pixel intensity

kolmas, jaamme \(dt\) johtaaksemme optisen virtauksen yhtälön:

optinen virtausyhtälö
optinen virtausyhtälö

missä \(u = DX/dt\) ja \(v = dy / dt\).

\(dI/dx, dI/dy\) ja \(dI / DT\) ovat vaaka-akselin, pystyakselin ja ajan suuntaisia kuvagradientteja. Näin ollen päädymme optisen virtauksen ongelmaan, eli ratkaisemalla \(u (DX/dt)\) ja \(v (dy / DT)\) liikkeen määrittämiseksi ajan kuluessa. Saatat huomata, että emme voi suoraan ratkaista optinen virtaus yhtälö \(u\) ja \(v\), koska on olemassa vain yksi yhtälö kaksi tuntematonta muuttujaa. Otamme käyttöön joitakin menetelmiä, kuten Lucas-Kanade-menetelmän tämän ongelman ratkaisemiseksi.

harva vs tiheä optinen virtaus

harva optinen virtaus antaa virtavektoreille joitakin ”mielenkiintoisia ominaisuuksia” (sanotaan muutama pikseli kuvaa kohteen reunoja tai kulmia) kehyksessä samalla tiheän optisen virtauksen, jolloin saadaan koko kehyksen virtavektorit (kaikki pikselit) – jopa yksi virtavektori pikseliä kohti. Kuten olisit arvannut, tiheä optinen virtaus on suurempi tarkkuus kustannuksella on hidas / laskennallisesti kallista.

Left: Harva optinen virtaus-seuraa muutamia ”ominaisuus” pikseleitä; oikea: tiheä optinen virtaus – arvioi kaikkien kuvan pikselien virtaus.

toteuttaessaan harvan optisen virtauksen

harvan optisen virtauksen valitsee harvan ominaisuusjoukon pikseleitä (esim.kiinnostavia ominaisuuksia kuten reunat ja kulmat) seuraamaan nopeusvektoreitaan (liikettä). Uutetut ominaisuudet kulkevat optisessa virtaustoiminnossa kehyksestä kehykseen, jotta samat kohdat saadaan seurattua. Harvan optisen virtauksen toteutuksia on useita, kuten Lucas–Kanade–menetelmä, Horn–Schunck-menetelmä, Buxton-Buxton-menetelmä ja paljon muuta. Toteutuksessa käytetään Lucas-Kanade-menetelmää OpenCV: n kanssa, joka on avoimen lähdekoodin kirjasto tietokonenäköalgoritmeista.

ympäristösi määrittäminen

Jos sinulla ei ole jo OpenCV: tä asennettuna, avaa pääte ja aja:

pip install opencv-python

nyt, kloonaa tutorial repository ajamalla:

git clone https://github.com/chuanenlin/optical-flow.git

Seuraava, avaa sparse-starter.py tekstieditorilla. Kirjoitamme kaikki tämän Python-tiedoston koodit.

määrittelemällä OpenCV: n lukemaan videota ja asettamalla parametreja

Shi-Tomasi Corner Detector – valitsemalla jäljitettävät Pikselit

harvan optisen virtauksen toteuttamiseksi, seuraamme vain kuvapisteiden ominaisuusjoukon liikettä. Kuvien ominaisuudet ovat kiinnostavia kohteita, jotka esittävät runsaasti kuvan sisältötietoa. Tällaisia ominaisuuksia voivat olla esimerkiksi kuvan kohdat, jotka ovat invariantteja kääntämisen, mittakaavan, pyörimisen ja intensiteetin muutosten kuten kulmien suhteen.

Shi-Tomasi-Kulmatunnistin on hyvin samankaltainen kuin suosittu Harris-Kulmatunnistin, joka voidaan toteuttaa seuraavilla kolmella menetelmällä:

  1. määrittää ikkunat (pienet kuvapalikat) suurilla kaltevuuksilla (kuvan voimakkuuden vaihtelut) käännettynä sekä \(x\) että \(y\) suuntiin.
  2. jokaisesta ikkunasta lasketaan pisteet \(r\).
  3. \(r\) – arvosta riippuen jokainen ikkuna luokitellaan tasoksi, reunaksi tai kulmaksi.

Jos haluat tietää enemmän Harris Corner Detectorin vaiheittaisesta matemaattisesta selityksestä, voit vapaasti käydä nämä diat läpi.

Shi ja Tomasi tekivät myöhemmin pienen mutta tehokkaan modifikaation Harris Corner Detectoriin papereissaan hyvät ominaisuudet jäljitettäviksi.

Shi-Tomasi suoriutuu paremmin kuin Harris. Source

muunnos on yhtälöön, jossa pisteet \(r\) lasketaan. Harris Corner Detectorissa pisteytysfunktio saadaan:

$$
\begin{array}{C}{R=\operatorname{det} M-k(\operatorname{trace} M)^{2}}\newline \
{\operatorname{det} m=\lambda_{1} \lambda_{2}}\lambda_ {1}+\lambda_{2}}\end{array}
$$

sen sijaan shi-Tomasi ehdotti pisteytysfunktiota seuraavasti:

$$
r=\min\Left (\lambda_{1},\lambda_{2} \right)
$$

mikä periaatteessa tarkoittaa, että jos\(r\) on suurempi kuin kynnys, se luokitellaan kulmaksi. Seuraavassa verrataan Harrisin (vasemmalla) ja Shi-Tomasin (oikealla) pisteytysfunktioita \(λ1-λ2\) avaruudessa.

Harrisin ja Shi-Tomasin pisteytysfunktioiden Vertailu λ1-λ2-avaruudessa. Source

Shi-Tomasille vain silloin, kun \(λ1\) ja \(λ2\) ylittävät minimikynnyksen \(λmin\), ikkuna luokitellaan kulmaksi.

OpenCV: n dokumentaatio Shi-Tomasin toteuttamisesta goodFeaturesToTrack() löytyy täältä.

tiettyjen kohteiden jäljittäminen

voi olla tilanteita, joissa haluat seurata vain tiettyä kohdetta (sanotaan tietyn henkilön jäljittämistä) tai yhtä esineluokkaa (kuten kaikki 2 wheeler-ajoneuvoa liikenteessä). Koodin voi helposti muokata seuraamaan haluamiensa kohteiden pikseleitä muuttamalla prev muuttuja.

Voit myös yhdistää objektien havaitsemisen tähän menetelmään arvioidaksesi vain Havaittujen rajauslaatikoiden pikselivirran. Näin voit seurata kaikkia tietyn tyypin/luokan esineitä videolla.

yksittäisen kohteen jäljittäminen optisen virtauksen avulla.

Lucas-Kanade: harva optinen virtaus

Lucas ja Kanade ehdottivat tehokasta tekniikkaa mielenkiintoisten piirteiden liikkeen arvioimiseksi vertaamalla kahta peräkkäistä ruutua paperissaan Iteratiiviseen Kuvan Rekisteröintitekniikkaan Stereonäköön. Lucas-Kanade-menetelmä toimii seuraavilla oletuksilla:

  1. kaksi peräkkäistä ruutua erotetaan toisistaan pienellä aikalisäyksellä (\(DT\)) siten, että objekteja ei siirretä merkittävästi (toisin sanoen menetelmä toimii parhaiten hitaasti liikkuvien kohteiden kanssa).
  2. kehys kuvaa ”luonnollista” kohtausta, jossa on kuvioituja esineitä, joissa näkyy sulavasti vaihtuvia harmaan sävyjä.

ensinnäkin voidaan näiden oletusten perusteella ottaa pieni 3×3-ikkuna (naapurusto) Shi-Tomasin havaitsemien piirteiden ympärille ja olettaa, että kaikilla yhdeksällä pisteellä on sama liike.

Lucas-Kanade: Optista virtausta arvioidaan mustille pikseleille

Tämä voidaan esittää muodossa

Lucas-Kanade: 9 pikselin intensiteettiä yhtälömuodossa

jossa \(q_1, q_2, …, q_n\) merkitsevät ikkunan sisällä olevia pikseleitä (esim. \(n\) = 9 3×3-ikkunassa) ja \(i_x(q_i)\), \(i_y(q_i)\) ja \(i_t(q_i)\) merkitsevät Kuvan \(I\) Osittaisderivaatat sijainnin \((x, y)\) suhteen ja aika \(t\), pikselille \(q_i\) tällä hetkellä.

Tämä on vain optinen Virtausyhtälö (jonka kuvasimme aiemmin) jokaiselle n-pikselille.

yhtälöiden joukko voidaan esittää seuraavassa matriisimuodossa, jossa \(Av = b\):

9 pikselin intensiteettiä matriisimuodossa

huomioi aiemmin (katso ”mikä on optinen virtaus?”jakso), jouduimme ratkaisemaan kaksi tuntematonta muuttujaa yhdellä yhtälöllä. Nyt edessä ottaa ratkaista kaksi tuntematonta (\(V_x\) ja \(V_y\)) yhdeksän yhtälöt, joka on ylimitoitettu.

toiseksi ylimitoitetun ongelman ratkaisemiseksi käytetään pienimmän neliösumman sopivuutta seuraavan kahden yhtälön-kahden-tuntemattoman ongelman saamiseksi:

Uusi optinen virtausyhtälö kahden yhtälön-kahden-tuntemattoman muodossa

missä \(VX = U = DX/DT\) merkitsee \(X\) liikettä ajan kuluessa ja \(vy = v = dy/DT\) merkitsee Y: n liikettä ajan kuluessa. Kahden muuttujan ratkaiseminen täydentää optisen virtauksen ongelman.

hevoset rannalla optinen virtaus
harvaa hevosten optinen virtaus rannalla. Source

pähkinänkuoressa tunnistamme joitakin mielenkiintoisia ominaisuuksia, joiden avulla voidaan seurata ja laskea iteratiivisesti näiden pisteiden optisia virtavektoreita. Lucas-Kanade-menetelmän omaksuminen toimii kuitenkin vain pienille liikkeille (alkuperäisestä oletuksestamme) ja epäonnistuu, kun on suuri liike. Siksi Lucas-Kanade-menetelmän OpenCV-toteutus omaksuu pyramidit.

Pyramidimenetelmä laskee optisen virtauksen
Pyramidimenetelmä laskee optisen virtauksen eri resoluutioilla. Lähde

korkean tason näkymässä pienet liikkeet jäävät pyramidia ylös noustessa vähemmälle huomiolle ja suuret liikkeet pienenevät pieniksi liikkeiksi-laskemme optisen virtauksen yhdessä mittakaavan kanssa. Kattava matemaattinen selitys OpenCV: n toteutuksesta löytyy Bouguetin muistiinpanoista ja dokumentaatio OpenCV: n Lucas-Kanade-menetelmän toteuttamisesta calcOpticalFlowPyrLK() löytyy täältä.

visualisointi

ja se siitä! Avaa pääte ja aja

python sparse-starter.py

testaamaan harvan optisen virtauksen toteutusta. 👏

Jos jokin koodi on jäänyt huomaamatta, koko koodi löytyy sparse-solution.py.

toteutettaessa tiheää optista virtausta

olemme aiemmin laskeneet optisen virtauksen harvalle ominaisuusjoukolle pikseleitä. Tiheä optinen virtaus yrittää laskea optisen virtauksen vektoria jokaisen kehyksen jokaiselle pikselille. Vaikka tällainen laskenta voi olla hitaampaa, se antaa tarkemman tuloksen ja tiheämmän tuloksen, joka sopii sovelluksiin, kuten oppimisen rakenne liikkeestä ja videon segmentointi. Tiheän optisen virtauksen toteutuksia on erilaisia. Käytämme Farneback-menetelmää, joka on yksi suosituimmista toteutuksista, ja toteutuksessa käytetään OpenCV: tä, avoimen lähdekoodin tietokonenäköalgoritmikirjastoa.

ympäristösi määrittäminen

Jos et ole jo tehnyt niin, noudata vaihetta 1, jossa harvan optisen virtauksen käyttöönotto ympäristösi perustamiseksi tapahtuu.

seuraavaksi auki dense-starter.py tekstieditorilla. Kirjoitamme kaikki tämän Python-tiedoston koodit.

OpenCV: n määrittäminen lukemaan videota

Farneback Optical Flow

Gunnar Farneback ehdotti tehokasta tekniikkaa mielenkiintoisten ominaisuuksien liikkeen arvioimiseksi vertaamalla kahta peräkkäistä kehystä paperissaan kahden kehyksen liike-estimointi polynomin laajenemisen perusteella.

ensinnäkin menetelmä approksimoi kuvakehysten ikkunoita (Katso Lucas Kanaden jakso harvojen optisten virtausten toteutuksesta tarkempia tietoja) nelikulmaisten polynomien avulla polynomien laajennusmuunnoksen avulla. Toiseksi, tarkkailemalla, miten polynomi muuttuu käännöksessä (liikkeessä), määritellään menetelmä, jolla voidaan arvioida siirtymäkenttiä polynomin laajenemiskertoimista. Sarjan tarkennusten jälkeen lasketaan tiheä optinen virtaus. Farneback n paperi on melko tiivis ja suoraviivainen seurata, joten suosittelen käy läpi paperin, jos haluat enemmän ymmärrystä sen matemaattinen johtaminen.

kolmen eri suuntiin kävelevän jalankulkijan tiheä optinen virtaus. Source

OpenCV: n toteutuksessa se laskee optisen virtauksen suuruuden ja suunnan 2-kanavaisesta virtavektoriryhmästä \((DX/dt, dy / dt)\), optisen virtauksen ongelmasta. Sitten se visualisoi kulman (suunta) virtauksen hue ja etäisyys (suuruus) virtauksen arvo HSV väri esitys. HSV: n vahvuus on aina maksimissaan 255 optimaalisen näkyvyyden saavuttamiseksi. OpenCV: n dokumentaatio Farneback-menetelmän käyttöönotosta calcOpticalFlowFarneback() löytyy täältä.

visualisointi

ja se siitä! Avaa pääte ja aja

python dense-starter.py

testataksesi tiheän optisen virtauksen toteutusta. 👏

Jos jokin koodi on jäänyt huomaamatta, koko koodi löytyy dense-solution.py.

optinen virtaus käyttäen Syväoppimista

vaikka optisen virtauksen ongelma on historiallisesti ollut optimointiongelma, viimeaikaiset lähestymistavat syväoppimisen avulla ovat osoittaneet vaikuttavia tuloksia. Yleensä tällaiset lähestymistavat edellyttävät optisen virtauksen (värikoodattu kuva) ulostulona kahta videokuvaa, jotka voidaan ilmaista:

Generation equation of optical flow computed with a deep learning approach.
Syväoppimallin Tuotos: värikoodattu kuva; väri koodaa pikselin suunnan, kun taas voimakkuus kertoo niiden nopeuden.

missä \(u\) on liike \(x\) suunnassa, \(v\) on liike \(y\) suunnassa ja \(f\) on neuroverkko, joka ottaa kaksi peräkkäistä kehystä \(i_{T-1}\) (frame at time = \(t-1)\) ja \(I_t\) (frame at time = \(t)\) syötteenä.

Architecture of FlowNetCorr, a convolutionary neural network for end-to-end learning of optical flow. Source

optisen virtauksen laskenta syvien neuroverkkojen avulla vaatii suuria määriä harjoitustietoa, jota on erityisen vaikea saada. Tämä johtuu siitä, että videomateriaalin merkitseminen optiseen virtaukseen vaatii kuvan jokaisen pisteen tarkan liikkeen tarkkaa selvittämistä subpixel-tarkkuudella. Käsitelläkseen koulutustietojen merkintää tutkijat käyttivät tietokonegrafiikkaa simuloidakseen massiivisia realistisia maailmoja. Koska maailmat syntyvät opetuksesta, tunnetaan jokaisen kuvan pisteen liike videosekvenssissä. Joitakin esimerkkejä tällaisista ovat mpi-Sintel, avoimen lähdekoodin CGI-elokuva, jossa Optiset virtausmerkinnät on tehty eri sekvensseille, ja Flying Chairs, monien tuolien datajoukko, joka lentää satunnaisten taustojen yli myös optisella virtausmerkinnällä.

synteettisesti tuotettua tietoa optisten Virtausmallien harjoitteluun – MPI-Sintel-aineisto. Lähde
synteettisesti tuotettua tietoa optisten Virtausmallien harjoitteluun – Flying Chairs-tietokokonaisuus. Source

optisten virtausongelmien ratkaiseminen syväoppimisen avulla on tällä hetkellä erittäin kuuma aihe, sillä Flownetin, Spynetin, PWC-Net: n ja muiden muunnokset päihittävät toisensa eri vertailuarvoilla.

optinen Virtaussovellus: semanttinen segmentointi

optinen virtauskenttä on valtava informaatiokaivos havaitulle kohtaukselle. Optisen virtauksen tarkkojen määritystekniikoiden parantuessa on mielenkiintoista nähdä optisen virtauksen sovelluksia Junctionissa useiden muiden perustavanlaatuisten tietokoneen visioiden kanssa. Esimerkiksi semanttisen segmentoinnin tehtävänä on jakaa kuva sarjoihin alueita, jotka vastaavat ainutlaatuisia objektiluokkia, mutta tiiviisti sijoitetut objektit, joilla on identtiset kuviot, ovat usein vaikeita yksittäisille kehyssegmentointitekniikoille. Jos kappaleet kuitenkin sijoitetaan erikseen, kohteiden erillisistä liikkeistä voi olla suurta hyötyä silloin, kun tiheän optisen virtauskentän epäjatkuvuus vastaa kappaleiden välisiä rajoja.

optisesta virrasta syntyvä semanttinen segmentointi.
optisesta virrasta tuotettu semanttinen segmentointi. Source

optinen Virtaussovellus: Object Detection & Tracking

toinen lupaava optisen virtauksen sovellus voi olla objektin havaitseminen ja seuranta tai korkean tason muodossa kohti reaaliaikaisten ajoneuvojen seuranta-ja liikenneanalyysijärjestelmien rakentamista. Koska harva optinen virtaus hyödyntää kiinnostavien kohteiden seurantaa, tällaiset reaaliaikaiset järjestelmät voidaan suorittaa ominaisuuteen perustuvilla optisilla virtaustekniikoilla joko kiinteästä kamerasta tai ajoneuvoihin kiinnitetyistä kameroista.

optisella virtauksella varustettujen ajoneuvojen reaaliaikainen seuranta. Source
optista virtausta voidaan käyttää ajoneuvon nopeuksien ennustamiseen. Lähde

johtopäätös

pohjimmiltaan Optiset virtavektorit toimivat syötteenä lukemattomiin korkeamman tason tehtäviin, jotka vaativat videopätkien kohtausymmärrystä, kun taas nämä tehtävät voivat edelleen toimia rakennuspalikkina vielä monimutkaisemmille järjestelmille, kuten kasvojen ilmeiden analysoinnille, autonomiselle ajoneuvonavigoinnille ja paljon muulle. Optisen virtauksen uusia sovelluksia, joita ei ole vielä löydetty, rajoittaa vain sen suunnittelijoiden kekseliäisyys.

laiska koodaamaan, Etkö halua tuhlata GPU: Hon? Pään yli Nanonets ja rakentaa tietokoneen visio malleja ilmaiseksi!

Vastaa

Sähköpostiosoitettasi ei julkaista.