Mahru-Z cel mai uman robot

Created by Alin Brindusescu on 2011-01-28 13:59:12

Mahru-Z este un nou model de robot ce a fost prezentat zilele trecute de către Institutul de ştiită şi tehnologie Coreean. Spre deosebire de modelele precedente Mahru-Z are o capacitate mult mai ridicată de a imita comportamentul uman. Conform şefului departamentului de robotică, You Bum-Jae, Mahru-Z excelează prin capacitatea de a vizualiza obiecte, recunoaşte şi executa anumite acţiuni.

Mahru-Z are 1.3 metri înălţime, cîntăreşte 55 kilograme şi au fost necesari 2 ani pentru dezvoltarea sa. Institutul de ştiinţă şi tehnologie Coreean investeşte în jur de 3.5 milioane dolari în robotică.

Cu toate că mai sînt necesari ani buni pînă ca un astfel de robot să poată fi produs pe scară largă, eu unul m-aş înscrie pe listă, mai ales dacă ar şti să organizeze şi să plătească facturile.Cine se mai înscrie pe listă?

Articol apărut pe site-ul stiinta.info și în ziarul Cronica Română (versiunea tipărită) din data de 2 Februarie 2010. Sursa originală: AFP

See more in ROM

Încă un pas spre calculatoarele cuantice

Created by Alin Brindusescu on 2011-01-28 13:48:28

Rezultate publicate recent în Applied Physics Letters şi  Nano Letters , de către cei de la univestiatea din New South Wales din Sydney, reprezintă un pas extrem de important în realizarea primelor calculatoare cuantice.

Prima dintre realizări a fost localizarea unui singur electron într-un dispozitiv de siliciu, fără ca acesta să fie ataşat vre-unui atom. Acest electron fiind denumit punct cuantum("quantum dot"). Ce-l de-al doilea raport a prezentat o modalitate de localizare a electronilor prin legarea acestora de atomi.

Realizarea unui computer cuantic depinde de capacitatea de a localiza, observa şi manipula particule elementare de tipul electronilor. Practic de a determina şi manipula spin-ul unui electron. Prin observarea şi manipulare spinului electronilor se pot reprezentări binare de tipul celor existente în calculatoarele actuale.

Realizarea unui calculator cuantic ar duce la o creştere exponenţială a puterii de calcul spre deosebire de creşterile liniare generate actuale bazate pe legea lui Moore (care în curînd îşi va atinge limitele). Un astfel de calculator ar putea ajuta omenirea duce la accelerarea cercetării în multe domenii. Domenii în care doar simularea unui model cu un anumit set de parametri necesită la ora actulă luni de procesare în ferme de calculatoare de dimensiuni extrem de mari.

Articol apărut pe site-ul stiinta.info și în ziarul Cronica Română (versiunea tipărită) din data de 12 Ianuarie 2010.

See more in ROM

Getting the content of a string without the last column

Created by Alin Brindusescu on 2011-01-24 07:17:41

This days I need a Linux command line to extract the a part of a string without the last column.
My problem: I had, in a file, some strings like this:

 
# less test.txt
String_With_4_Columns
String_With_More_Than_4_Columns
With_Less
 
and I had to find a simple way to remove the last word after "_". This will not work with cut because the number of columns is variable so I can't specify what columns I want. The solution I had for this problem was to use awk:
 
# awk -F_ '{ print substr($0, 0, length($0) - (length($NF)==length($0)?0:length($NF) + 1)) }' test.txt
String_With_4
String_With_More_Than_4
With
 
See more in ENG ROM

A small tutorial on integrating Eclipse, Qt and OpenCV

Created by Alin Brindusescu on 2011-01-23 13:21:40

A small tutorial on how configure Eclipse, Qt Library, Qt Integration plugin for Eclipse and the OpenCV library for developing image processing applications.
The tutorial can be use for any other external library. I have wrote this tutorial because I didn't knew how to add the OpenCV library path to a Qt Gui Project generated with the Qt Integration plugin for Eclipse and I spend some time finding out how to do this.

