Ko apstrādā uz notikumiem balstīta redzes programmatūra?
Notikumu kamera ziņo par spilgtuma izmaiņām, nevis nodrošina parasto video kadru katrā intervālā. Dekodēts notikums parasti identificē pikseli, polaritāti un laikspiedolu. Jūsu lietojumprogrammai ir jāsaglabā šo lauku nozīme, veicot iegūšanu, filtrēšanu, ierakstīšanu un secinājumus. The salīdzinājums, kas balstīts uz notikumiem un kadriem paskaidro, kad šis datu modelis ir noderīgs.
Dizainā izšķir trīs formātus: sensora vai transporta kodējumu, programmatūras izmantoto dekodēto notikumu attēlojumu un algoritmam nodoto attēlojumu. Fails, kurā ir neapstrādātas sensoru paketes, dekodētu notikumu masīvs un uzkrāts attēls, kalpo dažādiem mērķiem. Konvertēšana starp tām var mainīt atmiņas izmantošanu, apstrādes izmaksas un pakārtoto pieejamo laika informāciju.
| Pārstāvība | Noderīgs priekš | Integrācijas jautājums |
|---|---|---|
| Neapstrādātas paketes vai pārdevēja ieraksts | Iegūšanas un dekodēšanas uzvedības reproducēšana | Vai izvietotais dekodētājs var nolasīt tieši šo ierīces un formāta versiju? |
| Atšifrēti notikumi | Filtrēšana, laika analīze un notikumu vietējie algoritmi | Kas ir laikspiedola vienība, pulksteņa domēns un koordinātu vienošanās? |
| Laika virsmas vai vokseļiem līdzīgi tenzori | Algoritmi, kuriem nepieciešams strukturēts laika attēlojums | Kuri vēstures, grupēšanas un normalizācijas iestatījumi ir jāatveido? |
| Uzkrātie notikumu attēli | Vizualizācija vai saderīga uz attēlu balstīta apstrādes stadija | Cik lielu kavēšanos un informācijas zudumu rada uzkrāšanas logs? |
Kā novērtēt notikumu kameru SDK
Sāciet ar precīzu sensoru, kameras programmaparatūru un resursdatora platformu. Darbvirsmas demonstrācija nenodrošina atbalstu iegultam Linux attēlam, ARM procesoram vai jūsu ražošanas licencei. Jautājiet piegādātājam par atbalstītajām operētājsistēmām, CPU arhitektūrām, pārdales nosacījumiem un kameras saskarnes prasībām. Pirms nesēja shēmas plates pievienošanas skaitļošanas modulim, pārbaudiet lietojumprogrammu paredzētajā platformā.
- Iegūšana: ierīces atklāšana, konfigurēšana, dekodēšana un kļūdu ziņošana.
- Laiks: laikspiedola izcelsme, apgāšanās apstrāde, ārējie aktivizētāji un vairāku ierīču izlīdzināšana.
- Reproducējamība: ierakstus, konfigurācijas eksportu un identificētu programmatūras versiju.
- Izvietošana: bezgalvu darbība, atbalstītie binārie faili, restartēšanas darbība un licences noteikumi.
- Novērojamība: notikumu skaits, rindu dziļums, izlaistie dati un resursdatora resursu izmantošana.
Izveidojiet cauruļvadu ar skaidrām laika robežām
Turiet iegūšanu atsevišķi no dārgas vizualizācijas, diska ierakstīšanas un modeļa secinājumiem. Pretējā gadījumā lēns patērētājs var aizkavēt jaunus datus, pirms algoritms pat sāk darboties. Definējiet ierobežotu rindu un skaidru pārslodzes politiku. Vecākā loga nomešana, interesējošā reģiona samazināšana un apstāšanās ar kļūdu rada dažādas sekas; izvēlieties lietojumprogrammai piemēroto uzvedību un pierakstiet, kad tā notiek.
Izmantojiet sensoru laikspiedolus, lai aprakstītu novērojumu laiku, un monotonu resursdatora pulksteni, lai izmērītu apstrādes ilgumu. Atņemot laikspiedolus no nesaistītiem pulksteņiem, netiek iegūts derīgs latentums no gala līdz galam. Ja kamera ir jāapvieno ar IMU vai parasto kameru, izveidojiet pulksteņa attiecību un kalibrēšanas procesu, kas aprakstīts mūsu sensoru saplūšanas sinhronizācijas rokasgrāmata.
Neliels ieraksta-pārbaudes piemērs
Nākamajā Python piemērā tiek uzskaitīti atšifrētie notikumi atbalstītajā ierakstā un tiek ziņots par to laikspiedolu diapazonu. Tajā tiek izmantota dokumentētā Metavision straumēšana API, un ir nepieciešama saderīga SDK instalēšana un ierakstīšana. Tas ir pārbaudes piemērs, nevis ALVEXIS kameras etalons vai detektors.
import argparse
from metavision_sdk_stream import Camera, CameraStreamSlicer
parser = argparse.ArgumentParser()
parser.add_argument("recording")
args = parser.parse_args()
source = Camera.from_file(args.recording)
count, first_us, last_us = 0, None, None
for batch in CameraStreamSlicer(source.move()):
events = batch.events
if events.size:
start = int(events["t"][0])
end = int(events["t"][-1])
first_us = start if first_us is None else min(first_us, start)
last_us = end if last_us is None else max(last_us, end)
count += int(events.size)
span_s = 0.0 if first_us is None else (last_us - first_us) / 1_000_000
print({"events": count, "event_timestamp_span_s": span_s})
Laikspiedols aptver no pirmā līdz pēdējam novērotajam notikumam; tas nemēra faila ilgumu, iegūšanas aizkavi vai apstrādes caurlaidspēju. Tukšie periodi un pulksteņa atiestatīšana ražošanā ir jāapstrādā atsevišķi. Saglabājiet ierīces konfigurāciju un ierakstīšanas metadatus kopā ar failu, lai otrs inženieris varētu reproducēt interpretāciju.
Apstipriniet klusas ainas, aizņemtas ainas un neveiksmju atkopšanu
Pārbaudiet stacionāru ainu, reprezentatīvu kustību un apzināti prasīgu ainu. Mirgošana, kameras vibrācija un teksturētas kustības var radīt ļoti atšķirīgu notikumu ātrumu. Pierakstiet gan tipisku uzvedību, gan sliktāko gadījumu, ko novērojāt. Atkārtojiet, kad ir aktīva krātuve un sakari, jo šīs darba slodzes sacenšas par atmiņu un CPU laiku.
| Pārbaude | Ieraksts | Lēmums, ko tas atbalsta |
|---|---|---|
| Atkārtoti atskaņojiet to pašu ierakstu | Konfigurācija, izvades atšķirības un apstrādes ilgums | Vai programmatūras izmaiņas var novērtēt reproducējami? |
| Palieliniet ainas aktivitāti | Rindas dziļums, notikumu zudums un izvades vecums | Vai sistēma joprojām ir izmantojama maksimālās slodzes laikā? |
| Mainiet apstrādes logu | Lietojuma precizitāte un sensora izvades aizkave | Kurš laika/detaļu kompromiss atbilst prasībai? |
| Atvienojiet un atkārtoti pievienojiet ierīci | Atkopšanas laiks, pulksteņa atiestatīšana un ierakstīšanas nepārtrauktība | Vai izvietotais pakalpojums var atkopties paredzami? |
Kad algoritms izmanto neironu tīklu, pirms akseleratora izvēles pārbaudiet iegūto tensoru un atbalstītos operatorus. Notikuma kamerai automātiski nav nepieciešams NPU, un NPU automātiski nepieņem notikumu straumi. Mūsu FPGA, NPU un MPU arhitektūras ceļvedis atdala iegūšanas, pirmapstrādes, secinājumu un lietojumprogrammu pakalpojumus.
Jautājumi pirms programmatūras steka izvēles
Vai es varu izmantot parastu datorredzes modeli?
Tikai pēc saderīgas ievades attēlojuma definēšanas un tā uzvedības apstiprināšanas. Notikumu uzkrāšana attēlos var ļaut atkārtoti izmantot attēlu apstrādes stadiju, bet maina datu sadalījumu un pievieno laika logu. Novērtējiet visu pieteikumu, pamatojoties uz reprezentatīviem datiem.
Vai strādājoša klēpjdatora demonstrācija pierāda iegulto saderību?
Nē. Apstipriniet faktiskās mērķa platformas centrālā procesora arhitektūru, operētājsistēmu, sensora saskarni, draiveri, SDK licenci un ilgtspējīgu resursu izmantošanu.
Kas man jānosūta uz integrācijas diskusiju?
Nosūtiet kameras vai sensora atsauci, ieraksta paraugu, paredzēto izvadi, pieņemamo aizkavi, resursdatora platformu, saskarni un izvietošanas vidi. Šie ieguldījumi padara diskusiju pietiekami konkrētu, lai identificētu pirmos integrācijas riskus.
Neiromorfā redze datorredzes cauruļvadā
Notikumu kameras bieži tiek apspriestas neiromorfā redzēšanā, jo to izvades ieraksti mainās atsevišķos pikseļos, nevis fiksētā pilnu attēlu secībā. Šis datu attēlojums automātiski nenodrošina objekta noteikšanu vai neironu tīkla rezultātu. Programmatūrai joprojām ir nepieciešams definēts uzdevums, saderīgs algoritms un izmērāmi pieņemšanas kritēriji.
Integrējot ar uz kadru orientētiem datora redzes rīkiem, notikumu straumi var pārveidot par laika loga attēlu vai citu atveidojumu. Saglabājiet sākotnējos laikspiedolus, ja uzdevums ir atkarīgs no precīzas laika informācijas. Novērtējiet visu konversijas un apstrādes cauruļvadu; pievilcīgs rekonstruēts attēls vien nenosaka galīgā lietojuma precizitāti vai latentumu.
Plānojiet laiku pirms sensoru datu saplūšanas
Tehniskās atsauces
- Prophesee: darba sākšana ar Python straumēšanu API
- Prophesee: notikumu lasīšana no kamerām un failiem
- Gallego et al.: Uz notikumiem balstīta vīzija — aptauja
Pārdevēju piemēri apraksta viņu pašu atbalstīto ekosistēmu. Apstipriniet izvēlētās ierīces un izvietošanas saderību un licencēšanu.
