zoukankan      html  css  js  c++  java
  • caffe python lmdb读写

    caffe中可以采取lmdb健值数据库的方式向网络中输入数据。
    所以操作lmdb就围绕“键-值“的方式访问数据库就好了。

    Write

    我们可以采用cv2来读入自己的图像数据,采用datum格式来存储数据。
    Datum is a Google Protobuf Message class used to store data and optionally a label. A Datum can be thought of a as a matrix with three dimensions: width, height, and channel.

    import lmdb
    import numpy as np
    import cv2
    import caffe
    from caffe.proto import caffe_pb2
    
    #basic setting
    # 这个设置用来存放lmdb数据的目录
    lmdb_file = 'lmdb_data'
    batch_size = 256
    
    # create the lmdb file
    # map_size指的是数据库的最大容量,根据需求设置
    lmdb_env = lmdb.open(lmdb_file, map_size=int(1e12))
    lmdb_txn = lmdb_env.begin(write=True)
    # 因为caffe中经常采用datum这种数据结构存储数据
    datum = caffe_pb2.Datum()
    
    item_id = -1
    for x in range(1000):
        item_id += 1
    
        #prepare the data and label
        
        #data = np.ones((3,64,64), np.uint8) * (item_id%128 + 64) #CxHxW array, uint8 or float
        # pic_path设置成图像目录, 0表示读入灰度图
    	data = cv2.imread(pic_path, 0)
        # label 设置图像的label就行
        label = item_id%128 + 64
    
        # save in datum
        datum = caffe.io.array_to_datum(data, label)
        keystr = '{:0>8d}'.format(item_id)
        lmdb_txn.put( keystr, datum.SerializeToString() )
    
        # write batch
        if(item_id + 1) % batch_size == 0:
            lmdb_txn.commit()
            lmdb_txn = lmdb_env.begin(write=True)
            print (item_id + 1)
    
    # write last batch
    if (item_id+1) % batch_size != 0:
        lmdb_txn.commit()
        print 'last batch'
        print (item_id + 1)
    

    Read

    import caffe
    import lmdb
    import numpy as np
    import cv2
    from caffe.proto import caffe_pb2
    
    lmdb_env = lmdb.open('lmdb_data')
    lmdb_txn = lmdb_env.begin()
    lmdb_cursor = lmdb_txn.cursor()
    datum = caffe_pb2.Datum()
    
    for key, value in lmdb_cursor:
        datum.ParseFromString(value)
    
        label = datum.label
        data = caffe.io.datum_to_array(datum)
    
        #CxHxW to HxWxC in cv2
        image = np.transpose(data, (1,2,0))
        cv2.imshow('cv2', image)
        cv2.waitKey(1)
        print('{},{}'.format(key, label))
    
  • 相关阅读:
    八、基本数据结构(图形结构)
    七、基本数据结构(树形结构)
    4、使用 ImportTsv 将 Hive 数据导入 Hbase
    六、跳表
    五、二分法查找
    四、归并排序 && 快速排序
    一、kafka 介绍 && kafka-client
    三、排序之冒泡、插入、选择
    二、YARN
    三、synchronized & lock
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7469750.html
Copyright © 2011-2022 走看看