genLMDB.py
本篇文章查看genLMDB.py文件是如何生成LMDB数据的,(单行注释位于genLMDB.py文件里,此处只大体叙述流程)
生成一个空的lmdb数据库文件
env = lmdb.open(lmdb_path, map_size=int(1e12)) #map_size指数据库的最大容量 生成data.mdb lock.mdb
txn = env.begin(write=True)
中间过程读取 COCO.Json 并通过 float2bytes 函数转化数据格式
读取的数据存入 meta_data 数组,数组shape为输入图像大小,便于之后进行拼接,并通过 clidx 来作为第一个维度的索引下标
meta_data = np.zeros(shape=(height,width,1), dtype=np.uint8)
meta_data[clidx] | [i] | content |
---|---|---|
meta_data[0] | dataset name (string) | |
meta_data[1] | [0] | image height |
meta_data[1] | [4] | image width |
meta_data[2] | [0] | isValidation (uint8) |
[1] | numOtherPeople (uint8) | |
[2] | people_index (uint8) | |
[3] | annolist_index (float) | |
[7] | writeCount (float) | |
[11] | totalWriteCount (float) | |
meta_data[3] | [0] | objpos_x (float) |
[4] | objpos_y (float) | |
meta_data[4] | [0] | scale_provided (float) |
meta_data[5] | [0] | joint_self_x (17×float) |
meta_data[6] | [0] | joint_self_y (17×float) |
meta_data[7] | [0] | joint_self_score (17×float) |
meta_data[8] | [0] | objpos_other_x (float) |
nop为图像中其他人的个数 | [4] | objpos_other_y (float) |
meta_data[8+nop] | [0] | scale_provided_other (float) |
[4] | nop*floats in 1 line | |
meta_data[9+nop+nop*3] | [0] | joint_others_x (float) |
meta_data[10+nop+nop*3] | [0] | joint_others_y (float) |
meta_data[11+nop+nop*3] | [0] | joint_others_score (float) |
共写入 7 + 4 × nop lines meta_data
img4ch
将img(640×480) meta_data(640*480) mask_miss() mask_all()
if "COCO" in data[idx]['dataset']:
img4ch = np.concatenate((img, meta_data, mask_miss[...,None], mask_all[...,None]), axis=2) #axis=2,三维的数组拼接