数据格式
lmdb是caffe训练网络用的数据格式,需要将原始的图片数据转换成lmdb
(caffe中也可以直接用jpg进行训练)
零拷贝(Zero Copy) 事务支持 单一层次结构
数据格式转换时间 读写锁限制 存储空间需求
LMDB数据库和索引文件
数据索引文件(如db.idx),记录每个图像在LMDB数据库中的位置信息
在Python中,我们可以使用lmdb库来完成这个任务。
格式
import lmdb
image_path='D:/hjb.jpg'
label='hjb'
env=lmdb.open('../data/hjb')
cache={}
with open(image_path,'rb') as f:
image_bin=f.read()
cache['image_000']=image_bin
cache['label_000']=label
with env.begin(write=True) as txn:
for k,v in cache.items():
if isinstance(v,bytes):
txn.put(k.encode(),v)
else:
txn.put(k.encode(),v.encode())
env.close()
Datum数据
Datum数据,这里再稍微介绍一下Datum的格式:
channels:图片的通道;
height:图片(即data)的高;
width:图片(即data)的宽;
data:图片的数据(像素值);
label:图片的label
代码
env = lmdb.open():创建 lmdb 环境
txn = env.begin():建立事务
txn.put(key, value):进行插入和修改
env=lmdb.open("../data/hjb",map_size=1099511627776)
for i in range(N):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = X.shape[1]
datum.height = X.shape[2]
datum.width = X.shape[3]
datum.data = X[i].tobytes()
datum.label = int(y[i])
数据转换
caffe要使用lmdb数据库的原因有:1、性能高;2、安全性好;3、空间利用率高。
LMDB采用内存映射(Memory-Mapped)的方式,可以快速读取和写入大量数据。Caffe选择LMDB作为数据存储的方式
数据转换:将原始数据转换为Caffe可以处理的格式。
如果是图片数据,可能需要转换为LMDB或HDF5格式;
如果是文本数据,可能需要转换为bag-of-words或TF-IDF等特征表示
LMDB采用内存-映射文件(memory-mapped files),所以拥有非常好的I/O性能
key就是字符形式的ID,value是Caffe中Datum类的序列化形式
从硬盘读取图像数据并存入到LMDB数据库,或者读取LMDB数据Datum并还原图像。
参考
lmdb https://www.jianshu.com/p/ce2ca99c8f18
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
2023-02-13 Pytorch_人脸检测