Jelenlegi hely

Javasolt kutatási – ösztöndíjas témák egyetemi hallgatóknak

Témacsoport:  C++ / DevOps / Sensor Fusion / Embedded

Kapcsolat: Takács Árpád, arpad.2.takacs@continental.com

  1. Kvantálási hiba terjedése konvolúciós neurális hálózatokban

A gépi tanulás (Machine Learning) alkalmazásoknak két fő életciklusa van: a tanulási fázis, mely során a neurális hálózatot egy adott feladat megoldására optimalizáljuk, hangoljuk, illetve az inferencia, amikor a betanult hálót a probléma megoldására felhasználjuk. A gépi tanulás tipikusan nagy számítási teljesítménnyel rendelkező, videókártyákkal felszerelt számítógépeken történik, míg az inferenciára bizonyos esetekben alacsony fogyasztású, olcsó, kis számítási teljesítményű beágyazott rendszereken kerül sor. Ezek a rendszerek jellemzően speciális neurális háló gyorsító modulokkal vannak felszerelve.

Míg a neurális hálók tanítása legtöbbször lebegőpontos számítással történik, a speciális beágyazott gyorsítómagok gyakran csak fixpontos számábrázolásra képesek. Ennek következtében a betanítás és az inferencia fázisa között a neurális háló paraméterein kvantálást alkalmazunk. A kvantálás során bevezetett hiba függ a fixpontos számábrázolás és a gyorsító paramétereitől. A hallgató feladata, hogy megvizsgálja a konvolúciós neurális hálóban terjedő hiba jellegét különböző hálózati architektúrákra, modellt állítson fel a hiba terjedésére, illetve, hogy stratégiát készítsen a fixpontos számábrázolás és a gyorsító paramétereinek megválasztására.

A feladat során a hallgató betekintést nyer a konvolúciós neurális hálózatok és az azok végrehajtására dedikált gyorsítóeszközök működésébe és konfigurálási lehetőségeibe, illetve tapasztalatot szerez gépi tanulás keretrendszerek használatában.

A feladat megoldásához a hallgató a Continental AI Development Center munkatársaitól kap segítséget.

  1. Neurális háló architektúrára optimalizálható hardveres gyorsító tervezése

A gépi tanulás (Machine Learning) alkalmazásoknak két fő életciklusa van: a tanulási fázis, mely során a neurális hálózatot egy adott feladat megoldására optimalizáljuk, hangoljuk, illetve az inferencia, amikor a betanult hálót a probléma megoldására felhasználjuk. A gépi tanulás tipikusan nagy számítási teljesítménnyel rendelkező, videókártyákkal felszerelt számítógépeken történik, míg az inferenciára bizonyos esetekben alacsony fogyasztású, olcsó, kis számításteljesítményű beágyazott rendszereken kerül sor. Ezek a rendszerek jellemzően speciális neurális háló gyorsító modulokkal vannak felszerelve.

Különböző gyorsítók különböző hardverarchitektúrával, ezáltal pedig különböző karakterisztikákkal és teljesítménnyel rendelkeznek. A neurális hálózat bizonyos rétegjeit, részműveleteit különböző hatékonysággal képesek végrehajtani, ezáltal különböző hálózati architektúrákra más-más végrehajtó egység lehet az ideális választás.

Beágyazott eszközökön inferáló neurális hálók tervezésekor figyelembe kell venni a hardver adottságait, annak érdekében, hogy minél optimálisabb inferencia-időt érhessünk el (pl. konvoluciónál: optimális kernel méret, optimális csatornaszám). A feladat olyan FPGA-n futó inferencia gyorsító hardver tervezése, mely szintézis során felhasznált paraméterek segítségével adott neurális háló specifikusan optimalizálható.

A feladat megoldásához a hallgató a Continental AI Development Center munkatársaitól kap segítséget

  1. Neurális hálózatok végrehajtásának kiértékelése Google Edge TPU alapú rendszeren

A gépi tanulás (Machine Learning) alkalmazásoknak két fő életciklusa van: a tanulási fázis, mely során a neurális hálózatot egy adott feladat megoldására optimalizáljuk, hangoljuk, illetve az inferencia, amikor a betanult hálót a probléma megoldására felhasználjuk. A gépi tanulás tipikusan nagy számítási teljesítménnyel rendelkező, videókártyákkal felszerelt számítógépeken történik, míg az inferenciára bizonyos esetekben alacsony fogyasztású, olcsó, kis számítási teljesítményű beágyazott rendszereken kerül sor. Ezek a rendszerek jellemzően speciális neurális háló gyorsító modulokkal vannak felszerelve.

