1.问题描述:
转载请注明~
大多数情况下,我们会在生成tfrecord文件之前加载图片数据时,就将图片尺寸处理好,例如尺寸reshape为[224,224,3],然后存储在tfrecord中。
这种方式,优点是避免很多后续shape uncompatible问题;缺点是,这会限制网络模型输入,每修改一次模型输入shape都要重新生成tfrecord文件。
针对这种情况,我总结一种dataset读取不同尺寸图像数据的tfrecord文件,并指出了容易出bug的地方。
2.定义生成tfrecord的特征
这部分注意的是,保存图像信息时记得保存图像的shape信息,因为每张图像尺寸不同,后面解析时用shape还原图像tensor维度。(因为tensor的reshape,resize等操作只在相同tensor shape时才有效,否则会报错!!)
def convert_to_TFRecord(imgpath_lst,label_lst,outfile):
tfrecord_writer = tf.python_io.TFRecordWriter(outfile)
for i, [imgpath,label] in enumerate(zip(imgpath_lst, label_lst)):
print("NO{}".format(i))
imgdata = Image.open(imgpath)
img_arr = np.asarray(imgdata)
shape = img_arr.shape
imgdata = imgdata.tobytes()