Выберите конкретный набор RGB-канала при вводе изображения модели обучения Keras. - PullRequest
0 голосов
/ 20 мая 2018

В моем Keras CNN я добавляю слой Input следующим образом:

model.add(Conv2D(32, (3, 3), input_shape=(img_width, img_height, nb_channel)))

с nb_channel = 3 для входа RGB и = 1 для ввода в оттенках серого, а также flow_from_directory и ImageDataGenerator

Однако я хочу указать набор цветов для канала для ввода в мою CNN, например, разрешены только зеленые и красные каналы, как я могу это сделать?

Я использую Keras с внутренним тензорным потоком

Помимо аккуратного решения @ Minh-Tuan Nguyen, мы также можем выполнять нарезку следующим образом

#custom filter
def filter_layer(x):
    red_x = x[:,:,:,0]
    blue_x = x[:,:,:,2]
    green_x = x[:,:,:,1]
    red_x = tf.expand_dims(red_x, axis=3)
    blue_x = tf.expand_dims(blue_x, axis=3)
    green_x = tf.expand_dims(green_x, axis=3)
    output = tf.concat([red_x, blue_x], axis=3)
    return output
#model
input = Input(shape=(img_height, img_width, img_channels))

вшаг concat, мы можем выбрать срез, который мы хотим.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Я думаю, что было бы проще обрабатывать срезы немного более «наивно», поскольку, насколько мне известно, Keras не поддерживает нарезку тензора с использованием списка индексов, таких как python и numpy.Ниже приведен пример моего кода для этой проблемы.Попытайтесь увидеть, соответствует ли это вашему требованию.

indices = [0,2]

def filter_layer(input, indices=indices):
    for i in range(len(indices)):
        index = indices[i]
        x_temp = Lambda(lambda x: x[:,:,:,index][...,None])(input)

        if i==0:
            x = x_temp
        else:
            x = Concatenate(-1)([x, x_temp])
        return x

input = Input(shape=(img_height, img_width, img_channels))
x = Lambda(filter_layer)(input)
0 голосов
/ 20 мая 2018

Вы можете нарезать входной тензор внутри пользовательского Lambda слоя.Предположим, вам нужен только красный и зеленый:

model.add(Lambda(lambda x: x[:,:,:,:2], input_shape=(w, h, channels)))

TensorFlow позволяет выполнять нарезку, аналогичную NumPy, для Keras вам нужно обернуть ее вокруг слоя Lambda для включения в вашу модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...