Я изо всех сил пытаюсь реализовать экстрактор признаков на основе 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'
Заранее спасибо.