I first used 3-channel images as input to a VGG16 model with NO problem:
input_images = Input(shape=(img_width, img_height, 3), name='image_input')
vgg_out = base_model(input_images) # Here base_model is a VGG16
Now I would like to use 1-channel images instead. So I did it like this:
input_images = Input(shape=(img_width, img_height, 1), name='image_input')
repeat_2 = concatenate([input_images, input_images])
repeat_3 = concatenate([repeat_2, input_images])
vgg_out = base_model(repeat_3)
But I got an error message:
File "test.py", line 423, in <module>
model = Model(inputs=[input_images], outputs=[vgg_out])
File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 93, in __init__
self._init_graph_network(*args, **kwargs)
File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 237, in _init_graph_network
self.inputs, self.outputs)
File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 1430, in _map_graph_network
str(layers_with_complete_input))
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(?, 64, 64, 3), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: []
What's the correct way to turn a 1-channel image into a 3-channel one within Keras?
I ran into a similar solution on Kaggle, but one that takes advantage of existing Keras layer classes:
from keras.applications.vgg16 import VGG16
from keras.layers import *
img_size_target = 224
img_input = Input(shape=(img_size_target, img_size_target, 1))
img_conc = Concatenate()([img_input, img_input, img_input])
model = VGG16(input_tensor=img_conc)
The first few layers will look like this:
Model: "vgg16"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_20 (InputLayer) [(None, 224, 224, 1) 0
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 224, 224, 3) 0 input_20[0][0]
input_20[0][0]
input_20[0][0]
__________________________________________________________________________________________________
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 concatenate_1[0][0]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With