lmdb.MapFullError: mdb_put: MDB_MAP_FULL: Environment mapsize limit reached

报错信息:

lmdb.MapFullError: mdb_put: MDB_MAP_FULL: Environment mapsize limit reached
Write GOPR0884_11_00-000266_s006: 99%|█████████▉| 16670/16824 [11:18<00:06, 24.57chunk/s]


问题描述

报错信息

lmdb.MapFullError: mdb_put: MDB_MAP_FULL: Environment mapsize limit reached
Write GOPR0884_11_00-000266_s006:  99%|█████████▉| 16670/16824 [11:18<00:06, 24.57chunk/s]

原因分析:

提示:这里填写问题的分析:

写入的数据超出默认值,解决方法:
路径basicsr\utils\lmdb_util.py下115行
也可以自己在当前你工程下全局搜索一下

# 对map_size进行设置max_size为1e9kb(int(1e9)),大小可调整,也可以设置数,打印大小55483701360,按照自己电脑设置
env = lmdb.open(lmdb_path, map_size=int(1e9))

自己的理解分析:

个人理解:
图像映射的大小,这个map_size的大小应该是图像占多少个字节,可能和图片的size类似,这个大小是可以调整的,调整的大做映射消耗的时间就少。

官方代码解释:
map_size:
Maximum size database may grow to; used to size the memory mapping.
If database grows larger than map_size, an exception will be
raised and the user must close and reopen :py:class:Environment.
On 64-bit there is no penalty for making this huge (say 1TB). Must
be <2GB on 32-bit.
… note::

            **The default map size is set low to encourage a crash**, so
            users can figure out a good value before learning about this
            option too late.

翻译:
最大大小的数据库可能会增长到;用于调整内存映射的大小。如果数据库增长大于“map_size”,将引发异常,用户必须关闭并重新打开:py:class:Environment。在 64 位上,使这个巨大(比如 1TB)没有任何惩罚。在 32 位上必须小于 2GB

默认地图大小设置得较低以鼓励崩溃,因此用户可以在太晚了解此选项之前找出一个合适的值。

下面是map_size的计算方式:

 	# create lmdb environment
    if map_size is None:
        # obtain data size for one image
        img = cv2.imread(
            osp.join(data_path, img_path_list[0]), cv2.IMREAD_UNCHANGED)
        _, img_byte = cv2.imencode(
            '.png', img, [cv2.IMWRITE_PNG_COMPRESSION, compress_level])
        data_size_per_img = img_byte.nbytes
        print('Data size per image is: ', data_size_per_img)
        data_size = data_size_per_img * len(img_path_list)
        map_size = data_size * 10
        print("map_size {}".format(map_size))

你可能感兴趣的:(python环境,NAFNet,opencv,人工智能,计算机视觉)