1. 程式人生 > >Caffe:檢視並可視化 LMDB 檔案

Caffe:檢視並可視化 LMDB 檔案

LMDB 檔案的全稱是 Lightning Memory-Mapped Database,也就是閃電記憶體對映資料庫,用這種資料可以省去大量讀取小檔案的時間花費和 IO 花費,可以提高訓練的速度。

如果你好奇 LMDB 檔案裡面儲存了什麼東西,這篇部落格會帶你一起看看裡面的內容。

檢視 LMDB 的內容

1. lmdb 檔案的格式

LMDB 檔案裡面儲存的內容很簡單,就是一堆字串。像是 Python 中的 dictionary 資料那樣,它是一個 key 對應一個 value 的。key 是圖片的名字,value 是圖片的畫素數值和標籤。

2. 使用 lmdb 庫讀取

lmdb 檔案的讀取可以使用 Python 的 lmdb 庫。直接使用 pip install lmdb 就可以安裝 lmdb 庫了。

既然我們知道了 lmdb 裡面就是一堆資料集中的圖片的名字和畫素與標籤,並且以 key 和 value 來表示,那我們就可以看看 key 和 value 的值了。

我們匯入 lmdb 庫,開啟檔案看看:

import lmdb

env = lmdb.open("csdn_train_lmdb", readonly=True) # 開啟檔案
txn = env.begin() # 生成處理控制代碼
cur =
txn.cursor() # 生成迭代器指標 for key, value in cur: print('the key:', key) print(str(value[0:10])) print('...' + value[-5:]) break env.close()

輸出后里面的內容為這樣,兩個值都是字串型別:

key: '00000000_014.jpg' # '_' 前面的數字是圖片的引索值
value: \x08\x03\x10\x80\x02\x18\x80\x02...\x018\x00 # value 是一堆特殊編碼的字元,最後面的存放了這張圖片的標籤

3. 視覺化 lmdb

程式碼:

import lmdb
import caffe
from caffe.proto import caffe_pb2
import cv2 as cv

env = lmdb.open("train_lmdb", readonly=True)
txn = env.begin()
cur = txn.cursor()
datum = caffe_pb2.Datum() # caffe 定義的資料型別


for key, value in cur:
    print(type(key), key)
    datum.ParseFromString(value) # 反序列化成 datum 物件

    label = datum.label
    data = caffe.io.datum_to_array(datum)
    print(data.shape)
    print(datum.channels)
    image = data[0]
    print(type(label))
    cv.imshow(str(label), image)
    cv.waitKey(0)

cv.destoyAllWindows()
env.close()

效果如下,視窗上顯示的數字為標籤:
在這裡插入圖片描述在這裡插入圖片描述

可見,生成 lmdb 檔案時,圖片會被變成三個通道的灰色圖片。


參考部落格: