(vlastní) Třídička kostek - POZOR, může obsahovat ne-LEGO díly (např. počítač)

Založil pryb, 25.05.2017, 18:19:19

Předchozí téma - Další téma

0 Uživatelé a 1 Host prohlíží toto téma.

pryb

Jak jsem začal stavět třídičku

Asi tak před sedmi, osmi lety jsem si pořídil LEGO Mindstorms NXT. Báječná hračka. Postavil jsem si pár základních modelů a pak jsem se rozhodl, že se dám do třídičky kostek. S barevným senzorem to nevypadalo složitě.

Dělal jsem se s tím několik týdnů, nejtěžší bylo nastavit tolerance pro jednotlivé barvy (ostatně miho by mohl vyprávět). Nakonec to jakž takž třídilo. Ale stejně se vždycky ukázalo, že temná měřící krabička není temná dost, venku svítí slunce jinak a můžu ty hodnoty nastavovat znova...

Našemu synkovi se to samozřejmě moc líbilo, tak si to jednoho dne ,,prohlížel". Po příchodu z práce už jsem jenom shrnul zbytky do krabice a dal se do něčeho jiného.

Před pár týdny jsem se v rámci úklidu propracoval až těmhle troskám, rozložil je a kostky zatřídil. No a ještě ten den odpoledne mi kamarád poslal odkaz na článek o třídičce kostek s pomocí neuronových sítí. Takže jsem začal stavět znova. A k tomu trochu programovat.

Sběr obrázků...

Nejdřív jsem chtěl ověřit, že budu umět nasnímat obrázky a poznat, že na nich vůbec něco je. Takže jsem postavil pás s podavačem, nad něj umístil starou USB kameru a napsal jednoduchý program, který bere z kamery fotky a ukládá je na disk. To fungovalo, byť kvalita fotek je opravdu, opravdu špatná. Jak jsem zjistil později, kamera brala 5 snímků za vteřinu. Nemá ani autofocus, což se ukázalo jako výhoda – když jsem později experimentoval s novější kamerou, autofocus běžící pás nezvládl a dopadlo to ještě hůře.



...zpracování obrázků...

Z fotek jsem vyřízl střední část – pokud je na středu vidět aspoň kousek, dá se předpokládat, že na celé fotce bude celá kostka. S pomocí knihovny Neuroph jsem začal cvičit neuronovou síť, která říkala ano-ne.

No a pak mi došlo, že už z tohohle se dá postavit třídička podle barev. Takže jsem neuronovou síť zahodil a začal cvičit novou, která rozpoznávala červenou, zelenou, žlutou a bílou (výber barev byl jednoduchý – odsypal jsem si z krabičky s technic bricky 1×2 hromádku na testy a tyhle barvy tam byly). Šedé a černé jsem nezkoušel – rozmazaná fotka takové kostky na šedém pásu je k ničemu. No a ono to docela fungovalo. Nasnímané obrázky to začalo třídit.

... a vlastní třídění

Tak jsem začal dělat něco, co by třídilo kostky, nejen obrázky. Pro ovládání NXT z počítače jsem si stáhnul LeJOS a zkusil přeflashovat firmware v NXT kostce. To jsem si dal... Program smazal starý firmware a prohlásil, že žádnou NXT kostku připojenou nemám. Kostka zhasla a začala jen potichu tikat. Nakonec se to povedlo spravit. Pokud byste to chtěli taky zkoušet, tak ovladač NXT se ve Windows musí instalovat BEZ připojení k Internetu. No a nakonec se ukázalo, že pro ovládání z PC není třeba kostku flashovat.

Když jsem ověřil, že umím ovládat motory z počítače, udělal jsem jednoduché ,,šťouchadlo", které shazovalo kostky z pásu. Výsledek můžete vidět na videu.

No a v souladu se zákony pana Murphyho můžete vidět, že první natočené třídění skončí chybou.
Aktuální projekt - třídička.
Youtube kanál

Jonas

Držím palce. Neuronové (hluboké) sítě jsou opravdu mocné. Jen je potřeba nashromáždit velké množství trénovacích dat a zvolit raději více vrstev, aby se dobře naučily. (Což pak samozřejmě trvá dlouho, zvlášť pokud není k dispozici GPU).
Jeden náš student také staví třídičku, která na základě kamerového obrazu bude třídit i podle tvaru. První, co si udělal, je mechanický nástroj, který před kamerou náhodně pohazuje vybrané kostky, aby získal pro každý tvar co nejvíce obrázků pro učení.
Jonas - Můj Brickshelf

