【问题标题】:Writing Keras Model Class编写 Keras 模型类
【发布时间】:2020-02-27 21:16:32
【问题描述】:

我想将下面的代码重写为一个类:

    input = Input(shape=(28, 28, 1))
    label = Input(shape=(10,))

    x = Conv2D(32, kernel_size=(3, 3), activation='relu')(input)
    x = MaxPooling2D(pool_size=(2, 2))(x)
    x = Conv2D(64, kernel_size=(3, 3), activation='relu')(x)
    x = MaxPooling2D(pool_size=(2, 2))(x)

    x = BatchNormalization()(x)
    x = Dropout(0.5)(x)
    x = Flatten()(x)
    x = Dense(512, kernel_initializer='he_normal')(x)
    x = BatchNormalization()(x)
    output = ArcFace(num_classes=10)([x, label])

    model = Model([input, label], output)

    model.compile(loss='categorical_crossentropy',
              optimizer=Adam(),
              metrics=['accuracy'])

这就是我所拥有的:

class ArcFace_Model():
    def __init__(self, input_shape, num_classes):
        self.input_shape = (input_shape,)
        self.num_classes = num_classes
        self.label_shape = (num_classes,)

    def build(self):
        #create model
        model = Sequential()

        #add model layers
        model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=self.input_shape))
        model.add(MaxPooling2D(pool_size=(2, 2)))
        model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
        model.add(MaxPooling2D(pool_size=(2, 2)))
        model.add(BatchNormalization())
        model.add(Dropout(0.5))
        model.add(Flatten())
        model.add(Dense(512, kernel_initializer='he_normal'))
        model.add(BatchNormalization())
        model.add(ArcFace(num_classes=self.num_classes))

        # loss and optimizer
        optimizer=Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
        model.compile(loss=categorical_crossentropy,
                        optimizer=optimizer,
                        metrics=['accuracy'])
        return model

但我有一个问题,我的 input_shape 是 128,但代码输入是 (28,28,1)。我这样做是因为我想在我的模型中使用 ArcFace 我在 github 上找到了一个类层。

有没有办法解决这个问题?

【问题讨论】:

  • 我没看懂问题
  • 您将不得不深入研究他们的源代码并更改输入和输出维度。不过应该是可以管理的!

标签: python-3.x tensorflow keras python-3.7 keras-layer


【解决方案1】:

您可以在 deepface 中构建基于 keras 的 arcface 模型。我在下面提到了支持的人脸识别模型。

#!pip install deepface
from deepface import DeepFace
models = ['VGG-Face', 'Facenet', 'OpenFace', 'DeepFace', 'DeepID', 'ArcFace']
model = DeepFace.build_model(models[5])
print(model.summary())

您也可以使用 arcface 应用人脸识别。这样,您不必手动构建模型。它还处理人脸识别管道的预处理阶段,包括后台检测和对齐。

obj = DeepFace.verify('img1.jpg', 'img2.jpg', model_name = 'ArcFace')
print(obj)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2021-08-30
    • 2020-01-31
    • 2021-09-16
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多