Some time ago I start to develop a small application using the Qt and OpenCV. Because sometime I'm not feeling comfortable with the vi editor I chose to use Eclipse with the CDT and Qt integration plugins. I will present all the steps that necessary for compiling such an application with more details of how to add the include and library's paths of the OpenCV. I found this a bit difficult and not documented anywhere and I had to spend two days trying to get the code compiled.

  • If you run an Microsoft Windoze machine you have to install first the MinGW tool set. Not my favorite OS and if you pay for that OS you should pay for help also :D.
    In the Linux environment you should have a look that the development tools are installed.
    You can find a lot of details about this procedure (for both Linux and windows) on the internet so I will not go into details here.
  • Download and install Eclipse with CDT plugin
  • Download and install the Qt library. If you have an Linux OS usually the Qt library is installed and you have to verify if you have at least version 4.1.0 for the Qt library, if you have an older version you have to install a newer version of the Qt library. I will not go too much in details here because this information can be found on the Trolltech website.
  • Download and install the Qt Eclipse integration plugin. The windows installer will do all the necessary things for you, in the Linux environment you have to unpack the content of the archive in the eclipse plugin directory with the usual
    tar zxvf
    command.
  • Download and install the OpenCV library.
    In the microsoft windoze environment the installer will do all the job for you and probably it will install the OpenCV in C:\\Program Files\\OpenCV.
    In the Linux environment you have to compile the OpenCV library by your own, let's say you downloaded the
    opencv-1.0.0.tar.gz
    and you are in the directory where you downloaded the OpenCV. Here are the steps needed to get the OpenCV installed:
    # tar zxvf opencv-1.0.0.tar.gz
    # cd opencv-1.0.0
    # ./configure --prefix=/usr/local
    # make
    # sudo make install
    
    After executing this steps (for the 1.0.0 version) the OpenCV headers files can be found here:
    /usr/local/include/opencv
    and the OpenCV librarys here:
    /usr/local/lib
    .
  • Now everything is on place and we can start creating an Qt Gui Application. The steps are similar for windoze and Linux with the only difference of the include and lib paths.
    Let's start creating one Qt Gui Project:



    In the first window of the Create Qt Gui Project we have to give a name for the project and select the path where the project will be created:



    After clicking Next we can change the filenames and select the type of the user interface (QDialog, QMainWindow and QWidget), in my example I chose QDialog to create a dialog based application.



    Clicking Next again the wizard will let us chose some other Qt modules to be included in the project.



    After clicking Finish and compiling the application, the result of the run will be a dialog like in the following picture:



    Now let's start configuring the generated project in order to be able to integrate the OpenCV support. Because the Makefiles of the project are generated automatically we can not add the include path and the library path by manually editing the Makefiles. For this reason we have to modify the .pro file of the created project.
    By double clicking on the .pro file (marked on blue on the following image) the project editor window will open, there we can chose to add more variable to the project (2) and if the Advanced Mode is selected we can give any name for the variable (3), if is not selected we can chose only from some standard defined variable names.


    To add the include path for the OpenCV include files we define first a new variable:



    With the Advanced More unselected (1) we can chose the variable name, "Include Path", from already defined list (2)



    To add the path to the variable we have to click on New button (1) from the Edit Include Path frame:



    Now we have to add the libdir and libs flags (how this should be done in the windows environment I'm not very sure).
    We make sure that the Advance Mode is selected, we create a New Variable (1) and we give the name LIBS to this variable (2) selecting the Append as Assignment Operator.



    We have to add the following content to the variable(2),
    -L/usr/local/lib -lcxcore -lcv -lhighgui -lcvaux




    After all this steps are done now the project is ready to be compiled with OpenCV support and you can add all the include and functions of the OpenCV library to your source code.
    In the same way we can include any external library to a Qt Gui Project, by replacing the OpenCV with the library we need.

See more in ENG

Structura rețelei

Created by Alin Brindusescu on 2011-01-22 15:39:26

In cele ce urmeaza voi prezenta citeva notiuni fundamentale necesare studiului retelelor neuronale. Vor fi discutate urmatoarele subiecte: unitati functionale, arhitectura retelei, funcionare, invatare. Asa cum in natura toate organismele sint formate din celule (unitati functionale) care se aseaza apoi intr-o anuita ordine pentru a forma un organism (arhitectura) si care au anumit ciclu de viata, la fel si in cazul retelelor neuronale vom avea unitati cu o funcionare simpla care se vor interconecta pentru a realiza operati mai complexe respectind o anumita arhitectura si care vor avea o functionare bine stabilita. Pe linga aceasta deoarece retelele neuronale modeleaza functionarea creierului uman mai e nevoie si de un proces de invatare astfel incit structura creata sa poata avea o anumita utilitate.

Deoarece retelele neuronale modeleaza functionarea creierului uman voi incepe prin a vorbi despre creierul uman si modul de functionare al neuronului biologic si abia apoi despre modelul artificial. nDin punctul de vedere al procesarii informatiei la nivelul creierului uman pot fi distinse 3 nivele:

  • nivel structural: neuroni, conexiuni, regiuni
  • nivel fiziologic: modul in care se proceseaza informatia la nivelul creierului din punct de vedere fizic si chimic
  • nivel cognitiv: modul in care oameni gindesc.
Inainte de a putea trece la un model artificial consider ca merita acordata putina atentie unor subiecte ca structura si organizarea creierului, paralelismul si robustetea de care da dovada creierul uman ca si sistem de comunicatii, invatarea, capacitatea de generalizare.
Modelul neuronului biologic
Cu toate ca celulele nervoase (neuroni) au multe caracteristici comune cu celelalte celule ale corpului uman ele se evidentiaza prin capacitatea de a capta, procesa si transmite semnale electromagnetice de-a lungul conexiunilor sinaptice.
Fig. 1. Neuronul biologic

Dupa cum se poate observa (fig.1) neuronul este compus din corp neuronal si una sau mai multe ramificatii. Ramificatiile sint de doua tipuri:
  • dendrite - conduc impulsul electromagnetic dinspre exterior spre corpul neuronal
  • axon - conduc impulsul electromagnetic dinspre corpul neuronal spre exterior.
Interactiunea dintre neuroni are loc prin intermediul unor puncte de contact dintre axonul unui neuron si dendrita altui neuron, numite sinapse (intre dendrita si axon exista un spatiu liber foarte mic, practic nu exista contact direct).La nivelul sinapselor au loc fenomene de natura fizico-chimica destul de complexe care in mare pot fi descrise astfel: membrana neuronului transmitator (membrana presinaptica) elibereaza un transmitator in spatiul sinaptic, membrana neuronului receptor (membrana postsinaptica) receptioneaza acest stimul si ca urmare are loc o modificare a permeabilitati ionice (depolarizare). Permeabilitatea membranei se modifica proportional cu suma algebrica a tuturor potentialelor receptionate in toate partile postsinaptice (toate dendritele) ale neuronului. Daca rezultatul depaseste o anumita valoare prag, atunci se genereaza un potential de actiune (PA) care se transmite de-a lungul axonului. Dupa efectul pe care il provoaca, sinapsele pot fi: excitatoare sau inhibitoare dupa cum depolarizarea provocata poate fi pozitiva respectiv negativa. S-a observat ca stimulind succesiv acceasi pereche de neuroni are loc o crestere a permeabilitatii sinapsei corespunzatoare, acest rezultat stind la baza procesului de invatare folosit in domeniul retelelor neuronale artificiale. Cercetarile in domeniu au aratat ca potentialele de actiune (PA) au amplitudinea constata, amplitudinea ne depinzind de intensitatea si durata stimulilor acestia influentind doar frecveta potentialelor de actiune. Un stimul suficient de intens si de durata provoaca nu doar un potential de actiune ci un tren de impulsuri (secventa de PA). La nivelul creierului neuroni se diferentiaza ca forma (piramidali, granulari, in forma de cos, etc) si functionalitate, s-a observat o corelatie intre forma si functionalitate, astfel celulele cu o forma piramidala sint excitatorii iar cele care au o forma de cos sint inhibitorii. Interconectarea celor aproximativ 1011 este asigurata de o retea de ramificatii cu o lungime totala de aproximativ 1014 m, fiecare neuron avind in medie 104 conexiuni. Prezenta unui asa numar mare de legaturi determina functionarea puternic paralela a creierului uman. Creierul uman are capacitatea de a invata si a generaliza. Astfel el este capabil sa analizeze probleme complexes si sa reactioneze intr-un mod adecvat ca raspuns la situatii noi.
Modelul neuronului artificial
Facind o comparatie cu neuronul biologic putem spune ca wi corespunde permeabilitatii sinaptice, corpul neuronal fiind implementat cu ajutorul functiilor G si f, y reprezinta semnalul transmis de-a lungul axonului, iar xi fiind transmitatori eliberati in spatiul sinaptic.
Fig. 2. Modelul neuronului artificial

Neronul artificial este complet codificat numeric si prelucrarile sint modelate matematic. Neuronul artificial efectueaza urmatoarele prelucrari:
  • integreaza - semnalele de intrare, xi, tinind cont de ponderea asociata
  • transforma semnalul "integrat", s, prin aplicarea unei functii de transfer, rezultind astfel un semnal de iesire.
In general ca si functie de integrare se foloseste o combinatie liniara intre parametrii de intrare si ponderile asociate. In tabelul 1 sint date citeva exemple de functii de integrare pentru neuronul din figura 2 dar si pentru cazul general (unde am considerat ca un neuron i primeste semnale, GW, de la iesirile altor N neuroni iar ponderile se afla intr-o matrice W).
Tabel 1. Exemple de functii de integrare

Exemplul fig.2Cazul general
Combinatie liniara
Distanta euclidiana
regula de propagare pentru
neuronul sigma-pi

Rezultatul functiei de integrare G, la care se adauga si x0 (intrare numita "offset"), notata in figura 2 cu s (s=G(X)-w0), va fi folosit ca valoare de intrare pentru functia de transfer f, in tabelul 2 avem prezentate citeva dintre cele mai folosite functii de transfer.
Tabel 2. Exemple de functii de transfer
Denumire y = f(s) Grafic
Functia treapta y = 0, daca s < 0
y = 1, daca s ≥ 0
Functia signum y = -1, daca s < 0
y = +1, daca s ≥ 0
Functia liniara y = s
Functia rampa y = -1, daca s < -1
y = s, daca -1 ≤ s ≤ 1
y = +1, daca s > 1
Functia sigmoidala
Functia tangenta
hiperbolica
Functia competitiva y = 1, pentru neuronul cu s maxim
y = 0, pentru toti ceilalti neuroni

Daca pentru functia de integrare se foloseste in general o combinatie liniara intre parametrii de intrare si ponderile asociate, functia de transfer este aleasa tininduse cont de modelul de retea neuronala folosit si de tipul de problemei pe care urmeaza sa o rezolvam (de exemplu daca stim ca avem de aproximat un anumit o anumita functie e bine sa alegem functia de transfer cea mai apropiata de tipul respectiv). Acest model matematic al neuronului artificial a fost propus pentru prima data de McCullogh si Pitts si cu toata simplitatea sa este un instrument de calcul extrem de puternic. Dupa rolul pe care il indeplinesc unitatile functionale in cadrul retelei putem sa le impartim in 3 categorii:
  • unitati de intrare - conecteaza reteaua la mediu. Au doar rolul de a retransmite semnalul primit de la mediu catre alte unitati din retea. Nu efectueaza nici un fel de procesari asupra semnalului.
  • unitati ascumse - sint conectate cu alte unitati ale retelei, nu comunica direct cu mediul. Primesc, proceseaza si distribuie semnalele catre alte unitati ale retelei.
  • unitati de iesire - colecteaza semnalele de la celelalte nivele, proceseaza semnalul si il transmit mediului extern.
Arhitectura
In mod normal o singura unitate functionala (un nenuron), cu oricit de multe intrari, nu este sufiecient. Avem nevoie de mai multi neuroni grupati pe nivele, cu diferite modalitati de interconectare. Arhitectura retelei se refera la modul in care sint amplasate unitatile functionale (topologie) si la modul de interconecare (conectivitate). Modul de interconectare al unitatilor functionale determina fluxul informational (modul in care informatia circula in cadrul retelei). Cele mai frecvente cazuri sint cele in care cele 3 tipuri de unitati functionale enumerate anterior formeaza multimi distincte, reteaua fiind organizate pe nivele (un nivel de intrare, unu sau mai multe nivele ascunse, un nivel de iesire), un caz particular fiind cel in care nivelele ascunse lipsesc (reteaua fiind constituita doar dintr-un nivel de intrare si unul de iesire). In figura nr. 3 avem o retea neuronala structurata pe nivele cu un nivel de intrare format in N unitati funcionale, 2 nivele ascunse formate din H1 respectiv H2 unitati functionale si un nivel de iesire format din M unitati functionale.
Fig. 3. Retea neuronala organizata pe nivele
Exista si tipuri de retele unde nu se face distinctie intre unitatile de intrare si iesire, toate unitatile preiau semnale din mediu, prelucreaza semnalele si transmit rezultatele atit mediului cit si altor unitati din retea.
In functie de modul de amplasare al unitatilor putem distinge urmatoarele tipuri:
  • retele unde pozitia unitatilor nu este importanta, ea nu influenteaza nici functionarea, nici algoritmii de invatare. Cu toate ca in reprezentarile schematice unitatile de acelasi nivel sint reprezentate grupat pozitia lor nu are nici un fel de importanta.
  • retele in care este esentiala organizarea geometrica. In acest tip de organizarea pozitia unitatilor functionale depinde de relatiile de vecinatate dintre unitati (aceste relatii de vecinatate intervin in algoritmul de functionare sau cel de invatare).
Fig. 4. Retea Kohonen (organizare geometrica a nivelului de iesire)
Bazate pe modul de amplasare a unitatilor avem umratoarele topologii pentru retelele neuronale:
  • topologie arbitrara - nu este definita nici o relatie de ordine pe multimea unitatilor functionale
  • topologie pe nivele - unitatile sint impartite in submultimi (nivele)
  • topologie cu structura geometrica - unitatile sint amplasate in nodurile unei grile unidimensionale, bidimensionale si mai nou chiar tridimensionale. In cazul amplasari unitatilor pe nivele conectivitatea dintre doua nivele poate fi totala, locala, partiala (fig. 5). Intre unitatile unui nivel putem avea conexiuni laterale (acest tip de conexiuni este specific retelelor care au o topologie cu structura geometrica), inverese (prin care o unitate este conectata cu ea insasi).
Fig. 5. Conectarea unitatilor de pe 2 nivele
Mai putem avea conexiuni peste nivele (in cazul retelelor cu mai multe nivele), conexiuni bidirectionale (specifice retelelor recurente), sau retele hibride in care avem conexiui uni si bi directionale (fig. 6).
Fig. 6. Conectarea nivelelor
Modul in care unitatile functionale sint interconectate determina fluxul informational:
  • feed-forward - flux unidirectional, dinspre intrare spre iesire (tipic retelelor organizate pe nivele in care nu exista conexiuni inverse. Pentru acest tip avem o functionare neiterativa , semnalul de iesire se calculeaza prin aplicarea unei functii asupra semnalului de intrare (fig.7).
  • feed-back - flux multidirectional, semnalul produs de o unitate ajunge inapoi la acea unitate. Acestui tip de flux informational ii este specifica o functionare iterativa pentru ca o singura trecere a semnalului de intrare nu este suficienta pentru obtinerea semnalului de iesire (fig. 8).
Fig. 7. Functionare neiterativa
Fig. 8. Functionare iterativa
Pe linga arhitectura, conectivitate mai e nevoie de inca ceva pentru ca o retea neuronala sa fie intr-adevar folositoare, si anume un proces de invatare prin care reteaua sa poate acumula cunostiinte (achizitie de cunoastere). Procesul de invatare este in fapt un proces de modificare a ponderilor asociate conexiunilor intre unitatile functionale ale retelei. Toti algoritmi de invatare au la baza variatii ale reguli enuntate in 1949 de Hebb. Ideea de baza e ca atunci cind doua unitati j si k sint activate simultan conexiunea dintre ele trebuie intarita:
unde γ este rata de invatare. O alta regula des folosita este regula delta sau Widrow-Hoff:
unde γ este rata de invatare iar dk este iesirea dorita. Avantajul cel mai mare al retelelor neuronale este ca datorita procesului de invatare nu este necesara o formalizare detaliu a problemei de rezolvat, sint suficiente exemple, reteaua acumulind cunostiinte pe baza lor. Un alt mare avantaj care rezulta din acest tip de functionare este ca reteaua este capabila sa furnizeze raspunsuri corecte si la date pentru care ea nu a fost antrenata, spunem ca reteau este capabila sa generalizeze. Pentru ca achizitia de cunoastere sa aiba loc avem nevoie de:
  • o multime de informatii (exemple)
  • un algoritm de invatre (adaptare)
Pe baza tipului de informatii pe care le avem disponibile pentru procesul de invatare, aceasta poate fi:
  • nesupervizata - in acest caz avem la dispozitie doar date de intrare pentru retea, ea descoperind trasaturile statistice ale populatiei. Sistemul dezvolta o reprezentare proprie a intrarilor.
  • supervizata - in acest caz avem la dispozitie un set de antrenare (un set de intrari impreuna cu iesirile corespunzatoare), reteaua adaprindu-si ponderile pentru a produce iesirea dorita atunci cind ca si date de intrare avem datele de intrare asociate. Aceasta asociere intre datele de intrare poate fi data de un factor extern sau chiar de reteaua insesi (auto-supervizata).
O prezentare aferenta acestui subiect este disponibila aici.



Biblioigrafie:

  1. Daniela Zaharie, "Curs Retele neuronale"
  2. Ben Krose and Patrick van der Smagt, "An introduction to Neural Network", Amsterdam, 1996, University of Amsterdam.
  3. Nikola K. Kasabov, "Foundation of Neural Networks, Fuzzy systems, and Knowledge Engineering", Cambridge, The MIT Press, 1998.
  4. Bernard Widrow and Michael A. Lehr, "30 Years of adaptive neural networks: Perceptron, Madaline, and Backpropagation",Proceedings of the IEEE, vol. 78 no.9, September 1990.
  5. Dave Anderson and George McNeill,"ARTIFICIAL NEURAL NETWORKS TECHNOLOGY", Kaman Sciences Corporation, 1992, New York.
  6. Dumitrescu, D., Costin, H. - Retele neuronale; teorie si aplicatii. Teora, Bucuresti, 1996.

See more in ROM

Search

Ads