pryb

Tohle je spíš takový pokus, na kterém si ověřuju, že tudy vede cesta. Na tuhle kvalitu obrázků a třídění barev bohatě stačí jednoduchá dvouvrstvá síť a počítač bez GPU. Třídění podle tvaru je samozřejmě v plánu.

Třídička už teď vypadá jinak, až budu mít chvíli, tak zas něco napíšu a natočim video.
Aktuální projekt - třídička.
Youtube kanál

pryb

Když jsem si ověřil, že první verze třídičky docela dobře funguje, dal jsem se do vylepšování.

Fotky

Nejdřív jsem začal vylepšovat kvalitu fotek. Fotky byly rozmazané pohybem, takže do každé kostky bylo přimícháno trochu tmavě šedé. To opravdu není žádná sláva:



Hledal jsem, jestli jde nějak přes API knihovny nastavit rychlost závěrky kamery (dobře, vím že tam žádná závěrka ve skutečnosti není, ale dá se pracovat s počtem snímků za vteřinu). Nejde to. A typicky to tyhle malé webkamerky ani neumožňují, prostě to zařizují automaticky. Dá se to ale udělat nepřímo – zlepšit osvětlení. Kamera pak usoudí, že má dost světla na to, aby si mohla dovolit zvýšit framerate. Takže jsem zahodil tu lampičku, co byla v minulé verzi, a dal jsem tam 2W cyklosvítilnu. To zabralo, kamera začala snímat rychlostí 30 snímků za vteřinu, což je podle specifikace její maximum. Výsledek se o dost zlepšil:




A zlepšily se tak i výsledky. Pořád ale byly problémy s rozlišováním žluté a bílé, což při pohledu na obrázky nepřekvapí. Myslel jsem, že prostě potřebuju lepší kameru s větším dynamickým rozsahem, která nebude pro světlé barvy dávat tak přepálené obrázky. Pak mi došlo, že i jas kamera reguluje automaticky bez možnosti to přímo ovlivnit. Ale opět to jde nepřímo. V měřící krabici jsem měl vedle pásu černé pozadí, aby nerušilo. Na oříznutých fotkách není vidět, ale kamera ho samozřejmě zabírá. Když jsem tuto část nahradil bílými plates a tiles, celkový jas o dost klesnul, a výsledky byly zase o něco lepší:




Rozšíření neuronové sítě

Tak jsem si troufl neuronovou síť rozšířit a přidat další barvy – modrou, černou a světle šedou (specielně rozmazaná světle šedá původně nešla na šedém pozadí poznat ani očima). Výsledky byly opět dobré, problém zůstal v rozlišování světle šedé a bílé, tam se plete pořád. Obávám se, že na to už dvouvrstvá síť stačit nebude.

Vylepšení vlastního třídění

Když jsem dosáhl lepších výsledků při třídění v počítači, začal jsem ještě upravovat vlastní třídičku. Prodloužil jsem pás a postavil ještě dvě šťouchadla (mám jen jednu NXT sadu, takže jsem omezen na 3 motory). To umožnilo vytřídit 3 barvy.  Aktuálně je to nastaveno na vytřídění červených, zelených a modrých.

Původní program běžel v jednom vlákně – když narazil na červenou kostku, prostě chvíli počkal a pak šťouchnul. To už bylo teď nevhodné – dokud program čekal, nedělal nic jiného. Upravil jsem program na dvouvláknový – jedno vlákno snímá obrázky a pokud narazí na něco, co bude třeba shodit z pásu, založí do seznamu požadavek a nastaví mu patřičné zpoždění. Druhé vlákno pak kontroluje, jestli je už v seznamu něco, co potřebuje zpracovat. Pokud ano, vydá příslušnému motoru pokyn k sešťouchnutí.



Méně úspěšné pokusy...

Ne vše se samozřejmě dařilo. Zkusil jsem upravit šťouchadla na oboustranná, abych mohl třídit 6 barev, ale se stávající konstrukcí jsem neuspěl. Musel bych výrazně prodloužit osy, po kterých šťouchadla jezdí. Tedy dát tam osy aspoň šestnáctkové, které nemám, navíc by se to už dost prohýbalo. Vymyslel jsem si kostrukci s dvanáctkovými osami, kterých mám fůru, ale nakonec na ni nedošlo, použil jsem jiné řešení – o tom příště.

