lmdb資料集的封裝和打包

2021-09-05 11:53:49 字數 2179 閱讀 8057

問題:caffe為什麼採用lmdb,而不是直接讀取原始資料呢?

另一方面,lmdb的優勢是具有極高的訪問速度,避免了系統訪問大量小檔案時的io開銷。lmdb使用了記憶體對映的方式訪問檔案,這就使得檔案內定址的開銷大幅度降低。

常用方法:

lmdb_env = lmdb.open(lmdb_file, map_size = int(1e12))

建立乙個環境,map_size為建立的資料庫大小

lmdb_txn = lmdb_env.begin(write = true)

開啟乙個事務物件,所有的操作都必須經過這個事務物件,其中有乙個引數是write,預設值為false。如果需要寫入操作的話,需要將值改為true。

lmdb_txn.commit()

必須使用commit方法提交待處理的事務,不然無法寫入

lmdb_txn.cursor()

相當於關聯式資料庫中的游標,每讀取一次,游標下移一位。

lmdb_txn.put(keystr.encode(), datum.serializetostring())

將鍵值儲存。注:value必須要序列化成字串。

實現乙個lmdb封裝和打包功能demo:

# -*- coding: utf-8 -*-

# lmdb 資料的封裝和打包

import lmdb

import numpy as np

import caffe

from caffe.proto import caffe_pb2

defwrite()

:# 設定用來存放 lmdb 資料的目錄

lmdb_file =

'lmdb_data'

batch_size =

256# 生成乙個 lmdb 控制代碼 map_size 為 資料庫大小

lmdb_env = lmdb.

open

(lmdb_file, map_size =

int(

1e12))

lmdb_txn = lmdb_env.begin(write =

true

)for x in

range

(batch_size)

:# 生成一些資料

data = np.ones((3

,5,5

), np.uint8)

label = x

# 將 陣列 轉成 datum

datum = caffe.io.array_to_datum(data, label)

keystr ="".

format

(x)# 設定乙個鍵

# 鍵值對 儲存

lmdb_txn.put(keystr.encode(

), datum.serializetostring())

# 一定要提交!!

lmdb_txn.commit(

)def

read()

:

lmdb_env = lmdb.

open

('lmdb_data'

) lmdb_txt = lmdb_env.begin(

)# caffe中經常採用datum這種資料結構儲存資料,

datum = caffe_pb2.datum(

)for key, value in lmdb_txt.cursor():

# 因為儲存的時候進行了序列化,現在需要反序列化

datum.parsefromstring(value)

label = datum.label

# 將 value 轉化為 陣列

data = caffe.io.datum_to_array(datum)

print

(label)

print

(data)

if __name__ ==

'__main__'

: write(

) read(

)

使用caffe製作自己的lmdb資料集

新鳥最近在一家半導體公司實習,接觸到的專案都是基於 caffe框架的深度學習方面的知識,前期對tensorflow比較熟,但是到了公司沒辦法啊!不會怎麼辦,只能硬著頭皮上啊!中途碰壁不少,寫這篇部落格只是想以後方便查閱資料,另外一方面是給同樣在深度學習裡面摸爬滾打的朋友乙個參考吧!公司提供的資料都是...

封裝自己的pytorch資料集

1.pytorch 對於資料的標籤要求是長整形,因此要對標籤進行轉換 train label train label.long 2.對於資料的特徵部分,要轉換為tensor 形式,可以通過torch.tensor 將資料從numpy 轉為tensor train fea torch.tensor t...

生成caffe所用的lmdb資料

本文只介紹在caffe框架下生成lmdb格式的資料,因為在caffe框架下訓練和測試都只能用lmdb格式的資料 準備 1 ubuntu 18.04 2 新建data資料夾,內含train和test兩個資料夾 3 train資料夾和test資料夾裡面分別含img和xml兩個資料夾,裡面分別是原影象 j...