Különböző gyorsítók különböző hardverarchitektúrával, ezáltal pedig különböző karakterisztikákkal és teljesítménnyel rendelkeznek. A neurális hálózat bizonyos rétegeit, részműveleteit különböző hatékonysággal képesek végrehajtani, ezáltal különböző hálózati architektúrákra más-más végrehajtó egység lehet az ideális választás.

A hallgató feladata, hogy megvizsgálja egy speciális gyorsító eszköz, a Google Edge TPU (Tensor Processing Unit) számítási képességeit konvolúciós neurális hálózatok széles skálájára. A mérési eredményeket felhasználva a hallgató javaslatokat tesz a neurális hálók architektúrájára vonatkozólag a TPU-n történő végrehajtás hatékonyságának optimalizálása érdekében. A feladat részeként a hallgató megismerkedik a konvolúciós neurális hálózatok jellegzetességeivel, Google Edge TPU-val és a Tensorflow keretrendszerrel.

A feladat megoldásához a hallgató a Continental AI Development Center munkatársaitól kap segítséget.

Hivatkozások Google Edge TPU: https://cloud.google.com/edge-tpu/
Tensorflow lite: https://www.tensorflow.org/lite

 

  1. Simultaneous localization and mapping (SLAM) algoritmusok kvantitatív összehasonlítása

A simultaneous localization and mapping (SLAM) algoritumusokat gyakran alkalmazunk olyan robotikai rendszerekben, ahol a rendszerre szerelt érzékelők adatait használjuk fel egy lokális térkép automatizált készítésére, és ezzel egyidőben a robot térbeli elhelyezkedésének meghatározására. A SLAM módszerek gyakran iteratív számításokon alapszanak, melyek hagyományos statisztikai módszerekkel (Kálmán-szűrő, particle filter) támogatva topológiai térképek készítésével és a kinematikai kényszerek ismeretében skálázható megoldásokat kínálnak a helymeghatározáshoz az autonóm járművek fejlesztésében is.

A gyakorlatban a helymeghatározás (lokalizáció) jóságát olyan kvantitatív tényezőkkel jellemezzük, mint az aktuális pozíciómérés abszolút hibája, a hurokzárás (loop closure) relatív hibája, offset és a szükséges számítási teljesítmény.

A hallgató feladata, hogy végezzen irodalomkutatást az elérhető SLAM algoritmusokról, készítsen átfogó kvalitatív összehasonlítást előnyeikről és hátrányaikról. Ezt követően az elérhető módszerek között (real-time SLAM: monocular és RGB-D SLAM, stereo SLAM) végezzen kvantitatív összehasonlítást egy-egy valós autonóm közlekedési helyzet adathalmazán.

A munkához javasolt a publikusan elérhető adathalmazok használata, az implementációhoz pedig felhasználhatóak a rendelkezésre álló OpenCV (C++/Python) és egyéb képfeldolgozást segítő könyvtárak.

A feladat megoldásához a hallgató a Continental AI Development Center munkatársaitól kap segítséget.

  1. Többszereplős valós idejű asszociációs és követési algoritmusok implementációja

Az autonóm közlekedési rendszerek egyidőben hivatottak a környezet (pseudo-)statikus és dinamikus objektumainak felismerésére is időbeli követésére. A környezet digitális 3D rekonstrukciója során a rendszer szenzorfúziós algoritmusok segítségével absztrakciót végez, és egy modelltérbe képzi le a közlekedés résztvevőiről gyűjtött információt, így például a mellettünk elhaladó autók sebességét, méretét, pozícióját, orientációját és várható mozgásállapotát.

A valós közlekedési helyzetekben egyidejűleg számos közlekedési résztvevő mozgásállapotát szükséges meghatároznunk, gyakran egymást keresztező útvonalakon, miközben a mérési adatok jelentős zajjal terheltek. Ebben a környezetben számos hipotézist kell megvizsgálnunk, és a mozgásállapotok, az érzékelőkből érkező zajmodell és a becsült kovarianciaértékek mentén valós időben absztrakt képet kell alkotnunk a környezetünkről.

