Keras:Convolution2D可以处理矩形图像吗?

时间:2017-03-06 17:56:23

标签: python image keras convolution

简单的问题 - 说我有一个360px到240px的图像。而不是将我(已经很小)的图像裁剪为240x240,我可以创建一个在整个矩形上运行的卷积神经网络吗?特别是使用Convolution2D图层。

我问,因为我读过CNNs的每篇论文看起来都有方形输入大小,所以我想知道我建议的是否合适,如果是的话,我可能会遇到哪些不利之处。所有设置(如border_mode='same')的工作方式是否相同?

感谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

但为什么不试一试呢

#!/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并进行了一些更改