Tạo các tập dữ liệu để đào tạo với Caffe Tôi đã thử sử dụng HDF5 và LMDB. Tuy nhiên, việc tạo một LMDB rất chậm thậm chí còn chậm hơn HDF5. Tôi đang cố gắng viết ~ 20.000 hình ảnh.Ghi dữ liệu vào LMDB bằng Python rất chậm
Tôi đang làm điều gì đó khủng khiếp sai? Có điều gì tôi không biết?
Đây là mã của tôi để tạo 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()
Như bạn có thể thấy tôi đang tạo ra một giao dịch cho mỗi 1.000 hình ảnh, bởi vì tôi nghĩ rằng việc tạo ra một giao dịch cho mỗi hình ảnh sẽ tạo ra một chi phí, nhưng có vẻ như điều này không ảnh hưởng đến hiệu suất quá nhiều.
tại sao bạn không sử dụng [ 'convert_imageset'] (http://stackoverflow.com/a/31431716/1714410) công cụ? – Shai
@Shai: Thực ra tôi không biết, nhưng tôi cũng không có hình ảnh của tôi dưới dạng tệp. Mặc dù, tại sao nó phải nhanh hơn? Việc triển khai Python có chậm không? – Simikolon
Tôi đang làm việc với 'convert_imageset' để woek trên ilsvrc12 (imagenet) chuyển đổi tập dữ liệu của ~ 1M hình ảnh, phải mất một lúc nhưng nó hoạt động. – Shai