A hallgató feladata egy olyan többszereplős valós idejű asszociációs algoritmus implementációja és kvantitatív kiértékelése, mely egy valós közlekedési szituációból származó adathalmazon képes egyszerre több objektum időbeli követésére, az egymást követő időpontokban azok asszociációjára, és a zajjal terhelt mérési adatok szűrésére. A javasolt algoritmusok:

  • Joint Probabilistic Data Association Filter
  • Multiple Hypothesis Filter

A munkához javasolt a publikusan elérhető adathalmazok használata, a kiértékeléshez pedig az innen gyűjtött referenciaadatok felhasználása. A kvantitatív analízishez szükséges a MOTA és MOTP (Multiple Object Tracking Accuracy & Precision) metrikák implementációja és alkalmazása.

A feladat megoldásához a hallgató a Continental AI Development Center munkatársaitól kap segítséget.

  1. Objektumok felismerése radar adatpontok felhasználásával

Az autóiparban évtizedek óta alkalmaznak olyan autóipari radar eszközöket, melyek rádiófrekvenciás jeleket kibocsátva és azokat érzékelve alkalmasak a jármű előtt haladó objektumok sebességének és távolságának mérésére. Ezt az információt később olyan, a mai autókban már szériafelszereltségként kapható vezetéstámogató funkciók használják fel, mint az adatpív sebességtartó automatika, a vészfékező asszisztens vagy a holttérfigyelő rendszerek.

Az autonóm és vezetéstámogató rendszerek a radar eszközökből érkező jeleket rendszerint más modalitású érzékelők jeleivel asszociálják, fúzionálják, hogy ezáltal redundáns információhoz jussanak a környezet pillanatnyi állapotáról. A radar interfészen érkező jelek nagy spektrumot fognak át, egészen az egyes vevő antennák által érzékelt, modulált jelektől a már előfeldolgozott, objektumokká csoportosított jelekig. Az objektumok felismerésének folyamata többlépcsős, mely alapjaiban határozza meg ezeknek az eszközöknek a felhasználását későbbi vezetéstámogató funkciókban.

A hallgató feladata egy olyan algoritmus implementációja és kvantitatív kiértékelése, mely a lehető legalacsonyabb szintű, publikusan elérhető radar adathalmazok felhasználásával, a pontok csoportosításával objektum szintű kimenetet továbbít. A feladat része az adatpontok beolvasása, feldolgozása, csoportosítása és zajszűrés alkalmazása egy időben és térben követett objektumlistában.

A feladat megoldásához a hallgató a Continental AI Development Center munkatársaitól kap segítséget.

  1. Provision and orchestrate Linux systems via Python scripts generated from desired state

We want to describe the desired state of our servers in a declarative way, with a data structure. The desired state may contain requirements like the following:

  • all servers should have the `ntp` package installed on them and configured to use time servers A and B
  • servers which belong to the `user` group shall have packages P1, P2 and P3 installed on them
  • servers S1 and S2 should run a MySQL cluster in master/slave setup with automatic backup

We should have a function which takes this desired state (the data structure) and using the information contained within generates a set of Python scripts:

  1. server-specific scripts (one per server referred by the state)
  2. a single orchestrator script

When we execute the orchestrator script, it would open simultaneous SSH connections to the servers, run the Python interpreter on the other side and pipe the corresponding server-specific script to standard input.

The server-specific scripts would run and execute exactly those parts of the provisioning/orchestration task which belongs to the server.

They should be able to open network sockets, connect to each other over these sockets and exchange status information, thereby coordinating processes which need several steps carried out on separate servers in a well-defined order.

Each server-specific script should contain logic which reports back status to the orchestrator script. The orchestrator script should produce a detailed log of what happened during the execution.

 

  1. Custom template for ansible-cmdb which generates a data-driven React app

Ansible CMDB (https://github.com/fboender/ansible-cmdb) takes the output of Ansible's fact gathering and converts it into a static HTML overview page containing system configuration information.

The default template is not too user friendly, if we want to display a lot of columns, it becomes unwieldy to navigate.

Create an Ansible CMDB custom template which consists of a React single-page application. The facts gathered by Ansible should be injected into the template in the form of a JSON data structure. When the app starts as part of the page load, it should read the data structure and render its UI in a data-driven way so that the user gets a nice overview of all servers, their state, configuration, etc.