caffe - 创建 LMDB 时限制 RAM 使用

标签 caffe lmdb

我正在尝试创建一个 LMDB,其中包含 6 个串联图像作为标签。我的 python 脚本如下所示:

in_db = lmdb.open('image-lmdb', map_size=int(1e12), writemap=True) 
with in_db.begin(write=True) as in_txn:
    for in_idx, in_ in enumerate(inputs):
        im = np.array(Image.open('train_label_1/' + in_)) 
        im = im[:,:,1]
        c.append(im)

        im = np.array(Image.open('train_label_2/' + in_)) 
        im = im[:,:,1]
        c.append(im)

        im = np.array(Image.open('train_label_3/' + in_)) 
        im = im[:,:,1]
        c.append(im)

        im = np.array(Image.open('train_label_4/' + in_)) 
        im = im[:,:,1]
        c.append(im)

        im = np.array(Image.open('train_label_5/' + in_)) 
        im = im[:,:,1]
        c.append(im)

        im = np.array(Image.open('train_label_6/' + in_)) 
        im = im[:,:,1]
        c.append(im)

        d = np.array(c)
        im_dat = caffe.io.array_to_datum(d)
        in_txn.put('{:0>10d}'.format(in_idx), im_dat.SerializeToString())
in_db.close()

我有两个问题:

  1. ma​​p_size 应该有多大? 我大约有 140,000 个标签。标签内的每个图像的大小为 45 x 45。因为我仅使用每个图像的一个维度,所以我猜测每个像素都是一个字节。所以我的猜测是,map_size 应该是 45*45*6*140,000 字节。但是,如果我将 map_size 设置为该值,则会在 528 个标签后收到 MapFullError: mdb_put: MDB_MAP_FULL: Environment mapsize limitreached

  2. 如果我将 map_size 设置为 1e12,我不会那么快得到 MapFullError。但 RAM 使用率却接近 100%。 创建 lmdb 时是否可以限制 RAM 使用?

编辑

为了减少 RAM 使用量,我尝试按描述迭代 lmdb here :

for idx in range(int(math.ceil(len(inputs)/1000.0))):
    in_db = lmdb.open('image-lmdb', map_size=int(1e12))#, writemap=True
    with in_db.begin(write=True) as in_txn:
        for in_idx, in_ in enumerate(inputs[(1000*idx):(1000*(idx+1))]):
            im = np.array(Image.open('train_label_1/' + in_)) 
            im = im[:,:,1]
            c.append(im)

            im = np.array(Image.open('train_label_2/' + in_))
            im = im[:,:,1]
            c.append(im)

            .
            .
            .

            d = np.array(c)

            im_dat = caffe.io.array_to_datum(d)
            in_txn.put('{:0>10d}'.format(in_idx + idx * 1000), im_dat.SerializeToString())
    in_db.close()

但是 RAM 使用率仍然达到 99%,并且 lmdb 的写入速度非常慢。

最佳答案

我发现了我的错误。我忘记在每次迭代后重置数组 c

关于caffe - 创建 LMDB 时限制 RAM 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48022977/

相关文章:

ssh - 如何使用 X11 转发运行 py-faster-rcnn

python - 运行Caffe时出现两个错误

deep-learning - 使用 Caffe 进行多标签分类

postgresql - 为什么 postgres 比 LMDB 更快?

database - 为什么 LMDB 数据库占用的数据量超过实际数据量?

python-3.x - TensorFlow中的对抗图像

amazon-web-services - 咖啡 |检查失败 : error == cudaSuccess (2 vs. 0) 内存不足

machine-learning - `caffe' : malloc(): memory corruption when snapshotting to disk

python - Caffe & python,读取标签结构复杂的LMDB