Rozmýšlel jsem se ještě nad lepším pásem – ten originální LEGO má příliš výraznou strukturu, což bude nejspíš u složitějších sítí na závadu. Zkusil jsem vyrobit hladký z duše do kola, ale zatím z toho není rozumný výsledek.

Co chci vyzkoušet dál:
    Oboustranná šťouchadla (to už vypadá slibně).
    Udělat lepší pás.
    Použít lepší kameru.
    Pustit do třídičky i jiné dílky než Technic brick 1×1 a 1×2.
    Pro vyhodnocení nepoužít jen jeden obrázek, ale víc. To by mělo snížit chybovost, pokud je ten první špatně (je vidět jenom kousek), u těch dalších to obvykle dopadne líp – ale teď se použije ten první.
    Vyzkoušet vícevrstvé neuronové sítě (a začít experimentovat s tříděním podle tvaru).
    No a machrovinka by byla použít jako vstup NXT barevné čidlo, spočítanou síť nahrát do NXT kostky a udělat pure LEGO třídičku bez připojeného počítače a kamery.

No a nezbytné video...
Aktuální projekt - třídička.
Youtube kanál

milanv

Výborná zábava! A na videu je vidět, jak si stroj chudák skopl modrou kostku do červeného šuflíku úplně mimoděk. Modré šťouchadlo správně chtělo strčit, ale už nemělo co... Takže to už je na zajištění spolehlivosti rozestupů, čtení a strkání funguje hodně dobře, zdá se!
Pán na Žlutém hradě

pryb

Mohlo by se zdát, že tenhle projekt skončil tam, kde spousta projektů končí, ale není tomu tak. Jenom mi to prostě trochu trvá.

Doteď jsem se bavil výpočty neuronových sítí, focením dílků na pásu, mechanismy pro sešťouchávání kostek z toho pásu do krabiček a podobnými složitostmi. Dneska ukročím od složitějších věcí trochu stranou k něčemu mnohem jednoduššímu.

Ze seznamu námětů z minula jsem vyzkoušel skoro vše (vyjma té pitomosti s vyhodnocováním přímo na NXT kostce). Ovšem největší problémy dělal pás.

Pás byl problém. Ten klasický od LEGO je na tohle vysloveně špatný – krom toho, že má výraznou, a tedy matoucí strukturu, tak se na něm kostky zasekávají. Hodně. Zkoušel jsem ledacos – rozřízlé duše z kol, duši z motorky – všechno se nakonec ukázalo jako nevhodné. Nakonec jsem skončil u zdravotnických škrtidel. (Pravda, když jsem chtěl během týdne páté, koukali na mě v té lékárně už trochu divně a podezíravě). Každopádně coby pás se to osvědčilo.

Ale ani nový pás ale nevyřešil jeden z problémů – kulaté díly se kutálí a padají všude okolo. I do krabiček s roztříděnými dílky, kam rozhodně nepatří. Doufal jsem, že na delším pásu by se mohly dílky uklidnit a přestat se kutálet, ale nestalo se. Všude kolem třídičky byly popadané piny, bushe, krátké osy...

Nakonec mi ale došlo, že i (ne)padání z pásu je svým způsobem třídění. A že úplně postačí prohnat nejprve dílky po šikmém pásu. Co je kulaté, skutálí se. Takže jsem postavil něco, co se dá nazvat ,,předtřídičkou" – než dám kostky do opravdové třídičky, nejdřív vyřadím ty problémové. Vypadá to asi takhle:



Předtřídění je potřeba udělat několikrát – třeba halfbushe rády padají naplacato (zejména když se po nich chce, aby se kutálely). Ale výsledek je velmi uspokojivý. Takhle to dopadne po prvním průchodu:



no a takhle po druhém:



To už je v naprosté většině jen směs několika málo typů dílů. A to se snadno dotřídí ručně.

Pro přiměřeně čistou směs nekulatých dílů jsou potřeba alespoň 3 průjezdy. Výsledkem je směs, která se už dá dát do ,,opravdové" třídičky. Ale o tom zase příště, hned jak se dostanu k tomu to napsat.

No a na závěr samozřejmě nezbytné video.
Aktuální projekt - třídička.
Youtube kanál

444martinhanak

