Creazione di serie di dati per l'allenamento con Caffe Entrambi ho provato a utilizzare HDF5 e LMDB. Tuttavia, la creazione di un LMDB è molto lenta anche più lentamente di HDF5. Sto cercando di scrivere ~ 20.000 immagini.Scrittura dei dati su LMDB con Python molto lento
Sto facendo qualcosa di terribilmente sbagliato? C'è qualcosa di cui non sono a conoscenza?
Questo è il mio codice per la creazione LMDB:
DB_KEY_FORMAT = "{:0>10d}"
db = lmdb.open(path, map_size=int(1e12))
curr_idx = 0
commit_size = 1000
for curr_commit_idx in range(0, num_data, commit_size):
with in_db_data.begin(write=True) as in_txn:
for i in range(curr_commit_idx, min(curr_commit_idx + commit_size, num_data)):
d, l = data[i], labels[i]
im_dat = caffe.io.array_to_datum(d.astype(float), label=int(l))
key = DB_KEY_FORMAT.format(curr_idx)
in_txn.put(key, im_dat.SerializeToString())
curr_idx += 1
db.close()
Come potete vedere sto creando una transazione per ogni 1.000 immagini, perché ho pensato di creare una transazione per ogni immagine creerebbe un sovraccarico, ma sembra questo non influenza troppo le prestazioni.
perché non stai usando il [ 'convert_imageset'] (http://stackoverflow.com/a/31431716/1714410) strumento? – Shai
@Shai: In realtà non ne ero a conoscenza, ma non ho nemmeno le mie immagini come file. Tuttavia, perché dovrebbe essere più veloce? L'implementazione di Python è così lenta? – Simikolon
Sto lavorando con 'convert_imageset' su woek su ilsvrc12 (imagenet) convertendo i dataset di ~ 1M immagini, ci vuole un po 'ma funziona. – Shai