MAVA agile architecture — Q-TON 2.0

Na konci listopadu 2017 proběhl hackathon Q-TON 2.0 na téma Smart City. V rámci tohoto hackathonu jsme vytvořili tým ve složení Radim Štěpaník (Já) @kinapets, Vojta Homolka a Olda Kruchňa @oldrichkruchna. Měli jsme čas od pátečního večera cca od 19:00 do nedělního odpoledne, přesněji řečeno 48 hodin na to přinést světu nové inovační řešení, které “změní svět”.

logo

V rámci hackathonu jsme vytvořili nový startup MAVA — agile architecture. MAVA je technologická firma, tool pro architektonické studio 4.0. Přinášíme nové pohledy na to, jak vytvářet velké prostory jako například nemocnice, školy a kancelářské prostory — budovy za pomocí moderních přístupů jako je machine learning, big data a samozřejmě jak využívat 3D vizualizační nástroje, nejlépe s použitím virtuální reality. Chceme navrhovat prostory tak, aby respektovaly stávající stavební normy dané zákonem a zároveň predikovali nejlepší rozložení a způsob využití prostor tak, abychom minimalizovali náklady spojené s provozem zařízení a zároveň maximalizovali spokojenost lidí, kteří daný objekt používají.

Zavádíme pojem agile architecture. Chceme aby si investoři uvědomili, že návrhem a výstavbou proces tvorby nekončí, ale začíná. Že by se používání prostoru mělo neustále monitorovat a reflektovat například i růst organizace, jeho personální složení atd.

Nicméně rozhodně nechceme sebrat architektům práci. Jsme především tool pro architektonické studio. Chceme, aby s naším nástrojem pracovali ti nejlepší architekti, kteří vidí potenciál ve využití sběru dat a nespoléhají se pouze na své zkušenosti a znalosti. Chceme, aby s námi pracovali architekti, kteří chtějí své návrhy ověřovat a testovat své myšlenky. K tomu by jim měl pomoci jeden z našich produktů MAVA — Cloud. Jedná se o nástroj, který architektovi pomáhá vytvářet prostor.

Co obsahuje MAVA — Cloud:

  • respektování a kontrola současných stavebních norem
  • machine learning — předchozí úspěšné návrhy úspěšných architektonických studií
  • machine learning — respektování fyzikálních veličin jako světelnost v objektu, teplota, proudění vzduchu, umístění klimatizací atd.
  • datasety pro aktuální problémy — některé datasety nemusejí nutně sloužit pro všechny budovy, ale mohou být připojeny pro konkrétní typ budovy, například u nemocnice budeme hledat rychlost pohybu sanitky uvnitř areálu
  • sběr z IOT senzorů — pro průběžné vyhodnocování — notifikace o problémových místech atd.

Jako technologická firma nabízíme celou metodiku — jakým způsobem vytvářet Smart City řešení. Naše hlavní business aktivity se dělí na dvě základní části. Vytváříme jednak nástroj pro architektonické studio, zároveň jsme také konzultačním studiem, které nabízí celou naší metodologii a přístup ostatním stejně nakloněným architektům a studiím. Celý MAVA cloud je přístupný ověřeným partnerským subjektům.


Toto vše jsme samozřejmě během hackathonu vytvořit nestihli. Nicméně jsme chtěli ukázat, jaký obrovský nevyužitý prostor v oblasti návrhu veřejných prostor v současné době existuje a jaké obrovské finanční úspory by mohl machine learning v tomto odvětví přinést.

Právě proto jsme vytvořili Mavu, firmu, která představuje nový směr, jakým by se mohla současná architektura vydat. Celou myšlenku jsme v rámci hackathonu chtěli demonstrovat prostřednictvím našeho technologického prototypu, který by měl představovat možné využití Mavy.

Chtěli jsme zjistit, zda dokážeme během 48 hodinového hackathonu naučit naši aplikaci umisťovat předměty do libovolné místnosti a to vše vizualizovat ve virtuální realitě. V zásadě náš prototyp měl dvě části — nauč se a zobraz.

Nauč se

Nejdříve jsme hledali možnosti, jakým způsobem můžeme postavit algoritmus, který bude schopen logicky umisťovat předměty do místnosti. I proto, že jsme si chtěli vyzkoušet technologie kolem machine learningu, zvolili jsme si jako ústřední technologii, na které budeme stavět, neuronové sítě.

Je třeba říct, že nikdo z nás není specialista ani na neuronové sítě ani na machine learning, takže kromě základního vysokoškolského kurzu machine learningu jsme začínali úplně na zelené louce. Také proto naše první pokusy, jak vystavět neurovnou síť, skončili dost tragicky. V podstatě prvotní představa ”jak to bude fungovat” byla jednoduchá. Budeme reprezentovat místnost jako matici, kde každé číslo matice představuje typ předmětu, který se na daném místě vyskytuje. Asi nejjednodušší to bude ukázat na příkladu.

1 1 1 1 1 1

1 0 0 0 0 3

1 0 4 4 0 2

1 0 0 0 0 1

1 1 1 1 1 1

Matice představuje vlastně rozřezanou místnost na malé čtverce zhruba o velikosti 0.5 m x 0.5 m. Každé číslo znamená typ předmětu, který se na daném místě vyskytuje. 1 znamená zeď, 2 znamená dveře, 3 znamená okno, 4 znamená stůl. Ve skutečnosti jsme umisťovali více předmětů.

