Tworzenie zestawów danych do szkolenia z Caffe Oboje próbowaliśmy używać HDF5 i LMDB. Jednak tworzenie LMDB jest bardzo wolne, nawet wolniejsze niż HDF5. Próbuję napisać ~ 20 000 obrazów.Zapisywanie danych do LMDB z Pythonem bardzo powolne
Czy robię coś strasznego? Czy jest coś, czego nie jestem świadomy?
To jest mój kod do tworzenia 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()
Jak widać tworzę transakcji na każde 1000 zdjęć, bo myślałem, tworząc transakcji dla każdego obrazu spowodowałoby obciążenie, ale wydaje się, to nie wpływa zbytnio na wydajność.
dlaczego nie używając [ 'convert_imageset'] (http://stackoverflow.com/a/31431716/1714410) narzędzie? – Shai
@Shai: Właściwie nie wiedziałem o tym, ale nie mam też moich zdjęć jako plików. Ale dlaczego miałoby być szybciej? Czy implementacja Pythona jest tak powolna? – Simikolon
Pracuję z 'convert_imageset' do woek na ilsvrc12 (imagenet) konwertując zestawy danych ~ 1M obrazów, to zajmuje trochę czasu, ale działa. – Shai