Keras ImageDataGenerator - 类为Save_Prefix?

时间:2017-05-24 14:53:18

标签: python image classification keras

如何在文件名中保存带有类标签的增强图像?或者,有没有办法知道新图像属于哪个类?

修改

datagen = ImageDataGenerator(horizontal_flip=True, vertical_flip=True)
i = 0
for batch in datagen.flow_from_directory('data/train', target_size=
(100,100),
    shuffle=False, batch_size=batch_size, save_to_dir='data/train/'):
    i += 1
    if i > 20: # save 20 images
        break  # otherwise the generator would loop indefinitely
print("Saved flipped images")

我在data / train中有三个类子目录。在运行之后,我无法分辨哪些图像已经被增强,尽管我确实看到已经保存了大约三分之一的图像。我的代码中是否缺少某些内容来指定图像按类命名,并且每个类都循环以创建新图像?

编辑#2: 文件夹结构:数据/火车 单独文件夹中的3个类:n02088364,n02096585,n02108089 新创建的图像将保存到数据/训练中,而不是保存到单个类文件夹中。

3 个答案:

答案 0 :(得分:1)

# We draw a batch of images from the generator
batch = next(datagen)

# batch[0] is the list of images
# batch[1] is the list of associated classes

# We display the batch (here the batch is size 16) and their class
fig, m_axs = plt.subplots(1, 16, figsize = (26, 6))
for img, class_index_one_hot, ax1 in zip(batch[0], batch[1], m_axs.T):
    ax1.imshow(img)
    class_index = np.argmax(class_index_one_hot)
    ax1.set_title(str(class_index) + ':' + index_to_classes[class_index])
    ax1.axis('off')

答案 1 :(得分:0)

在您的代码中,您可以使用批处理对象访问生成的图像的类。 批处理将是长度为2的元组。第一个元素是包含批处理的所有图像的数组,第二个元素是包含批处理图像的所有类的数组。

答案 2 :(得分:0)

如果要将图像保存在与标签同名的文件夹下,则可以在标签列表上循环并在循环内调用扩充代码。

tflite-model-maker

那么当生成器可以直接传递给模型时为什么这样做呢?如果您想使用from tflite_model_maker import ImageClassifierDataLoader data = ImageClassifierDataLoader.from_folder('aug_images') ,它不接受生成器,而是接受每个标签在文件夹下的标签数据:

aug_images
| 
|__ lbl_a
|   |
|   |_____aug_img_a.png
|
|__ lbl_b
|   |
|   |_____aug_img_b.png
| 
|__ lbl_c
|   |
|   |_____aug_img_c.png

结果

for

注意:您需要确保文件夹已经存在。