caffe con multi-label immagini

Ho un dataset di immagini che hanno più etichette; Ci sono 100 classi nel set di dati, e ogni immagine ha da 1 a 5 etichette associate.

Sto seguendo le istruzioni nel seguente URL:

https://github.com/BVLC/caffe/issues/550

Dice che ho bisogno di generare un file di testo che elenca i le immagini e le etichette come in

/home/my_test_dir/picture-foo.jpg 0
/home/my_test_dir/picture-foo1.jpg 1

Nel mio caso, dato che non ho multi-etichetta di immagini, funziona semplicemente aggiungere etichette come nel seguente?

/home/my_test_dir/picture-foo.jpg 0 2 5
/home/my_test_dir/picture-foo1.jpg 1 4

Ho la sensazione che probabilmente non sarà così semplice, e se ho ragione, in quale fase e come dovrei integrare il multi-etichetta-ness del set di dati nel processo di impostazione di Caffe?

InformationsquelleAutor ytrewq | 2015-09-20

 

3 Replies
  1. 21

    Credo Shai la risposta non è più up-to-date.
    Caffe supporta il multi-etichetta/matrice di verità a terra per HDF5 e LMDB formati.
    Il python frammento questo github commento dimostra come costruire multi-etichetta LMDB verità a terra (vedere Shai risposta per HDF5 formato).
    Diversi dalla costruzione di etichetta singola immagine di set di dati, un lmdb è costruito per le immagini, mentre un secondo separata lmdb è costruito per il multi-etichetta dati di verità a terra. Il frammento si occupa spaziale multi-etichetta di verità a terra utile per pixel-saggio di etichettatura delle immagini.

    L’ordine in cui i dati vengono scritti i lmdb è fondamentale. L’ordine della verità a terra deve corrispondere l’ordine delle immagini.

    Perdita di strati, come SOFTMAX_LOSS, EUCLIDEAN_LOSS, SIGMOID_CROSS_ENTROPY_LOSS anche il supporto multi-etichetta dati.
    Tuttavia, il livello di Precisione è ancora limitata a una sola etichetta dati. Si potrebbe desiderare di seguire questo problema github per tenere traccia di quando questa funzione viene aggiunto al Caffe.

    • Dal momento che ho 100 classi, e ogni immagine è contrassegnato da 1 a 5 classi da quelle 100, avrei probabilmente bisogno di un 1×100 matrice con voce 1 se l’immagine ha la classe come la sua etichetta e 0 altrimenti, per esempio. Python snippet nel codice si occupa di pixel-saggio di etichettatura, ma se vuoi più etichette su ogni immagine nel suo complesso?
    • Qualsiasi aggiornamento per la Precisione strato? hanno chiuso la questione.
  2. 5

    caffe supporta multilabel. Si può mettere le etichette in n-hot vettori, ad esempio, [0,1,1,0,0,1,…] . Hai bisogno di rimodellare le etichette a n*k*1*1 tensori e l’uso sigma cross-entropia o euclidea, non softmax (che impone di somma(uscite)=1 )

    • in realtà la rifusione nk*1*1 è unecesary, il mio male. nk è abbastanza (etichetta e netto di uscita dovrebbe essere d’accordo in dimensione)
    • Cerco questo, ma quando cerco di creare IMDB dai dati, caffe script di esempio, nel file di testo che ho l’indirizzo di ogni immagine e di un vettore di etichetta, non è possibile analizzare il testo correttamente il file così generato un errore che è impossibile trovare o aprire il file. qualche suggerimento??
    • se si stanno dando i percorsi relativi , assicurarsi che essi sono relativi a dove caffe è in esecuzione da – o, in alternativa , dare i percorsi assoluti . Se si dare qualche esempio di errore e le linee da file di testo può essere più facile per vedere cosa è successo. Se si utilizza LMDB quindi tutti i dati devono essere in quei file e non i file di testo sarà necessario
    • Grazie, ma cerco di sostituire l’etichetta di vettori con un numero e tutto va bene, quindi sono sicuro che c’è un problema a causa dei vettori come etichette
    • hai rifusione delle dimensioni dell’etichetta di n*k ? (dove n è batchsize e k è la dimensione del vettore)
    • no perché dovrei farlo?
    • la dimensione delle etichette è d’accordo con la dimensione caffe aspetta. c’è un sacco di segnali provenienti da caffe riguardanti le dimensioni e le dimensioni degli oggetti manipolati, assicurarsi che la dimensione di etichetta corrisponda la dimensione caffe aspetta e, se necessario, la rifusione delle dimensioni d’accordo.
    • Grazie, ma come ho detto sono bloccato nel convertire i dati LMDB fase e non c’è nessuna caffe rete di sicurezza. un modo per convertire i dati HDF5 formato.

  3. 3

    Per quanto ne so, corrente Caffe versione non supporta lmdb/leveldb set di dati per le immagini con multilabels. Tuttavia, si può (e forse deve) preparare gli ingressi in HDF5 formato. Caffe HDF5 livello di input, è molto più flessibile e permette di avere più etichette per ingresso.

    Questa risposta fornisce una breve descrizione di come creare HDF5 ingresso per il caffe.

    Un altro problema che si deve affrontare è il fatto che si sono interessati non solo in multi-label per immagini, ma anche con diverse numero di etichette per immagine. Come si fa a definire la perdita per l’immagine, per etichetta? potrebbe essere il caso che tu vorresti scrivere il tuo perdita di livello.

    Ci sono alcuni perdita di strati che supporta la funzione “ignora label”: che è, se una specifica etichetta di ingresso è assegnato all’immagine, nessuna perdita è calcolata per la rispettiva immagine. Si vedano, ad esempio AccuracyLayer e SoftmaxWithLossLayer.

    • Forse obsoleti risposta. Caffe supporta il multi-etichetta dati per più formati. Perdita livelli anche il supporto multi-etichetta dati. Tuttavia, la Precisione è ancora limitata a una sola etichetta dati.
    • non supporta virgola mobile etichette. Vedere qui.
    • vero non. Caffe supporta il caricamento float etichette da lmdb, leveldb, hdf5 generato tramite python. Nessun bisogno di convert_imageset.
    • Solo così c’è un riferimento, qui, Evan Shelhamer mettere in su questo tutorial multilabel uscite. Sicuro che è in python che è un dolore, se hai evitato pycaffe per la linea di comando, ma almeno ci dà la struttura a strati e risolutori per un esempio

Lascia un commento