Ho bisogno di aiuto per creare un CaffeDB per la CNN siamese su una semplice directory con immagini e file di testo dell'etichetta. Il migliore sarebbe un modo Python per farlo.
Il problema non è quello di camminare nella directory e creare coppie di immagini. Il mio problema è più di far uscire un CaffeDB da quelle coppie.
Finora ho utilizzato solo convert_imageset
per creare un CaffeDB fuori da una directory di immagini.
Grazie per l'aiuto!Come creare i dati di allenamento di CaffeDB per le reti siamesi fuori dalla directory delle immagini
risposta
Perché non è sufficiente creare due dataset utilizzando il buon vecchio convert_imagest
?
layer {
name: "data_a"
top: "data_a"
top: "label_a"
type: "Data"
data_param { source: "/path/to/first/data_lmdb" }
...
}
layer {
name: "data_b"
top: "data_b"
top: "label_b"
type: "Data"
data_param { source: "/path/to/second/data_lmdb" }
...
}
Per quanto riguarda la perdita, dal momento che ogni esempio ha un'etichetta di classe è necessario convertire label_a
e label_b
in un same_not_same_label
. Ti suggerisco di fare questo "al volo" usando un livello python. Nel prototxt
aggiungere la chiamata a livello di pitone:
layer {
name: "a_b_to_same_not_same_label"
type: "Python"
bottom: "label_a"
bottom: "label_b"
top: "same_not_same_label"
python_param {
# the module name -- usually the filename -- that needs to be in $PYTHONPATH
module: "siamese"
# the layer name -- the class name in the module
layer: "SiameseLabels"
}
propagate_down: false
}
Creare siamese.py
(assicurarsi che sia nel vostro $PYTHONPATH
). In siamese.py
si dovrebbe avere la classe di livello:
import sys, os
sys.path.insert(0,os.environ['CAFFE_ROOT'] + '/python')
import caffe
class SiameseLabels(caffe.Layer):
def setup(self, bottom, top):
if len(bottom) != 2:
raise Exception('must have exactly two inputs')
if len(top) != 1:
raise Exception('must have exactly one output')
def reshape(self,bottom,top):
top[0].reshape(*bottom[0].shape)
def forward(self,bottom,top):
top[0].data[...] = (bottom[0].data == bottom[1].data).astype('f4')
def backward(self,top,propagate_down,bottom):
# no back prop
pass
Assicurarsi di mescolare le esempi nei due set in modo diverso, in modo da ottenere le coppie non banali. Inoltre, se si costruisce la prima e la seconda serie di dati con diversa numero di esempi, poi si vedrà coppie diverse in ogni epoca;)
Assicurarsi che si costruisce la rete per condividere i pesi del duplicato strati, vedere this tutorial per ulteriori informazioni.
Non ho trovato nessun file siamese.py, né in caffe/python né in python2.7 dir installazione. Sto lavorando su Ubuntu 15.04 e ho ottenuto il ramo caffe-master nel 10/2015. C'è solo l'esempio mnist siamese e ho già progettato la rete come nel tutorial con parametro condiviso, solo l'inizio con l'input dei dati non mi è chiaro. Finora non uso un livello python. Ho appena definito la rete ed eseguo caffe con il comando del treno per un dato solver.prototxt. Mi piace: caffe train -solver solver.prototxt -gpu all. Il mio livello dati si riferisce alla directory con * .mdb e al file binaryproto medio – Feuerteufel
@Feuerteufel è necessario ** creare ** un file 'siamese.py' e assicurarsi che sia in' $ PYTHONPATH'. questo file dovrebbe contenere il codice nella domanda (insieme al corretto 'import's richiesto per importare caffe'). Se hai abilitato un livello Python nel tuo [Makefile] (https://github.com/BVLC/caffe/blob/master/Makefile.config.example#L82) di caffe eseguirà il codice python come parte del suo ' treno caffe'. – Shai
Ok, il livello Python non era abilitato quindi lo sto ricostruendo proprio ora. Le linee appropriate per le importazioni per siamese.py sono "import sys", "sys.path.insert (0, 'path/to/caffe/python')" e "import caffe" o qualcosa di più? Nel livello di perdita lo stesso nome_somma_label viene quindi utilizzato come terzo input? – Feuerteufel
- 1. jQuery estrae le immagini dalla directory
- 2. OpenShift Java - Usa l'immagine fuori dalla directory dei dati
- 3. Aggiornamento dei dati di allenamento per l'apprendimento supervisionato - come?
- 4. glob php - restituisce tutti i tipi di immagini dalla directory
- 5. Come rimuovere i dati di allenamento dai modelli party ::: ctree?
- 6. Tessaract OCR utilizza le reti neurali come meccanismo di allenamento predefinito
- 7. Come caricare i dati di allenamento in PyBrain?
- 8. Curva ROC dai dati di allenamento nell'accurpitura
- 9. Fuori dalla build di origine con scons?
- 10. Problemi nella comprensione delle reti neurali
- 11. Carica immagini dalla cartella delle risorse
- 12. Formazione SVM con descrittori di maiale di dimensioni variabili di immagini di allenamento (MATLAB)
- 13. Encog - Come caricare i dati di allenamento per la rete neurale
- 14. Previsione delle serie temporali di Pybrain utilizzando le reti ricorrenti LSTM
- 15. Reti neurali involutive e immagini 3D
- 16. Come si ottengono/definiscono i filtri nelle reti neurali convoluzionali?
- 17. Come visualizzare i dati grezzi delle immagini in sublime testo
- 18. Dimensioni delle immagini supportate dalla fotocamera Android
- 19. Le reti neurali per il rilevamento e-mail di spam
- 20. Tipi di dati algebrici al di fuori delle lingue funzionali?
- 21. In che modo il pre-allenamento migliora la classificazione nelle reti neurali?
- 22. Vantaggi dell'utilizzo di BufferBlockin reti di flussi di dati
- 23. : Come gestisco i dati fuori banda
- 24. Come definire il profilo delle reti TensorFlow?
- 25. Mappe di saliency delle reti neurali (usando Keras)
- 26. Carica tutte le immagini da una directory
- 27. Come ritagliare le immagini dalla fotocamera
- 28. puoi usare jquery lazyload su tutte le immagini (non solo quelle fuori dalla vista)
- 29. Apprendimento approfondito per la classificazione delle immagini
- 30. Come dividere i dati sul set di allenamento bilanciato e sul set di test su sklearn
quale strato di perdita hai intenzione di utilizzare? – Shai
Non lo so ancora. Per il mio caso d'uso ho alcune immagini (100k) per ogni classe (4 + garbage class) e voglio che la rete distingua meglio le classi. Con la CNN "normale" ci sono stati molti errori della rete e ho pensato di provare una CNN siamese per fare in modo che la rete imparasse meglio le differenze. Se hai qualche suggerimento sullo strato di perdita, per favore dimmelo. – Feuerteufel
strati di perdita contrastiva sembra essere adatto per questo caso d'uso. – Shai