NeurosLab - Soft - Valcea - 2010 Nationala

Informatii generale

  • Categorie: Soft
  • Judetul: Valcea

Descriere

Noi putem crea Retele Neuronale Artificiale(RNA), Multi Layer Perceptron cu drag&drop, sa simulam, sa invatam. Asemanator ca in Symulink din MatLab, sau NNTool

Pentru a intelege, mai bine proiectul, am creat mai multe exemple:
 Optical Character Recognition pentru recunoasterea scrisul de mana
 Face classification,
 Speech recognition
 Aproximari de functii elementare, continue

Ce alte exemple am putea face?
 Fingerprint recognition
 Retina recognition
 Boli din radiografii de exemplu: Cancerul
 Predictie
 Eye-Tracking
 Human-Computer interface

Diferente dintre alte softuri si NeurosLab
Dupa ce am invatat o RNA, daca dorim sa scriem o aplicatie, care simuleaza reteua invata, putem exporta ponderile retelei si softul poate sa genereaze(exporte) o clasa in Delphi, sau Pascal, sau Dynamic Link Library(DLL), care simuleaza RNA, deci putem folosi NeurosLab, in orice mediu de programare, care permite importari de functii din DLL. Putem importa/exporta din XML.

Ideea este daca vrem sa dezvoltam o aplicatie cu AI, nu trebuie sa stim sa scriem o aplicatie cu inteligenta artificiala, noi numai trebuie sa scriem algoritmul de simulare. Vom folosi NeurosLab, care exporta ponderile si genereaza coduri sursa.

Ce algoritmi de invatare sunt scrisi:
 BackPropagation
 BackPropagation with Momentum
 DarkenMoody
Daca nu suntem programatori, putem doar sa simulam si sa invatam o RNA, in NeurosLab. De exemplu: daca suntem doctori, si dorim sa detectam Cancerul, dintr-o radiografie, ne trebuie doar experienta in NeurosLab(nu ne trebuie cunostinte, cum sa scriem aplicatii, sau sa cunoastem teoria matematica din spatele aplicatilor cu AI), deci oricine poate folosi NeurosLab.

Componente utilizate:

  1. Transformata fourier discreta(am folosit un unit scris de Dan Cross)
    In rest, tot codul este scris de mine.

Tehnologii

  1. Delphi 2. BusinessSkin

Cerinte sistem

Una bucata windows adevarat, necesita calcul masiv la antrenare.

Realizatori

Budisteanu Ionut Alexandru

  • Scoala: Colegiul National “Mircea cel Batran” Rm. Valcea
  • Clasa: IX-a
  • Judet: Valcea

Screenshots



In primul rand, felicitari! Proiectul pare foarte vast, bine gandit si pus la punct. Retelele neuronale nu sunt chiar la indemana oricui, si aplicarea lor la fel de tricky. Exemplele sunt foarte bine alese, mai ales face/speech recognition.
Prima intrebare (traditionala pe la infoedu) este: de ce e mai bun ce ai facut tu decat ceea ce exista deja? De ce as vrea invat sa folosesc aplicatia ta sa fac o recunoastere faciala, in loc sa scriu 20 linii de cod in openCV (care sunt si in exemple), cu un API extrem de optimizat? Trebuie sa ai grija sa punctezi foarte bine asta, eventual sa pregatesti si un benchmark elocvent.
De ce, de exemplu, un doctor ar folosi NeurosLab pentru a crea o RNA pentru a detecta cancerul, si nu ar folosi un soft deja existent, dedicat pentru asa ceva. Din punctul meu de vedere, mai bine ar folosi oameni specializati aplicatia ta pentru dezvoltarea rapida de softuri inteligente. Mi se pare mai plauzibil, si e o mare evolutie fata de programare. Gandeste-te foarte clar la publicul tau tinta.
Un mare plus la softurile utilitare este ideea de cross-platform. Ia in considerare posibilitatea si compilarii si pe linux - incearca Kylix.

In DLL exportat nu folosesc functii Win32Api, si teoretic ar trebui sa ruleze pe linux.

