Почему VGG16 «Сводка модели» показывает меньше [не] обучаемых параметров в сценарии без общей сети для подобия изображения? - PullRequest
0 голосов
/ 15 октября 2019

Я работаю над проектом схожести изображений. Существует два типа изображений (то есть: изображения с камеры и другой соответствующий эскиз или модель САПР).

Сеть будет обучена обнаружению сходства / различия между данными изображениями.

Для этой задачи конвейер работает следующим образом:

VGGNet-16 (без классификационной головки) будет использоваться в качестве экстрактора признаков. Я использовал два VGGNets (для каждого типа изображения).

vgg16_model = keras.applications.vgg16.VGG16()
vggcam_model = Sequential()
vggcad_model = Sequential()

for layer in vgg16_model.layers[:-4]:
        vggcam_model.add(layer)
        vggcad_model.add(layer)

Затем я заморозил все слои:

for vggcam_layers, vggcad_layers  in zip(vggcam_model.layers, vggcad_model.layers):
    vggcam_layers.trainable, vggcad_layers = (False, False)

Извлеченные векторы объектов:

encoded_camfv = Flatten()(vggcam_model(cam_input))
encoded_cadfv = Flatten()(vggcad_model(cad_input))

Это создаст вектор с фиксированным размером для каждого типа изображения.

Далее оба вектора признаков будут объединены и помещены в сеть сходства:

merge = concatenate([encoded_camfv, encoded_cadfv])

fc1 = Dense(1024, activation='relu', name='fc1')(merge)
fc2 = Dense(1024, activation='relu', name='fc2')(fc1)
output = Dense(1, activation='softmax', name='fc3')(fc2)

model = Model(inputs=[cam_input, cad_input], outputs=output)
print(model.summary())

Краткое описание модели:

Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_1 (InputLayer)            (None, 224, 224, 3)  0                                            
__________________________________________________________________________________________________
input_2 (InputLayer)            (None, 224, 224, 3)  0                                            
__________________________________________________________________________________________________
sequential_1 (Sequential)       (None, 7, 7, 512)    14714688    input_1[0][0]                    
__________________________________________________________________________________________________
sequential_2 (Sequential)       (None, 7, 7, 512)    14714688    input_2[0][0]                    
__________________________________________________________________________________________________
flatten_1 (Flatten)             (None, 25088)        0           sequential_1[1][0]               
__________________________________________________________________________________________________
flatten_2 (Flatten)             (None, 25088)        0           sequential_2[1][0]               
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 50176)        0           flatten_1[0][0]                  
                                                                 flatten_2[0][0]                  
__________________________________________________________________________________________________
fc1 (Dense)                     (None, 1024)         51381248    concatenate_1[0][0]              
__________________________________________________________________________________________________
fc2 (Dense)                     (None, 1024)         1049600     fc1[0][0]                        
__________________________________________________________________________________________________
fc3 (Dense)                     (None, 1)            1025        fc2[0][0]                        
==================================================================================================
Total params: 67,146,561
Trainable params: 52,431,873
Non-trainable params: 14,714,688
__________________________________________________________________________________________________
None

Поскольку я использовал дваVGG моделирует один для каждого типа изображения. Почему количество необученных параметров составляет всего 14,714,688 . Это должно быть 2 x Не обучаемые параметры .

На более поздних этапах я разморозил последний сверточный блок сети и обучил сеть подобия вместе с последним блоком CONVO.

for vggcam_layers, vggcad_layers in zip(vggcam_model.layers[15:], vggcad_model.layers[15:]):
    vggcam_layers.trainable, vggcad_layers = (True, True)

Это также показывает то же поведение. Это проблема с кодом или в моем понимании?

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

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