Perfektní. Vždy obdivuji, co všechno lidi dokáží vymyslet. To je hodně dobrý nápad s tím "kutálením". Takže 2 až 3 tyto předtřídičky za sebou (nebo vedlejší větev) a máš odfiltrované kulaté díly. Pak několik dalších modulů na detailnější třídění a je z toho dlouhé zařízení. A bude to světový unikát. Jak jsou na výstavách několikametrové GBC okruhy, tak Ty vymyslíš dlouhou třídící linku.
Teď si jsem si uvědomil, že i pan Šnobr kdysi hovořil, že by se mu líbilo z Lego postavit funkční "továrnu". A toto by se mu, podle mě, určitě líbilo.

pryb

Dlouhá třídící linka asi hned tak nebude, tady to opravdu stačí jenom prohnat několikrát

U té "opravdové" třídičky by to bylo něco jiného, ale mám jenom jednu Mindstorms sadu a další pořizovat neplánuju. Takže třídit dokážu maximálně do šesti kategorií.
Aktuální projekt - třídička.
Youtube kanál

milanv

Třídička je super, už se těším, až ji někdy uvidím naživo.
Na stavbě mi přijde nejzajímavější ta tvoje zkušenost o množství "inženýrské práce": jak velký je rozdíl mezi teoretickým modelem (resp. ukázkovým příkladem k němu) a strojem, který bude opravdu spolehlivý.
Navíc mě to láká zase oprášit své starší nápady na kuličkodráhy, když vidím takové stroje...

To třídění kulatých dílů by šlo udělat několika průchody místo několika pásů za sebou, ne? I by to vypadalo hezky, kdyby dole byla pořádná sběrná vana s dopravníkem zase zpátky na ten šikmý pás - jen jak to "počítat", aby ty díly nejezdily donekonečna dokola, ale postupně byly prohlášeny za dostatečně pravděpodobně kulaté a dopraveny do koncové vaničky "kulaté díly"?
Pán na Žlutém hradě

pryb

Jasně že by to šlo ještě vylepšit a zkomplikovat. :D Ale teď to zas nějakou dobu nechám, jak to je, maximálně se zbavim toho vodorovnýho LEGO pásu.

Chci se teď věnovat hlavně té "opravdové" třídičce, na té je toho k vylepšení víc.
Aktuální projekt - třídička.
Youtube kanál

Daniel

U podobných věcí absolutně nechápu jak to někdo sestrojí/zprovozní...a asi chápat ani nikdy nebudu ;D . Každopádně super stroj :)

pryb

Citace od: Daniel kdy 22.03.2019, 09:43:04
U podobných věcí absolutně nechápu jak to někdo sestrojí/zprovozní...a asi chápat ani nikdy nebudu ;D . Každopádně super stroj :)

To je v pořádku, já zas vždycky zírám na ty tvoje velkostavby. :)

Na tomhle bylo popravdě nejtěžší přijít na ten poměrně triviální nápad, že kutálení je taky třídění. Zítra napíšu něco trochu složitějšího.
Aktuální projekt - třídička.
Youtube kanál

pryb

Minule jsem psal o vytřídění kulatých dílů. Dnes se vrátím zpátky k původní třídičce. A i na neuronové sítě dojde.



Šťouchadla
Mám jenom jednu NXT sadu, tj. 3 motory. Přemýšlel jsem, jak upravit šťouchadla, aby shazovala kostky na obě strany pásu a mohl jsem tak třídit do šesti hromádek. Minulá koncepce na to nebyla moc dobrá – šťouchadlo by bylo potřeba přednastavit do správné polohy a to by mohlo shazovat dílky v nevhodnou chvíli. Navíc bych na to potřeboval opravdu dlouhé osy. Nakonec jsem použil konstrukci s LEGO pásy (přeci jen jsou k něčemu dobré :) ). Aby se šťouchadlo lépe strefovalo a dílek před ním nestihl ,,utéct", dal jsem k NXT motoru převod 1:3. Dílky to z pásu sestřeluje docela pěkně.


Kamera
Možnosti ovládání původní webkamery byly velmi omezené. Ani obrázky nestály za moc, tak jsem se rozhlížel, čím to nahradit. No a protože jsem se před nějakou dobou zabýval měřením hladin v nádržích pomocí RaspberryPI a protože RaspberryPI má celkem schopnou kameru, byla volba celkem jasná. Použil jsem tedy systémovou RaspberryPi kameru. Krom toho, že se u ní dá kromě jiného nastavit expoziční doba, dokážu z ní tahat 10 snímků za vteřinu (a je tam pravděpodobně ještě rezerva).