Baiete, un DLL nu poate fi utilizat in linux, decat prin forta, folosind un emulator. De cele mai multe ori asta nu reuseste, decat pentru aplicatii/librarii gandite in asa fel incat sa nu puna probleme la emulare. Librariile dinamice pentru linux se numesc .so, iar cele statice .o :wink:
Citat scris de gigaevil=dar partea de simulare si invatare, poate fi portata pe kylix usor, si sa nu folosesc VLC ci CLX. Dar nu mi-am propus chestia aceasta. In DLL exportat nu folosesc functii Win32Api, si teoretic ar trebui sa ruleze pe linux.


Eu zic ca am raspuns foarte clar, nu mi-am propus sa functioneze pe linux, NeurosLab, utilizeaza functii Win32Api , dll mmsystem, si unitul cu webcam(care nu este scris de mine), foloseste o groaza de functii windows. In mod clar nu va functiona pe linux. Dar dll-ul, pe care neuroslab il creaza si care consta doar partea de simulare a unei retele neuronale, cat si configuratia retelei(practic mi de numere), numarul de straturi, si functiile de activare. A simula o retea inseamna sa faci un set de operati aritmetice, in functie de anumite reguli. O retea MLP este o functie de sute... mi de parameteri, cu valori in m clase la stratul de iesire, in urma antrenari, din sutele de parametri, weight-urile si bias-urile devin constante, iar cand o simulam ramane doar o functie de n parameteri cu valori in m clase, unde n este dimensiunea vectorului de intrare(dimensiunea matrici de intrare), si ponderile devin constante, practic ele devin 80% din DLL-ul exportat. Desi nu ma pricep la linux, nu vad ce greutate ar fi pe Kylix, sa importe un fisier dll plin de numere, si sa faca niste calcule aritmetice. Mai clar, nu m-am axat pe portabilitate pe linux, si scopul a fost sa export un dll, pentru simularea retelei neuronale, gata antrenate in NeurosLab, configuratia retelei(nr de straturi, functii de activare, nr de perceptroni), cat si niste fisiere de numere care contin, ponderile si biasurile retelei MLP antrenate.
Mai clar: DLL-urile generate nu contin, exemplele, ci doar retea MLP gata antrenata a acestora. si functile de simulare... numai calcule matematice.
Nu am lucrat pe un Linux, dar presupuneam, ca atata timp cat un soft nu foloseste functii API din Windows, si functii/intreruperi MS-DOS, ar putea fi de compilat in Kylix pentru a functiona pe Linux.

Repet citatul:

In DLL exportat nu folosesc functii Win32Api, si teoretic ar trebui sa ruleze pe linux.[/quote:32sy7a0n]
Eu am raspuns strict acestei afirmatii, nu am criticat lipsa portabilitatii si pe alte sisteme de operare:
[quote:32sy7a0n]Baiete, un DLL nu poate fi utilizat in linux, decat prin forta, folosind un emulator. […] Librariile dinamice pentru linux se numesc .so, iar cele statice .o

Ca fapt divers, totusi, iti recomand sa nu mai raspunzi foarte mult in afara subiectului :wink: Multa bafta la prezentare!

Multumesc pentru sugestii, si intentionez sa mai inscriu 2 lucrari cu inteligenta artificiala, una de recunoastere faciala, exemplu din NeurosLab face clasificare faciala, si un Vocal User interface, ambele mai laborioase. As fi bucuros daca as primi sugestii din partea ta, lucrarile mele sunt perfectionate intrucat am primit feedback din partea comsiilor cat si a participantilor de la concursurile la care am participat. Fiecare concurs, reprezentand o imbunatatire a aplicatiei … Vacanta placuta.

Legat de clasificare faciala si softul tau separat: http://opencv.willowgarage.com/wiki/FaceDetection - exemplu din foarte putine linii de cod, libraria se numeste openCV, facuta de Intel, extrem de optimizata, e open source, e si licenta BSD deci poti face multe cu ea, si lucreaza cu xml-uri de clasificare si cascade Haar, si exista o sumedenie pe internet: clasificari pentru ochi, gura, corp uman, forme specifice, etc. Ai si unealta pentru antrenarea propriei tale cascade Haar si recunoasterea oricarui tip de obiect, in imagini sau in real-time video.
Tu ce aduci in plus? Nu-ti cere nimeni sa revolutionezi nimic, dar cred ca mult mai benefic ar fi sa contribui la acea librarie, decat sa reinventezi roata :smile: Era o vorba printre programatori: “don’t code your own square wheels, use the existing round ones”.

