OpenPose训练过程解析(7)

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

meta_data.png

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,三维的数组拼接
img4ch.png

你可能感兴趣的:(OpenPose训练过程解析(7))