Na osvětlení jsem nějakou dobu používal (a vlastně ještě používám) modul Blinkt k Raspberry. Při ladění kamery jsem ale zjistil, že to nestačí, tak jsem přidal jeden díl LED pásky. (Tedy původně jsem přidal asi dvacet centimetrů, ale tím se obraz dokonale přepálil).

Vyhodnocování
Největší změnu jsem ale udělal v softwaru. Zahodil jsem tu srandovní Java knihovnu a začal jsem studovat Python a vícevrstvé neuronové sítě. Na začátku přednášek se říká: ,,Pořiďte si grafickou kartu Nvidia". Tu jsem neměl, tak jsem to zkoušel přeprat využitím volné kapacity osmiprocesorového serveru. Večer jsem spustil výpočet a ráno jsem se dozvěděl, že výsledek je nevalný a bude potřeba to spustit znovu a lépe.

Takže jsem si po několika pokusech pronajal v cloudu server s Nvidia kartou. Jeden výpočet sítě trval asi tak 2 minuty, což už bylo zcela postačující (dneska už mám nasbíráno víc obrázků a hraju si se složitějšími sítěmi, ale do hodiny a půl se to zatím vejde).

Vyhodnocení jsem dělal na počítači bez grafické karty, čímž jsem se dostal na zpracování jednoho obrázku za vteřinu. S tím jsem si chvíli hrál, ale nakonec nezbylo, než si sehnat starou Nvidii i domů na vyhodnocování – při jednom snímku za vteřinu toho prostě příiš mnoho projede nepovšimnuto.

Naštěstí měl kolega starou Nvidii, kterou mi půjčil se slovy ,,mně je k ničemu, na hraní je to už pomalý". Rychlost zpracování se dostala na deset fotek za vteřinu, což už bohatě stačí. I v tom je rezerva, teď to nejvíc brzdí čtení fotek z kamery.

Celé to teď funguje tak, že Raspberry průběžně snímá fotky a odesílá je na server s Nvidia kartou. Ten provádí vyhodnocení podle předpočítané sítě (a podle jiné sitě odhaduje polohu dílku na obrázku). Z obojího spočte zpoždění a výsledek pošle zpátky do Raspberry. Tam už je pak jen fronta pokynů pro šťouchadla, které se v pravý čas předají NXT kostce. A když se to celé povede, skončí dílek ve správné krabičce.
A jak to dopadlo?

Po několika (mnoho) pokusech se mi podařilo vycvičit vcelku funkční neuronovou síť na rozpoznávání deseti barev – Black, Blue, DBG, DkGreen, Green, L(B)G, MdBlue, Red, White a Yellow. Od dalších barev jsem neměl dost velkou vytříděnou hromádku, aby bylo na čem se učit.

Třídění není dokonalé, dělá to několik typů chyb:


       
  • Kostky jsou moc blízko u sebe a šťouchadlo strefí dvě najednou (a jednu z nich špatně).
  • Neuronová síť si není dost jistá. V takovém případě nechám kostku radši projet.
  • Neuronová síť barvu nezná a nebyla na ni učena. Tan tak padají do šedých a žlutých, DkRed a Orange do červených atd.
  • Šťouchadlo se prostě netrefí.
  • No a někdy se taky stane, že to neuronová síť určí úplně špatně. To se ale děje zřídka, rozpoznávání barev je jednoduchá úloha.

Výsledek je k vidění tady.

Co dál?
Pořád je to vývojová verze a už teď vím, že několik věcí bude potřeba předělat:

       
  • Potřebuju vyladit nastavení kamery – teď se nastavuje automaticky. Specielně bílé dílky jsou přepálené.
  • Bude potřeba znovu zvětšit zorné pole kamery a upravit šťouchadla, aby to bylo použitelné i pro větší než malé dílky.
  • Kamera snímá kolmo shora. To není pro třídění podle barev problém – ale pro třídění podle tvarů už ano.
  • No a samozřejmě spousta drobných úprav v programech i v konstrukci.

A to všechno nejspíš znamená, že můžu celou sbírku učících fotek zahodit a začít pěkně znova. :)
Aktuální projekt - třídička.
Youtube kanál

pryb

Jak jsem psal, tak jsem udělal - začal jsem znovu. A narazil jsem na další problém - při zkrácení expoziční doby se mi obrázky rozbily. Kdo pozná, co je špatně? :)
Aktuální projekt - třídička.
Youtube kanál

