【问题标题】:store images of different dimension in numpy array将不同维度的图像存储在numpy数组中
【发布时间】:2017-08-02 18:42:43
【问题描述】:

我有两个图像,尺寸为 (32,43,3) 的图像 1 和尺寸为 (67,86,3) 的图像2。我如何将它存储在一个 numpy 数组中,每当我尝试附加数组时

image=cv2.imread(image1,0)
image=cv2.resize(image,(32,43))
x_train=np.array(image.flatten())
x_train=x_train.reshape(-1,3,32,43)
X_train =np.append(X_train,x_train) #X_train is my array

image=cv2.imread(image2,0)
image=cv2.resize(image,(67,86))
x_train=np.array(image.flatten())
x_train=x_train.reshape(-1,3,67,86)
X_train =np.append(X_train,x_train) 

Value Error: total size of new array must be unchanged.

我想要 X_train 的形状(-1、深度、高度、宽度)。这样我就可以将它输入到我的神经网络中。有没有办法将不同维度的图像存储在数组中并输入神经网络?

【问题讨论】:

    标签: python arrays numpy deep-learning conv-neural-network


    【解决方案1】:

    不要使用np.append。如果必须加入数组,请以np.concatenate 开头。它会迫使您更加注意尺寸的兼容性。

    您不能将 2 个具有形状 (32,43,3) (67,86,3) 的数组连接成更大的数组,其中包含一些兼容的形状。他们共享的唯一维度是最后一个。

    这些重塑也没有意义:(-1,3,32,43), (-1,3,67,86)。

    它有效,但它也弄乱了“形象”。您不只是添加第四维。看起来你也想做一些轴交换或转置。练习一些小数组,这样你就可以看到发生了什么,例如(2,4,3)。

    您希望Xtrain 的最终形状是什么?

    你可以把这两张图片放在一个object dtype数组中,和列表[image1, image2]基本一样。但我怀疑你的神经网络是否可以用它做任何实际的事情。


    如果您将 (32,43,3) 数组重新整形为 (16,86,3),您可以将其与 axis=0 上的 (67,86,3) 连接以生成 (83,86,3) 数组.如果您需要 3 排在第一位,我会使用 np.transpose(..., (2,0,1))

    反过来将 (67,86,3) 重塑为 (2*67,43,3)。

    将 (32,43,3) 传递给 (32,86,3) 是另一种选择。

    在新的第 4 维上加入它们,要求“行”数和“列”数匹配。

    【讨论】:

    • 先生,我有不同维度的图像数据集,所以我想知道我是否可以将所有维度存储在同一个数组中,例如 [[3,67,83],[3 ,45,67],[3,63,67],........] 然后我必须将此数组提供给我的神经网络。我期望 Xtrain 的最终形状是 [3,None,None] 因为我不想在存储图像时固定图像的宽度和高度。
    • 我们必须更多地了解您的神经网络。我见过的那些期望在输入中使用漂亮的矩形网格,而不是图像大小的参差不齐的混合。到目前为止,您有一个不同大小的图像列表,而不是一个数组。
    • 我正在使用Spatial Pyramid Pooling,它允许 CNN 接受多尺寸输入。除了裁剪或填充图像之外,还有其他方法可以在神经网络中输入多尺寸输入吗?谢谢
    • 我不知道(3, None, None) 的形状是什么意思;至少不在numpy 中。你是在 Keras 中使用 Theano 还是 Tensorflow?
    • 我正在使用 keras 的 tenserflow。
    猜你喜欢
    • 2017-10-07
    • 2018-12-07
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2018-08-13
    相关资源
    最近更新 更多