Convolution2D 可以处理矩形图像吗?

Can Convolution2D work on rectangular images?

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

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

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

是的。

但你为什么不试一试呢

#!/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.]]]]

原始 有一些变化