Foton

Zajímavé, hodně zajímavé. Kdybs potřeboval víc NXT motorů, tak dej vědět. Aktuálně je nepotřebuju, rád zapůjčím.
Kdo chce hledá způsoby, kdo nechce hledá důvody.

pryb

Bod má milanv - poznal, že jde o interferenční pruhy způsobené špatným napájením osvětlení. To je důsledkem snahy mít to "co nejvíc LEGO". Pro napájení osvětlení jsem použil LEGO 12V Trains trasformátor, který dává mizerný tvar výstupního napětí (což motorům a žárovkám vláčků nijak zvlášť nevadí). Kameře to vadí mnohem víc.
Ještě ráno jsem vzal robátkům z Boffinu 470uF kondenzátor. To docela pomohlo, ale dobré to pořád není. Jednotlivé obrázky vypadají dobře, při prohlížení série je vidět, že pruhy tam jsou pořád.

Chtěl jsem původně koupit větší kondenzátor, nakonec jsem na Milanovu radu koupil napěťový měnič, ke kterému dám zdroj od starého notebooku.
Aktuální projekt - třídička.
Youtube kanál

pryb

Dneska se přišel na třídičku podívat Foton. Bude se vylepšovat...



Děkuji.
Aktuální projekt - třídička.
Youtube kanál

pryb

Od minule jsem třídičku naučil třídit zhruba 20 různých barev. Ale třídit kostky jenom podle barvy je nuda. Popojedem.

Z dob nákupů kilowaru mi tu zbyl kyblík slopes, které už jsem neměl energii dál třídit. Ideální materiál pro třídičku.



Nasbíral jsem tedy obrázky, naučil neuronovou síť a spustil třídičku. Tvary to třídilo docela pěkně, ale zoufale si to pletlo normální a inverted slopes.

Zkusil jsem to tedy jinak. Obrázky jsem rozdělil na normální a inverted. Dostal jsem tak 2 hromádky – inverted slopes a všechno ostatní – různé dvojitě skosené, kulaté apod.


Hromádka invertovaných se pak třídila tak pěkně, že než jsem to stihnul nafotit, bylo roztříděno, uklizeno a nebylo co fotit.

U ,,normálních" byla potíž v tom, že to bylo pořád hodně všemožných tvarů. Takže jsem přepracoval základní rozdělení na normální, dvojité, zaoblené a invertované (invertovaných je ale málo, ty se vytřídily v minulém kole). Pořád si to ale hodně plete normální a dvojitě skosené – těch mám nafoceno málo typů. V invertovaných je vidět dost slopes typu 1x2x3 – ty v minulém kole nafoceny nebyly vůbec, takže je třídička řadila špatně. Tentokrát dopadly mnohem lépe.


No a nakonec jsem vzal tu velkou krabici s (většinou) normálními slopes a prohnal to tříděním na jednotlivé typy. Na to mám už starší neuronovou síť, která moc typů nezná. Tam je rozhodně co vylepšovat:

Horní řada je dost marná. Tam mají být slopes 4×2, 4×3 a 2×4. Z nějakého důvodu si to ale neumí poradit s těmi 4×2, které to rozeselo rovnoměrně všude.

Spodní řada je lepší – zleva jsou to 2x2x3, 2×3, 2×2, 1×2 a 1×3. Podívejme se podrobněji na některé chyby.

Ručně jsem dotřídil krabičku 1×2. Vlevo jsou díly zařazené špatně, protože je třídička nezná. To jsou téměř výhradně dvojité slopes. Vpravo jsou zjevné chyby.


Na dalším obrázku je totéž pro 2×2. Vlevo opět neznámé – zejména dvojité konkávní 2×2. Vpravo pak několik chybně zařazených.


No a nakonec ještě 1×3. Neznámé jsou tu zejména 3×2, vpravo pak opět několik chybně určených.



Z krabičky 2x2x3 fotku nemám – tam byla jediná významná chyba, přišly tam i ,,neznámé" 2x2x3 dvojitě zkosené.

Tady jsem to chtěl původně uzavřít s tím, že docela dobrý a že je příspěvek hotový. Ale večer jsem ho už zveřejnit nestih a ráno mi to nedalo. Takže jsem ještě nasbíral fotky slopes 3×2 a vycvičil novou síť. O něco lépe – i to se pořád učim. Pak jsem sesypal ty méně povedené škatulky a prohnal to znovu tříděním. Dopadlo to takhle:



