def _infer_to_lmdb_cur_single_key(net, key_, n, db): ''' Run network inference for n batches and save results to an lmdb for each key. Higher time complexity but lower space complexity. Takes advantage if there is only a single key ''' idx = 0 with db.begin(write=True) as txn: for _ in range(n): d = forward(net, [key_]) l = [] l.extend(d[key_].astype(float)) for x in l: x = expand_dims(x, 3) txn.put(IDX_FMT.format(idx), caffe.io.array_to_datum(x).SerializeToString()) idx += 1 return [idx]
def _infer_to_lmdb_cur_multi_key(net, keys, n, dbs): ''' Run network inference for n batches and save results to an lmdb for each key. Higher time complexity but lower space complexity. See _infer_to_lmdb_cur_single_key() if there is only a single key ''' idxs = [0] * len(keys) for _ in range(n): d = forward(net, keys) for ik, k in enumerate(keys): with dbs[k].begin(write=True) as txn: l = [] l.extend(d[k].astype(float)) for x in l: x = expand_dims(x, 3) txn.put(IDX_FMT.format(idxs[ik]), caffe.io.array_to_datum(x).SerializeToString()) idxs[ik] += 1 return idxs