Teď k první naší naivní představě. Určitě naleznete spostu materiálů na internetu, kde vám odborně vysvětlí, jak fungují neuronové sítě. V rámci rychlého vysvětlení pro naše potřeby:

Zdroj: https://en.wikipedia.org/wiki/Artificial_neural_network

V rychlosti a velmi zjednodušeně: existují vstupní neurony, které reprezentují zadání nějaké úlohy a její podrobný popis. A potom existují výstupní neurony, které se různě rozsvítí na základě vstupu. Mezi těmito dvěma vrstvami je ještě třetí, skrytá, ale nejdůležitější vrstva (může jich být i více). Ta v podstatě předurčuje to, jaké výstupní neurony se rozsvítí na základě daného vstupu. Každý tento neuron má určenou hodnotu dle toho, jakým způsobem ovlivňuje výsledek. Celé dohromady to funguje tak, že musíme mít dostatečné množství správných řešení, které stále dáváme do neuronové sítě a zkoušíme upravovat hodnoty na jednotlivých neuronech tak, aby byly výsledky co nelepší. Krásné vysvětlení + demo jednoduchého použití neuronové sítě je zde: https://github.com/harthur/brain.

Teď zpátky k našemu prvnímu špatnému pokusu. Řekli jsme si, že jako vstup budeme do neuronové sítě dávat tvar místnosti a jako výstup jsme čekali, že se “rozsvítí “ naše vysněná místnost. Naprosto naivní představa. Jak to totiž vypadalo? Na vstupu prakticky prázdný nebo stále velmi podobný vektor — pouze stěny, dveře a prázdný prostor a na výstupu jsme čekali logický výsledek.

Zjistili jsme především to, že jsme přistupovali k problému naprosto špatně. Naivně jsme očekávali od neuronové sítě, že je chytřejší. Každopádně bylo důležité si uvědomit, k čemu je neuronová síť vhodná především, a to jsou klasifikační úlohy.

V našem novém návrhu řešení jsme přistupovali k problému úplně jinak. Řekli jsme si, že pro každý umisťovaný předmět jako gauč, stůl, postel atd. existuje úplně jiná sada pravidel a vlastností, na základě které tyto předměty umisťujeme. Proto jsme pro každý jednotlivý předmět trénovali speciální neuronovou síť, kde vstupním vektorem byl popis každého místa místnosti jako feature vektor — vzdálenost od stěn, od dveří, oken, ostatních předmětů, světelnost atd. Výstupní neuron jsme měli jen jeden, který určoval buď 0 až 1 — na daném místě je vhodné / není vhodné předmět umístit.

Jak jsme si hráli s neuronovou sítí? Jednak jsme zkusili využít síť napsanou v node.js — synaptic https://github.com/cazala/synaptic (asi největší komunita a podpora v rámci node.js). Na webu synaptic je spousta hezkých příkladů. Náš příklad využití zde: https://github.com/kinapets/qton-neural/blob/master/index.ts. Nicméně nakonec jsme díky tomu, že jedním z partnerů hackathonu byl Microsoft, využili azure machine learning studio https://studio.azureml.net.

Musím říct, že ke spoustě věcí od Microsoftu přistupuji dosti s despectem. Ale tohle byla druhá věc (po Visual Studio Code) od MS, která je opravdu skvělá. Celou neuronovou síť včetně transformace vstupů a dalších věcí lze kompletně naklikat — nakreslit. Lze si také vyzkoušet několik datových sad, které jsou zde právě pro potřeby testování. Nakonec stačí do celého modelu přidat, že výsledek má být dostupný na API endpointu a to je celé. Takže jsme už udělali jen jednoduchý express.js proxy server, který našemu frontendu zprostředkovával komunikaci s tímto serverem.

Neuronovou síť jsme tedy naučili pomocí vytvořených datových sad, o které se postaral především Vojta na základě svých zkušeností architekta a reálných návrhů. Dokázali jsem ve výsledku neuronovou síť naučit to, že gauč je dobré dávat blízko ke stěně, že je dobré mít televizi před gaučem a třeba také pracovní stůl pod oknem. Možná se to zdá velmi jasné a přímočaré, nicméně u složitějších prostorů může být vlastností daleko více. V rámci hackathonu jsme neměli dostatečný prostor na získání potřebného množství datasetů pro další zajímavé souvislosti.

Zobraz

Takže díky naučeným neuronovým sítím, dokážeme říct u každého místa v místnosti s jakou pravděpodobností jsou vhodné pro daný předmět. Chtěli jsme ukázat možnost, jak to uživateli MAVA cloudu zobrazit. Zobrazení jsme naprogramovali pomocí knihovny aframe — https://aframe.io/. Na naši implementaci z programátorského hlediska nejsem hrdý, ale dost nás tížil čas. Nejvíce nám určitě zabralo automatické generování 3D prostoru — tj. jednotlivé místnosti. Museli jsme nastavit jednotlivé kostičky a na ně umisťovat předměty. Celé řešení je k vidění na adrese http://mava.pixbox.cz/.

I přesto, že jsme si celkově vzali poměrně velký kus práce, s výsledkem můžeme být spokojeni — dotáhli jsme alespoň něco.

Za tým MAVA Radim Štěpaník