Podíváme se na to podrobněji. Začneme těmi méně povedenými krabičkami.


Stříšky 3×2. Vlevo jsou opět neznámé, vpravo chyby.



Stříšky 2×4 a 4×3. To vypadá o něco lépe.

No a na následujících obrázcích jsou opět neznámé díly vlevo a chyby vpravo. Tedy... vpravo je chyba. Jedna.


(Tohle mě pobavilo – slopes 2x2x3 se vytřídily v minulém kole, takže sem šly prakticky jen neznámé tvary).



A to je vše. Mám z toho dojem, že už to třídí s menší chybovostí než já. A tímto s třídením slopes asi na nějaký čas končím – ono totiž najednou není co třídit...


Aktuální projekt - třídička.
Youtube kanál

pryb

Včerejší úspěch mě povzbudil. Mám tady kyblík drobných dílů. Zkusil jsem ho nechat roztřídit na základní skupiny - plates, plates modified, bricks, bricks modified, technic a slopes.

První 4 kategorie nedopadly zas až tak slavně, ale slopes a technic to vytřídilo docela slušně. Slopes jsem dal stranou (to už třídička umí) a vycvičil jsem síť na základní technic podkategorie - konektory, osy, ozuby, technic bricky, liftarmy a cosi, čemu řikám technic bordel.

Učení nevypadalo nijak slavně - "technic bordel" obsahoval i věci z ostatních kategorií, hlavně konektory, což neuronovou síť samozřejmě mátlo. I tak je ale výsledek velmi uspokojivý.

Bricky vytřídím ručně, ať je z čeho dělat obrázky. Konektory, osy a liftarmy půjdou na podrobnější třídění, tam obrázky mám.
Aktuální projekt - třídička.
Youtube kanál

pryb

Měl jsem tady z prastaré podpory několik pytlíků s technic dílky. Nasypal jsem je do třídičky a použil neuronovou síť na základní rozdělení technic - axle/liftarm/gear/technic brick/connector/bordel. Do poslední kategorie spadá taková směs, kterou se mi do teď nechtělo třídit a moc jí neumim používat, takže ji mam nasypanou dohromady v jedné krabičce. Na obrázku můžete vidět, jak to dopadlo.

Zajímavé na tom je, z některé těch dílů to při učení vůbec nepotkalo, ale zatřídilo je to správně - třeba ty zahnuté liftarmy.

Jednotlivé krabičky jsem dotřídil ručně. Tím jsem snadno dostal další typy pro nasnímání obrázků.
Aktuální projekt - třídička.
Youtube kanál

Jonas

Tvoje počínání sleduju se zájmem a oceňuju, že ses dostal docela daleko.

Už před několika lety jsme u nás zadávali diplomku na rozpoznávání několika desítek základních dílů lega pomocí neuronové sítě. Teď mám připravená další podobná zadání pro bakalářské práce, protože díky knihovnám v Matlabu už je práce s nimi mnohem jednodušší a studenty začínáme seznamovat s DNN dokonce už ve 2. ročníku.

Zajímalo by mě pár praktických otázek:
1) Jak velké obrázky zpracováváš?
2) Kolik trénovacích obrázků pro každou třídu máš? Natáčíš je nějak náhodně nebo používáš obrazovou augmentaci? Kolik už máš tříd?
3) V jakém prostředí trénuješ a rozpoznáváš? Jaké jsou časové nároky?
4) Vycházíš z nějaké předtrénované sítě (Alexnet, ..)?
Jonas - Můj Brickshelf

pryb

Používám předtrénovanou síť resnet34. Experimentoval jsem i s resnet50, která má být lepší, ale zatím jsem lepší výsledky nedostal, jen je to pomalejší a náročnější na paměť.

Obrázky mi z kamery lezou v rozlišení 480x480, což se ale pro síť upravuje na 224x224.

Aktuálně mám 96 tříd, necelých 60 000 obrázků. Pro každou třídu se snažím mít aspoň 500 obrázků.

Augmentaci používám, ale u těch větších sad už uvažuju o tom, že přestanu. Už by to pomalu nemuselo být potřeba.

Používám knihovnu od Jeremyho Howarda, je to postavené na PyTorch. Rozpoznávání běží na starém počítači s GeForce 750, pro učení mám pronajatý server s P6000.

