【问题标题】:Can Convolution2D work on rectangular images?Convolution2D 可以处理矩形图像吗?
【发布时间】:2017-07-26 17:21:44
【问题描述】:

假设我有一个 360 像素 x 240 像素的图片。我可以创建一个在整个矩形上运行的卷积神经网络,而不是将我的(已经很小的)图像裁剪为 240x240?具体使用Convolution2D层。

我之所以问,是因为我读过的每篇关于 CNN 的论文似乎都有方形输入大小,所以我想知道我的建议是否可以,如果可以,我可能会遇到什么缺点。所有设置(如border_mode='same')是否都一样?

【问题讨论】:

  • 这并没有明确解决我的问题,但似乎也不表明会有任何问题。
  • 我认为input_shape 参数会明确回答您的问题。如果没有,我深表歉意。

标签: python image keras convolution


【解决方案1】:

矩形图像没有问题...一切都会像方形图像一样正常工作。

【讨论】:

  • 酷,我会相信这个保证,并在我的下一个项目中尝试一下。干杯
【解决方案2】:

是的。

但你为什么不试一试

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import numpy as np
np.random.seed(1234)
from keras.layers import Input
from keras.layers.convolutional import Convolution2D
from keras.models import Model

print("Building Model...")
inp = Input(shape=(1,None,None))
output   = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(inp)
model_network = Model(input=inp, output=output)
w = np.asarray([ 
    [[[
    [0,0,0],
    [0,2,0],
    [0,0,0]
    ]]]
    ])
input_mat = np.asarray([ 
    [[
    [1.,2.,3.,10.],
    [4.,5.,6.,11.],
    [7.,8.,9.,12.]
    ]]
    ])
model_network.layers[1].set_weights(w)
print("Weights after change:")
print(model_network.layers[1].get_weights())
print("Input:")
print(input_mat)
print("Output:")
print(model_network.predict(input_mat))

构建示例模型

inp = Input(shape=(1,None,None))
output   = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(inp)
model_network = Model(input=inp, output=output)

给它一些权重并设置它们,以便您可以预测输出,例如:

w = np.asarray([ 
    [[[
    [0,0,0],
    [0,2,0],
    [0,0,0]
    ]]]
    ])
model_network.layers[1].set_weights(w)

这样卷积只会使您的输入翻倍。

给它你的矩形图像:

input_mat = np.asarray([ 
    [[
    [1.,2.,3.,10.],
    [4.,5.,6.,11.],
    [7.,8.,9.,12.]
    ]]
    ])

并检查输出是否有效

print("Output:")
print(model_network.predict(input_mat))

样本输出:

Using Theano backend.
Building Model...
Weights after change:
[array([[[[ 0.,  0.,  0.],
         [ 0.,  2.,  0.],
         [ 0.,  0.,  0.]]]], dtype=float32)]
Input:
[[[[  1.   2.   3.  10.]
   [  4.   5.   6.  11.]
   [  7.   8.   9.  12.]]]]
Output:
[[[[  2.   4.   6.  20.]
   [  8.  10.  12.  22.]
   [ 14.  16.  18.  24.]]]]

原始post 有一些变化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多