我正在使用像这样的keras的图像生成器:
var sb = new StringBuiler();
foreach (DataRepeaterItem c in dataRepeater1.Controls)
{
sb.AppendLine(((Label)c.Controls["label5"]).Text);
}
ss+= sb;
我有两个问题。
如何解决问题
如何获取文件的文件名(以便我可以自己从matplotlib中读取)
编辑:这就是我的datagen的样子
val_generator = datagen.flow_from_directory(
path+'/valid',
target_size=(224, 224),
batch_size=batch_size,)
x,y = val_generator.next()
for i in range(0,1):
image = x[i]
plt.imshow(image.transpose(2,1,0))
plt.show()
编辑2:
跟随Marcin的回答:
datagen = ImageDataGenerator(
rotation_range=3,
# featurewise_std_normalization=True,
fill_mode='nearest',
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True
)
我得到了正常的颜色,但仍有一些奇怪的颜色:
答案 0 :(得分:4)
图像数组的dtype是'float32',只需将其转换为'uint8':
plt.imshow(image.astype('uint8'))
答案 1 :(得分:2)
至少有三种方法可以使用这种扭曲的颜色。所以:
255 - x
转换变换)这有时会发生在使用某些GIS库时。score/255
转换。您需要检查案件中发生的选项。
为了自己获取图片我经常使用(当你的文件夹的格式适合Keras flow_from_directory
时)我通常使用os.listdir
和{{1的混合通过:
os.path.join
答案 2 :(得分:2)
我遇到与OP相同的问题,并通过将像素从0-255重新调整为0-1来解决它。
Keras' ImageDataGenerator采用了' rescale'参数,我设置为(1/255)。这产生了具有预期颜色的图像
image_gen = ImageDataGenerator(rescale=(1/255))
答案 3 :(得分:1)
颜色问题很奇怪。 一旦我可以访问我的linux机器,我会尝试重现它。
对于问题的文件名部分,我想对Keras源代码提出一个小改动:
您可能需要查看此文件: https://github.com/fchollet/keras/blob/master/keras/preprocessing/image.py 它包含图像预处理例程。
查看第820行next()
的{{1}}函数:调用此函数从目录中获取新图像。
在该函数内部,查看第838行,如果已将DirectoryIterator
设置为路径,则生成器会将增强图像输出到此路径,以进行调试。
增强图像的名称是索引和散列的混合。对你没用。
但是你可以很容易地改变代码:
save_to_dir
现在,使用原始文件名保存增强图像。
这应该允许您将图像保存在其原始文件名下。 好吧,你怎么把它注入Keras源?
这样做:
filenames=[] #<-------------------------------------------- new code
for i, j in enumerate(index_array):
fname = self.filenames[j]
img = load_img(os.path.join(self.directory, fname),
grayscale=grayscale,
target_size=self.target_size)
x = img_to_array(img, dim_ordering=self.dim_ordering)
x = self.image_data_generator.random_transform(x)
x = self.image_data_generator.standardize(x)
filenames.append(fname) # <-----------------------------store the used image's name
batch_x[i] = x
# optionally save augmented images to disk for debugging purposes
if self.save_to_dir:
for i in range(current_batch_size):
img = array_to_img(batch_x[i], self.dim_ordering, scale=True)
#fname = '{prefix}_{index}_{hash}.{format}'.format(prefix=self.save_prefix,
# index=current_index + i,
# hash=np.random.randint(1e4),
# format=self.save_format)
fname=filenames[i] # <------------------------------ use the stored code instead
img.save(os.path.join(self.save_to_dir, fname))
git clone https://github.com/fchollet/keras
现在# this is the path to the cloned repository
# if you cloned it next to your script
# then just use keras/
# if it's one folder above
# then use ../keras/
sys.path.insert(0, os.getcwd() + "/path/to/keras/")
import keras
是您的修补版本。
我希望这有效,我目前正在使用Windows。我的python堆栈只在linux机器上。可能存在小的语法错误。
答案 4 :(得分:1)
如果您使用目录中的test_batches=Imagedatagenerator().flow
,请稍作建议。如果使用它来馈送预测生成器,请确保设置shuffle=false
来保持文件与关联的预测之间的相关性。如果目录中的文件带有数字标签,例如 1.jpg , 2.jpg 等。图像可能不会被提取。它们按以下顺序获取:
1.jpg , 10.jpg , 2.jpg , 20.jpg 等。这很难将预测匹配到特定文件。您可以使用0填充来解决此问题,例如 01.jpg , 02.jpg 等。
答案 5 :(得分:0)
from skimage import io
def imshow(image_RGB):
io.imshow(image_RGB)
io.show()
x,y = train_generator.next()
for i in range(0,11):
image = x[i]
imshow(image)
对我有用。