Výpočet jedné menší sítě je tak 20-40 minut, celkovou jsem už nějakou dobu nepočítal. K té bych se chtěl dostat o víkendu, nová data by ji mohla výrazně vylepšit.

Celé už to začíná být prakticky použitelné, dost rychle mi ubývá materiál na třídění. :-)

Aktuální projekt - třídička.
Youtube kanál

Foton

Kdo chce hledá způsoby, kdo nechce hledá důvody.

Jonas

Díky za info.

Citace od: pryb kdy 26.04.2019, 18:55:57
.... Pro každou třídu se snažím mít aspoň 500 obrázků. ...

Těch 500 obrázků už je slušný materiál na učení, ale získat je stojí asi dost práce. Máš to nějak zautomatizované? Nějaký synchronizovaný sypač & fotič?
Jonas - Můj Brickshelf

pryb

Citace od: Foton kdy 26.04.2019, 19:57:32
Tak to stačí zase sesypat, ne  >:D

Koukáš na to špatně, to je prostě důvod pořídit nějakej kiloware. ;) Dokonce by to moh být i probraný kiloware.
Aktuální projekt - třídička.
Youtube kanál

pryb

Citace od: Jonas kdy 26.04.2019, 20:07:52
Těch 500 obrázků už je slušný materiál na učení, ale získat je stojí asi dost práce. Máš to nějak zautomatizované? Nějaký synchronizovaný sypač & fotič?

Je to mnohem jednodušší.

Jedna z úplně prvních sítí, kterou jsem nacvičil, rozlišovala stavy "prázdný pás" x "něco na něm je". Takže jsem začal kontinuálně snímat a vyhodnocovat "neprázdné" obrázky. Ty pak jdou do dalšího kola.

Nejdřív jsem z prvních vyhodnocení třídil chyby a tím rozšiřoval data, což byla strašlivá práce. Chvíli trvalo, než mi došlo, že můžu do třídičky nasypat hromadu stejných dílků, zapnout snímání a zahazovat prázdné. Synchronizovaný sypač netřeba.

Tím jsem nasbíral fotky prakticky všeho, co se vejde do třídičky a čeho mám dostatek kusů. Nejvíc práce je u menších sad přesypávat z výstupního kýble do násypky - ještě jsem z pásů neudělal cyklus. Dokud neudělám ten, asi o moc víc kategorií nebude.

Kde učíš, smím-li se ptát?
Aktuální projekt - třídička.
Youtube kanál

Jonas

Citace od: pryb kdy 26.04.2019, 20:23:10
Jedna z úplně prvních sítí, kterou jsem nacvičil, rozlišovala stavy "prázdný pás" x "něco na něm je". Takže jsem začal kontinuálně snímat a vyhodnocovat "neprázdné" obrázky. Ty pak jdou do dalšího kola.

Nejdřív jsem z prvních vyhodnocení třídil chyby a tím rozšiřoval data, což byla strašlivá práce. Chvíli trvalo, než mi došlo, že můžu do třídičky nasypat hromadu stejných dílků, zapnout snímání a zahazovat prázdné.

Jasné. Takto podobně jsem před lety sbíral trénovací data i já pro svou malou třídičku s Arduinem.

Učím na TUL.
Jonas - Můj Brickshelf

pryb

To je pěkný, to mi nějak úplně uniklo. Pokračuješ s tím někam dál?
Aktuální projekt - třídička.
Youtube kanál

Jonas

Ne nepokračuju. Některé z tohoto typu projektů vznikly hlavně proto, abych si vyzkoušel něco, co pak následně využiju při výuce nebo v zadání studentských projektů.

Ale DNN používáme úspěšně už řadu let  v našem výzkumu a z něho odvozených komerčních produktech (např. zde).
Jonas - Můj Brickshelf

pryb

Práce na třídičce zdárně pokračují, ale o tom příště. Teď sháním pomoc.

Hodil by se mi parťák na výstavu Market Faire za 14 dní (Praha Holešovice). Chtělo by se někomu strávit víkend nebo část u třídičky a kuličkodráhy, že bych nebyl na stánku sám? Může si přinést vlastní kiloware a nechat si ho roztřídit. :-)

Jestli něco opravdu neumím, je to prezentace, střih videa apod. Našel by se někdo ochotný pomoci dát dohromady a sestříhat reprezentativní video?
Aktuální projekt - třídička.
Youtube kanál