Keras 如何训练用于图像匹配的暹罗神经网络?

Keras 如何训练用于图像匹配的暹罗神经网络?,keras,Keras,我需要确认两个指纹(来自身份证和传感器)是否匹配。下面是我数据库中的一些示例(3000对图像): 匹配图像的示例 不匹配图像的示例 我正在尝试训练一个暹罗网络,该网络接收一对图像,如果它们不匹配,其输出为[1,0],如果它们匹配,其输出为[0,1],然后我用Keras创建了我的模型: image_left = Input(shape=(200, 200, 1)) image_right = Input(shape=(200, 200, 1)) vector_left = conv_base

我需要确认两个指纹(来自身份证和传感器)是否匹配。下面是我数据库中的一些示例(3000对图像):

  • 匹配图像的示例
  • 不匹配图像的示例
  • 我正在尝试训练一个暹罗网络,该网络接收一对图像,如果它们不匹配,其输出为[1,0],如果它们匹配,其输出为[0,1],然后我用Keras创建了我的模型:

    image_left = Input(shape=(200, 200, 1))
    image_right = Input(shape=(200, 200, 1))
    
    vector_left = conv_base(image_left)
    vector_right = conv_base(image_right)
    
    merged_features = concatenate([vector_left, vector_right], axis=-1)
    
    fc1 = Dense(64, activation='relu')(merged_features)
    fc1 = Dropout(0.2)(fc1)
    
    # # fc2 = Dense(128, activation='relu')(fc1)
    
    pred = Dense(2, activation='softmax')(fc1)
    
    model = Model(inputs=[image_left, image_right], outputs=pred)
    
    其中
    conv_base
    是一种卷积架构。事实上,我已经尝试了
    ResNet
    leNet
    MobileNetV2
    NASNet
    来自
    keras.applications
    ,但它们不起作用

    conv_base = NASNetMobile(weights = None,
                            include_top=True,
                           classes=256)
    
    我的模型摘要如下所示(取决于使用的相应网络):

    除了卷积结构的变化,我还尝试使用预先训练的权重,将所有层设置为可训练层,将最后一个卷积层设置为可训练层,数据增强,使用
    分类交叉熵
    对比损失
    函数,改变学习率,但它们都有相同的行为。事实上,培训和验证精度始终为0.5

    有人知道我错过了什么/做错了什么吗


    谢谢。

    您可以参考Shubham Panchal的“使用暹罗网络和TensorFlow从头开始的人脸识别”,您没有找到向量之间的abs距离
    | vector|u left-vector|u right
    ,然后将其传递到最后一个密集层。您可以参考此->Shubham Panchal的“使用暹罗网络和TensorFlow从头开始的人脸识别”您没有找到向量之间的abs距离
    |向量左-向量右|
    ,然后将其传递到最后一个密集层。
    __________________________________________________________________________________________________
    Layer (type)                    Output Shape         Param #     Connected to                     
    ==================================================================================================
    input_2 (InputLayer)            (None, 200, 200, 1)  0                                            
    __________________________________________________________________________________________________
    input_3 (InputLayer)            (None, 200, 200, 1)  0                                            
    __________________________________________________________________________________________________
    NASNet (Model)                  (None, 256)          4539732     input_2[0][0]                    
                                                                     input_3[0][0]                    
    __________________________________________________________________________________________________
    concatenate_5 (Concatenate)     (None, 512)          0           NASNet[1][0]                     
                                                                     NASNet[2][0]                     
    __________________________________________________________________________________________________
    dense_1 (Dense)                 (None, 64)           32832       concatenate_5[0][0]              
    __________________________________________________________________________________________________
    dropout_1 (Dropout)             (None, 64)           0           dense_1[0][0]                    
    __________________________________________________________________________________________________
    dense_2 (Dense)                 (None, 2)            130         dropout_1[0][0]                  
    ==================================================================================================
    Total params: 4,572,694
    Trainable params: 4,535,956
    Non-trainable params: 36,738