Table of Contents
iSpike
http://ispike.sourceforge.net/pages/download.html
- Robot utilizzabili: iCub, Cronos, SIMNOS
- Vedere ricerca collegare_braccio_e_mente_2010
Si può utilizzare questa libreria C++ per scrivere un programma che trasforma un file immagine, o altri input, in una serie di impulsi da inviare ad una rete neurale (e viceversa impulsi provenienti da una rete neurale agli attuatori di un robot).
Il programma ottenuto si troverà in mezzo tra il robot e il simulatore di rete neurale. Questo programma dovrà usare anche un'altra libreria per accedere alle risorse del robot, oltre che una per accedere alla rete neurale o per simulare una rete neurale:
- Da un lato è stato usato con YARP per comunicare con il robot iCub. L'utente deve solo fornire al programma l'indirizzo IP e la porta del server YARP.
- Dall'altro lato può essere usato con qualsiasi software per reti neurali che supporti una libreria in C++, come NeMo (SpikeStream).
Per poter interagire con NeMo si può usare SpikeStream
[YARP] ↔ [programma con iSpike] ↔ [NeMo]
Espansione del precedente schema
[YARP/file] → [reader] → [input channel] → [un vector in C++] → [SpikeStream / NeMo]
[YARP/file] ← [writer] ← [output channel] ← [un vector in C++] ← [SpikeStream / NeMo]
- [reader] e [writer] si occupano della lettura dei dati
- [channel] si occupano della trasformazione in spike
Esempio: un oggetto AngleReader legge un angolo e lo passa ad un canale JointInputChannel che lo trasforma in modo da poterlo fornire come input ad una rete neurale.
I tempi con cui si inviano impulsi alla rete neurale devono essere sincronizzati con i passi con cui avanza temporalemente la rete neurale (ad es. passi di 1 ms)
Il numero di neuroni della rete (le dimensioni della rete) a cui sono destinati gli spike prodotti è uno dei parametri che si devono fornire alle funzioni di iSpike
Installazione
dipendenze
boost (come nemo)
mkdir build cd build cmake .. -configurazione? -generazione? make make install
NOTA: modificando un sorgente ricompila solo quello compilato (devi usare make clean)
NOTA2: aggiungere un nuovo file sorgente RICHIEDE anche modificare nel file src/CMakeLists.txt la riga SET(project_SRCS)
Codifica dei dati
Se si vuole trasformare un numero o un file in una serie di impulsi neurali, come fare?
iSpike adotta la tecnica population coding, vista nella codifica degli impulsi
YARP
Il protocollo di comunicazione testuale usato da iSpike per comunicare con YARP è descritto qui wiki.icub.org/yarpdoc/yarp_without_yarp.html
Performance
Usando neuroni con modello Izhikevich
Propriocezione
- 100 neuroni per codificare l'angolo di un motore
- x 53 motori da misurare per iCub
- webcam 320×200 = 7680 pixel
- scomposta in 3 immagini dal preprocessamento immagini (simulazione foveation)
Devo usare due elaboratori perché non riesce ad elaborare immagini in tempo reale
ispike esempio2 con pezzo di NeMo