Referitor la clasificarea faciala: Intradevar metoda cu filtre haar este mult mai performanta, eu folosesc clasificatori neuronali, sa clasifice fete, performanta este undeva la 60% , fata de 90% prin metoda cu filtre haar. Dar singurul lucru care ma motiveaza este faptul ca este scris de mine, chiar daca este o reinventare a unei roti patrate. Faptul ca opencsv e scris de Intel, eu zic ca pentru mine este o bila in plus, chiar daca nu este optimizat, are probleme de viteza, etc.

Dorinta mea, este sa-mi perfectionez metoda, de programare, si eu zic ca fiecare dintre lucrarile mele, din ultimi ani, reprezeninta trepte atat in metoda cat si tehnici de programare. Inteligenta artificiala esteu un drum lung, pe care am pasit, descoper mereu lucruri noi… intrebari pe care mi le pun si nu gasesc raspuns(ex: De ce la facultate se folosesc sphinx pentru recunoasterea vorbirii, de ce se foloseste guru pentru crearea unui sistem expert, de ce se foloseste un conector gata scris, pentr conexiune dintre prolog-c++ si aceste programare nu sunt scrise de studenti. De ce la retele se foloseste Matlab-ul) pentru mine faptul ca am reusit recunoasterea vocala a fost o mare bucurie. CHiar daca ceea ce am facut eu, exista pe piata de 10 ani, exista SDK-uri, atat pentru recunoastere vocala si pentru text to speech.
Pot sa-ti spun unul dintre avantajele pentru care este mai util sa scrii un cod decat sa folosesti un unit: Exemplu mmsystem are sute de procedure si eu folosesc doar una. La compilare se adauga executabilului meu, sute de proceduri, de metode inutile, care cresc codul si impiedica performantele aplicatiei.
Am citit candva in ingineria programarii, ca trebuie sa existe un compromis intre a utiliza unituri si a scrie procedururi de mana. Vin la concurs cu softuri scrise de mine, nu open-source. Intradevar si eu folosesc roti inventate:Skinul,Webcamul, mmsystem si sunt foarte necajit ca nu stiu sa le scriu.

Oricum sunt realist de calitatea softului opencv si calitatatea softului meu.

Softul meu permite crearea vizuala a retelelor neuronale MLP, pecand opencv scrii cateva lini de mana.

[...] eu folosesc clasificatori neuronali, sa clasifice fete, performanta este undeva la 60%, fata de 90% prin metoda cu filtre haar.

Recunoasterea faciala prin cascade Haar este de minim 95% (daca adaugi si tehnici gen Lienhart and Maydt, Messom and Barczak si Viola and Jones, procentul creste la 99%), iar asta e absolut necesar pentru ca un soft sa fie intr-adevar bun. 60% e un scor mult prea mic pentru a fi folositor.

Face recognition-ul facut in aplicatie merge atat de prost, deoarece retele alese nu sunt tocmai cele mai potrvite pentru aceasta problema, eu am folosit clasificatori neuronali, si daca a invatat un set de fete caucazieni si testam cu oameni negri automat ca nu mai merge, distanta intre cele 2 poze este peste limita de aproximare. In real time, posibil ca la un cadru sa-mi dea eroare, dar daca in zece cadre intr-o secunda, imi iese poza respectiva chiar daca clasificatoru merge cu 60% eroare printr-o inferenta simpla, recunoasterea crestere in performanta. Este doar un exemplu, sa arat capacitatea lui NeurosLab, dupa aceea se poate aplica si face classification(care este facut). Face classification merge undeva spre 90%.
Totusi nu poti sa imi iei bucuria pe care o am atunci cand un software facut de mine, il compar cu unul facut de intel(opencv) sau altceva :smile:

Softul meu nu este un face recognition, este un soft in care arat capacitatile retelelor neuronale, MLP de a accepta date eronate, si modul in care diverse probleme pot fi trase catre classificare(ceea ce stie sa faca MLP)

