在创建 LMDB dataset 的时候,其中有一行是这个
env = lmdb.open(outputPath, map_size=21474836480)
想问一下map_size的设置是自己随意定吗?不用管数据集的多少?因为数据量比较大的时候,训练数据和测试数据数量差很大,但是生成的.mdb文件都是一样大的,达到了设置的20G
在创建 LMDB dataset 的时候,其中有一行是这个
env = lmdb.open(outputPath, map_size=21474836480)
想问一下map_size的设置是自己随意定吗?不用管数据集的多少?因为数据量比较大的时候,训练数据和测试数据数量差很大,但是生成的.mdb文件都是一样大的,达到了设置的20G
lmdb是一个高性能的内存数据库,它使用内存映射技术将数据存储在磁盘上。map_size
参数用于设置数据库的最大存储容量。默认情况下,它的大小是1GB。在设置map_size
时,确保其大于或等于数据集的总大小。如果设置的过小,可能会导致存储空间不足的错误。
要创建CRNN训练所使用的LMDB数据库文件,你可以按照以下步骤进行操作:
$ pip install lmdb
import lmdb
from PIL import Image
import numpy as np
import os
def transform_image(image_path):
"""
将图像转换为适合存储在LMDB中的格式。
"""
image = Image.open(image_path)
image = image.convert('L') # 将彩色图像转换为灰度图像
image = image.resize((image_width, image_height), Image.ANTIALIAS) # 调整图像大小
image_array = np.array(image) # 将图像转换为NumPy数组
return image_array
def transform_label(label):
"""
将标签转换为适合存储在LMDB中的格式。
"""
label_array = np.array(label, dtype=np.uint8) # 将标签转换为NumPy数组
return label_array
def create_lmdb_dataset(dataset_path, output_path, map_size):
"""
创建LMDB数据集。
"""
env = lmdb.open(output_path, map_size=map_size)
txn = env.begin(write=True) # 开始写环境事务
# 遍历数据集文件夹
for root, dirs, files in os.walk(dataset_path):
for file_name in files:
if file_name.endswith('.jpg'): # 假设图像文件的扩展名为.jpg
image_path = os.path.join(root, file_name) # 图像文件的完整路径
label = file_name.split('.')[0] # 文件名作为标签,假设没有文件名冲突
image_array = transform_image(image_path) # 转换图像
label_array = transform_label(label) # 转换标签
# 将图像和标签存储到LMDB中
txn.put(f'{os.path.basename(image_path)}'.encode(), image_array.tobytes())
txn.put(f'{os.path.basename(image_path)}_label'.encode(), label_array.tobytes())
txn.commit() # 提交事务
env.close() # 关闭环境
# 设置输入和输出路径
dataset_path = 'path/to/dataset' # 数据集的路径
output_path = 'path/to/output' # LMDB数据库文件的输出路径
map_size = 21474836480 # 设置存储空间大小,20GB
# 创建数据集的LMDB数据库文件
create_lmdb_dataset(dataset_path, output_path, map_size)
以上代码是一个示例,它假设你的数据集包含一系列的图像文件(假设为.jpg格式),并将图像文件名转换为标签。你可以根据你的数据集的实际情况进行修改。
注意:以上代码仅提供了一个基本的LMDB数据库文件创建过程示例,实际情况可能需要根据你的具体需求进行适当的修改和调整。