Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从图像/阵列生成面片并保存坐标的最快方法_Python_Keras - Fatal编程技术网

Python 从图像/阵列生成面片并保存坐标的最快方法

Python 从图像/阵列生成面片并保存坐标的最快方法,python,keras,Python,Keras,我用Keras训练了一名CNN,以分割特定的模式。它工作得非常好,但现在我必须开始“制作阶段”,所以我的CNN必须分割数千张图像 因此,对于CNN必须分割的给定图像,对于该图像中的每个像素,我必须在像素周围切割一个补丁,并向CNN提供所有补丁。到目前为止,我使用了这个解决方案: WindowSize = 23 #patch size ws2 = WindowSize / 2 image_data = ndimage.imread(image_file).astype(float) dimensi

我用Keras训练了一名CNN,以分割特定的模式。它工作得非常好,但现在我必须开始“制作阶段”,所以我的CNN必须分割数千张图像

因此,对于CNN必须分割的给定图像,对于该图像中的每个像素,我必须在像素周围切割一个补丁,并向CNN提供所有补丁。到目前为止,我使用了这个解决方案:

WindowSize = 23 #patch size
ws2 = WindowSize / 2
image_data = ndimage.imread(image_file).astype(float)
dimensions = image_data.shape
SizeX = dimensions[1]
SizeY = dimensions[0]
imtest = np.ndarray(shape=(SizeX-2*ws2, 1, WindowSize, WindowSize), dtype=np.float32)
for y in range(ws2,SizeY-ws2):
    for x in range(ws2,SizeX-ws2):
        imtest[x-ws2,0] = image_data[y-ws2:y+ws2+1, x-ws2:x+ws2+1]
所以我一行一行地工作,就像这样,我不会失去面片坐标。但是这个解决方案真的很慢。有没有更快的方法呢?

我也听说过Keras中的生成器,但使用fit_生成器函数训练生成器似乎很有用,但不需要在图像上进行测试,然后对其进行分割,因为它不保留面片坐标

下面是一种使用keras生成图像的方法,希望能有所帮助:


如果你的图像大小相同,补丁也相同,你可以对每个样本使用静态输入掩码,或者对每个图像使用静态掩码(一个包含1和0的矩阵),而不是按行计算。请详细说明你的答案,我是python和Keras的新手。我在网上搜索过“静态输入掩码”,但我发现了任何有用的东西。有什么帮助吗?另一个可能的解决方案是构建一个类,该类返回面片坐标的列表或列表生成器(将节省大量ram),然后使用这些坐标从图像中获取像素面片。唯一一种可能会比较慢的方法是,如果您需要在输入CNN数据库获取答案之前对这些补丁进行本地预处理。这真的比我做的快吗?这是一个生成器函数,训练时会实时调用它,所以它肯定比你的方法占用更少的内存。但是,通过你的方法,你可以预生成图像并将其存储在磁盘上,然后加载它们,因此,如果你尝试使用多个超参数进行训练,它会有所帮助。正如我在我的帖子中所说,我已经在训练我的CNN,我已经进入了制作阶段。因此,我需要从图像中提取所有可能的补丁,然后将它们交给CNN进行测试/评估,最后将答案放回图像中,以便测量/评估分割结果。
datagen = ImageDataGenerator(
    rotation_range=.06,
    width_shift_range=0.02,
    height_shift_range=0.02,
    shear_range=0.0002,
    zoom_range=0.0002,
    horizontal_flip=True,
    fill_mode='nearest',
    rescale = 1/255.
    )

for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9):
  for i in range(0, 9):
    pyplot.subplot(330 + 1 + i)
    pyplot.imshow(X_batch[i].reshape(128, 128, 3),    
    cmap=pyplot.get_cmap('gray'))
  pyplot.show()
  break