我需要使用NIST SD 19训练模型。我已经从他们的网站下载了数据集,并对其进行了重新排列,以使每个类都有自己的目录,并且其中包含其图像。我没有将其分为训练和测试集。
如果可能,我需要更快地读取或访问它们,例如TF 2.0如何下载和读取它们。
我采用了经典的方法:我遍历每个子目录(其名称是其类),然后遍历每个图像文件,将其读取为图像,将其添加到图像列表中,并添加到其类(子目录)中它来自)到标签列表。然后,我制作了一个字典,将子目录名称转换为整数,以便模型可以将其分类。
def mapImagesToLabels(dir_dataset):
data_root = pathlib.Path(dir_dataset)
all_image_paths = list(data_root.glob('*/*'))
all_image_paths = [str(path) for path in all_image_paths]
label_names = sorted(item.name for item in data_root.glob('*/') if item.is_dir())
label_to_index = dict((name, index) for index, name in enumerate(label_names))
# print(label_to_index)
all_image_labels = [label_to_index[pathlib.Path(path).parent.name] for path in all_image_paths]
all_images = [cv2.imread(image_path) for image_path in all_image_paths]
print(all_images.shape)
print(all_images[0].shape)
return all_images, all_image_labels
如果不冻结终端并在运行时减慢计算机速度,这种方法就可以了。每次我重新测试模型时,我也会加载它,所以我认为存在时间限制。