Как кормить несколько изображений одновременно в VGG16-CNN? - PullRequest
0 голосов
/ 05 апреля 2020

Я изо всех сил пытаюсь реализовать экстрактор признаков на основе VGG-16, который принимает два входа, то есть первый вход - это целое изображение, а второй вход - изображения в виде патчей (N-локальные субизображения области). Сначала я определяю две модели: глобальную, которая работает с целым изображением, и локальную, которая работает с локальными областями изображения. Идея состоит в том, чтобы добавить какой-то пул по каналам в локальной модели, где из N локальных патчей будет только один, а после этого необходимо объединить функции из глобального и получающегося в результате локального патчей.

Можете ли вы помочь мне реализовать этот вид экстрактора функций на основе vgg-16? Идея этой методологии показана на рисунке. Схема слияния VGG-16 Код выглядит следующим образом:


def ChannelPool(x):
    return K.max(x, axis=0, keepdims = True) 

def ConcatLayer(x):
    tensor_1 = x[0]
    tensor2 = x[1]
    return K.concatenate([tensor_1, tensor2], axis = 1)
N_patches = 9 # local image regions
input_shape_global = Input(shape=(224, 224, 3))
input_shape_local = Input(shape=(N_patches, 50, 50, 3)) # i struggle with this part

Global_Model = VGG16(include_top=False, weights='imagenet', input_tensor=None, input_shape=(224,224,3), pooling='avg')
Local_Model = VGG16(include_top=False, weights='imagenet', input_tensor=input_shape_local[0], input_shape=(50,50,3), pooling='avg')

# Change layer names to avoid confusion
for layer_l in Global_Model.layers:
    layer_l.name = layer_l.name + str("_1")

for layer_g in Local_Model.layers:
    layer_g.name = layer_g.name + str("_2")

inp1 = Global_Model.input
out1 = Global_Model.output

inp2 = Local_Model.input
out2 = Local_Model.output

image_features = Global_Model(inp1)
patch_features = Local_Model(inp2)

patch_feature = Lambda(ChannelPool, name="Channel_Pool_Layer")(patch_features)
image_features = K.reshape(image_features, (1,512))
patch_feature = K.reshape(patch_feature, (1,512))

merged = Concatenate(axis = 1)([image_features, patch_feature])

merged = Dense(total_features ,activation='softmax', name='Fc1')(merged)
merged = Dense(total_features , activation='relu', name='Fc2')(merged)

final_model = Model(inputs = [inp1,inp2], outputs = merged)

Можете ли вы помочь мне решить эту проблему, а сейчас проблема заключается в следующем:

**node = layer._inbound_nodes[node_index]**

AttributeError: у объекта 'NoneType' нет атрибута '_inbound_nodes'

Заранее спасибо.

...