如何在文件名中保存带有类标签的增强图像?或者,有没有办法知道新图像属于哪个类?
修改
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 新创建的图像将保存到数据/训练中,而不是保存到单个类文件夹中。
答案 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
注意:您需要确保文件夹已经存在。