[...] intentionez sa mai inscriu 2 lucrari cu inteligenta artificiala, una de recunoastere faciala, ambele mai laborioase[/quote:d9hipmut]
[quote:d9hipmut]Softul meu nu este un face recognition, este un soft in care arat capacitatile retelelor neuronale

..nu prea mai inteleg ce spui :smile: eu nu ma refeream la NeurosLab, ci la acele softuri mai laborioase de care spuneai :wink:

da poate nu am fost prea coerent, lucrez la un soft de recunoastere faciala + clasificare faciala. In principiu softul este gata. Mai fac cateva teste. Softul nu face recunoastere faciala prin metoda cascadata a filtrelor haar, ci utilizeaza numai retele neuronale mlp . Pentru recunoastere facila am: un gen de retea in care am anumite fete cat si anumite clase de rejectie. Exemplu: colturi de mobilier, obiecte patrate, albe, etc… In cazul in care recunoaste o fata intra la un alt clasificator, in care am mai multe clase printre care ma gasesc si eu. Imaginea este preluata de la un webcam, dupa care, pe anumite frame-uri, aplic metode clasice de extragere de continut: In cazul de fata nu aplic decat egalizarea de histograma(pentru marirea contrastului), am intentionat sa aplic niste filtre sa fac segmentare, extragere de obiecte, segmentare, etichetare si sa clasific, dar am renuntat. Procedurile le-am scrise, le-am invatat la scoala de vara “Informatica la Castel”. Nu am aplicat decat separarea regiunilor de interes ROI(regional of interes) dupa ce m-am plimbat cu o tila(care se scaleaza, la diverse dimensiuni),

Primul clasificator am gasit fata, ok intru pe al doua retea neuronala si vad a cui este fata, daca in decursul unei secunde am un prag min de recunoastere, afirm ca am gasit fata

Mi se pare super tare lucrarea :smile: .

Ai luat locul 1 la InfoMatrix cu ea asa-i ?
Ai mai modificat ceva la proiect de atunci si daca da ce imbunatatiri ai adus proiectului ?

Tot respectul :smiley: !

Softul nu a fost prezentat nu numai la InfoMatrix ci si la alte concursuri. Dupa fiecare concurs orice lucrare a mea suporta niste transformari in functie de feedbackurile primite, atat de la concurenti cat si de la comisii, in marea majoritate profesori, universitari, deasemenea am avut discutii si cu cei de la inteligentics. Ca idee la aceasta lucrare am lucrat cel putin 10 luni, am cel putin 20 de versiuni “oficiale” si cateva sute de retele invatate(o invatare a unei retele poate dura si cateva ore si rezultatul poate fi dezamagitor). A spune ca NeurosLab este o lucrare incheiata este o greseala, in primul rand exista si alte paradigme ale inteligentei artificiale, pe care NeurosLab nici nu le atinge. NeurosLab lucreaza doar cu perceptroni, MLP, si 2 algoritmi de antrenare, Back-Propagation, Back-Propagation cu momment cu mai multe tipuri de setari: LearningRate variabil, Darken Moody

Ca noutate fata de versiunea de la InfoMatrix:

Acuma permite sa exporte dll-uri stand-alone in care sunt incapsulate ponderile retelei creata si invata in NeurosLab. In versiunea anterioara in DLL erau functiile de simulare, iar ponderile erau ca si fisiere auxiliare.

Permite conectarea la un server de http si de unde pot fi downlodatate retele gata invatate si versiuni noi ale softului.

Acuma totul se aloca dinamic, inclusiv matricile de calcul.

Am facut inca 3 exemple:
Un OCR real-time, si pe o rezolutie de 128*128.
Face recognition
Eye recognition.


Deasemenea si in celelalte aplicatii prezentate, am implementat mecanisme cu AI create in NeurosLab, pentru a dovedi capacitatea softului, in logicus, coffee simulator, si in softul de face recognition pe care il voi inscrie la concurs.

Permite vizualizarea erori in timpul antrenari in mod real-time.
Permite invatarea mai multor retele deoadata. Am implementat un undo, si o consola ca sa ma ajute la debuging.

Multumesc pentru interesul acordat, multa bafta si tie!