Söndag 29 Nov 2020
2020-11-29 17:08:59

Dags att hoppa på ML trenden

Marknadsföring förstör mycket för mig, alla minns väl när "molnet" blev ny trend-ordet som spammades sönder i all marknadsföring från ALLA IT företag trots att ingen av deras infrastruktur förändrades, samma med AI & ML för massa år sedan, såfort marknadsförings-avdelningen fick nys om dom nya trend-orden så spottade dom ur sig det all marknadsföring trots att inget i deras företag förändrades, vissa gjorde precis som den där "AI/ML if statements memen" & påstod sig erbjuda tjänster som byggde på ML & AI trots att inget i deras stack hade någon som helst med AI/ML att göra När det sker & man matas med vilseledande marknadsföring så tappar jag alltid intresset av den äkta varan, tyvärr, för AI/ML är ju faktiskt något roligt att jobba/experimentera med & senaste åren har det ju tagit rejält med fart inom detta segmentet & numera är det ju något som i många fall är väldigt användbart, så det är dags att ta sig en titt på det, kommer inte djupdyka i det då många implementationer som jag faktiskt vill använda "kräver" en GPU vilket jag inte har, eller kräver gör det ju inte men vill man inte vänta 384893473983 miljarder år på resultat så... Så, det är en hel djungel av AI/ML verktyg där ute men dom senaste åren har jag tittat mest på YOLO, verkar vara det som är mest intressant för mig så tänkte börja lära mig det genom att implementera det på denna hemsidan, tänkte i början använda det för att auto-tagga bilder som också kan användas till att söka efter bilder osv, får se vad mer det blir i framtiden Så som sagt har jag ju tyvärr inte tillgång till en GPU med CUDA så tyvärr får jag köra YOLO med CPU vilket inte är helt optimalt, speciellt när webbserverns CPU inte ens har AVX så jag har ingen hårdvaru-accelerering av YOLO så tyvärr kan jag inte träna nätet på mina egna bilder då varje iteration med min CPU tar mellan 10-20 sekunder & med tio-tusentals iterationer om jag vill ha ett dussin egna klasser så skulle detta ta en evighet, skulle gå åt 100% CPU i flera veckor på min slöa webbserver så istället valde jag att använda färdiga vikter & efter att testat YOLOv4(light), Open Images, YOLO9000 osv osv så valde jag tillslut YOLO9000, alla har sina styrkor & svagheter men YOLO9000 blev den bästa kompromissen för dom bilderna jag för tillfället har laddat upp. I en perfekt värld; om jag haft en GPU så hade jag använt både YOLOv4 & YOLO9000, men nuvarande lösning får duga sålänge Får ju ganska vettigt resultat, ibland hittar den lite fel objekt i bilderna: Men på dom flesta av mina bilder blir det ett väldigt exakt resultat, om än ibland lite väl lågt förtroende: Så, YOLO9000 är väldigt säker på att bilden innehåller en cykel, den klassar också cykeln som en mountainbike, om än med bara 55% säkerhet, den har rätt men ja, den är inte så säker på att den gissat korrekt Spenderade väldigt mycket tid med att experimentera med width/height också vid detection för med rekommenderade 608/608 tar ungefär 10-15s per bild för igenkänning & för tillfället har jag ju över 2'000 bilder så det kommer ju ta en stund att auto-tagga alla bilder, minst 5-6 timmar jämfört med 10-20s om jag hade haft en hyfsad vettig GPU, extremt stor skillnad mellan CPU & GPU, 0.1 fps jämfört med 100-300 fps, men iaf, så 608 ger ju bäst precision så tillslut fick jag välja det, testa många multipler av 32, ända ner till 320/320 vilket gjorde att igenkänningen tog så lite som 1-2s per bild men precisionen blev lite väl lidande Det dumma är att på vissa bilder, speciellt på syrrans Grand Danois så var 512/512 bättre, det var mycket oftare som den kände igen korrekt ras MEN med 512/512 på syrrans Old English Sheepdog så blev resultatet absurt, blev helt fel ras, ibland helt fel djur också; oftast ett får ;) Det är ändå imponerande hur exakt ML har blivit, bästa vore ju att träna med YOLO på mina egna bilder men att använda färdiga vikter duger gott för tillfället, tex, när man tänker på det så är det ju ganska otroligt att det går att få detta resultatet: Så, ja, det är en kompromiss, vilket "nät"/vikter man skall använda & vilken storlek på detekteringen, som sagt, bästa hade ju varit om jag tränade mitt egna men tyvärr, får vänta tills jag skaffat en vettig GPU Har bara kört igenom några av mina befintliga bilder, det tar ju som sagt 5-6 timmar att köra igenom hela mitt bibliotek så jag tar en bild lite då & då istället, alla nya bilder kommer gå igenom YOLO direkt när jag laddar upp bilden så alla framtida bilder kommer åtminstone auto-taggas Kollar man på bilderna i singelvy så dom bilderna som processats av YOLO har en liten ML ikon längst uppe till höger, går klicka på ikonen också för att se vilka objekt som YOLO hittat, det skapas också taggar efter dom taggarna som jag vanligtvis lägger in, dom taggarna som är genererade med YOLO har ett "!" framför taggen