【问题标题】:Cannot use vggface-keras in Tensorflow 2.0无法在 Tensorflow 2.0 中使用 vggface-keras
【发布时间】:2020-05-02 22:29:34
【问题描述】:

我正在尝试使用来自https://github.com/rcmalli/keras-vggface 的 keras-vggface 库来训练 CNN。我已经安装了 tensorflow 2.0.0-rc1、keras 2.3.1、cuda 10.1、cudnn 7.6.5 并且驱动程序的版本是 418,问题是当我尝试使用 vggface 模型作为卷积基础时,我得到一个错误,这里是代码和错误

from keras_vggface.vggface import VGGFace 
conv_base = VGGFace(model='vgg16', include_top=False)

model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(1024, activation='relu'))
model.add(layers.Dense(800, activation='softmax'))

错误!

TypeError Traceback (most recent call last)
    <ipython-input-4-f6b5cad8f44b> in <module>
          1 #arquitectura
          2 model = models.Sequential()
    ----> 3 model.add(conv_base)
          4 model.add(layers.Flatten())
          5 model.add(layers.Dense(1024, activation='relu'))

~/anaconda3/envs/vggface/lib/python3.7/site-packages/tensorflow_core/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
        455     self._self_setattr_tracking = False  # pylint: disable=protected-access
        456     try:
    --> 457       result = method(self, *args, **kwargs)
        458     finally:
        459       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access

~/anaconda3/envs/vggface/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/sequential.py in add(self, layer)
        156       raise TypeError('The added layer must be '
        157                       'an instance of class Layer. '
    --> 158                       'Found: ' + str(layer))
        159 
        160     tf_utils.assert_no_legacy_layers([layer])

TypeError: The added layer must be an instance of class Layer. Found: <keras.engine.training.Model object at 0x7f0bf03db210>

希望您能告诉我为什么会出现此错误以及如何解决,谢谢阅读。

【问题讨论】:

    标签: python keras deep-learning tensorflow2.0


    【解决方案1】:

    问题是kerastf.keras 之间不兼容。您正在使用的库 (vggface-keras) 使用 keras,而您的代码使用 tf.keras。这行不通。

    唯一可能的解决方案是您将keras 用于您的整个管道,或者让您修改vggface-keras 库以使用tf.keras,包括修改所有导入和修复出现的任何错误。

    【讨论】:

    • 感谢我做这些事情并努力解决的问题,如果我发现了我无法处理的东西,我会在那里编辑,否则我会分享我的东西谢谢现在
    【解决方案2】:

    这里有一个页面,你可以在这里下载带有vggface模型权重的.h5文件,这样我们就可以用它在高于1.15版本的tensorflow中训练

    https://sefiks.com/2018/09/03/face-recognition-with-facenet-in-keras/

    【讨论】:

      【解决方案3】:

      VGG-Face 被包裹在 python 的 deepface 框架中。只需将 VGG-Face 字符串传递给模型名称变量即可。

      #!pip install deepface
      from deepface import DeepFace
      obj = DeepFace.verify([
            ["img1.jpg", "img2.jpg"],
            ["img1.jpg", "img3.jpg"],
            ["img1.jpg", "img4.jpg"],
         ]
         , model_name = "VGG-Face")
      print(obj)
      

      这个块将检查img2,img3,img4之间的img1。

      【讨论】:

      • 抱歉,这可以重新训练神经网络吗?我可以使用除最后 3 层之外的所有层吗,例如 w/tensorflow 和 keras?
      • 这会在后台构建一个 tensorflow / keras 模型。你不需要重新训练它,但如果你愿意的话,你仍然可以重新训练它。
      • 感谢您的回复,这里的东西是我有 20k 不同的人 w/大约 300 张照片,我试图在 ip cam 流中对它们进行分类,我不知道是否制作 deepface。验证将是赖特方法,你怎么看?
      • 大规模人脸识别通过 deepface 中的 find 功能进行处理。它会在您的数据库中找到面部的矢量表示一次 - (20k 人 x 300 图片)。然后,应用面部识别将在几秒钟内处理。阅读我的回购文档深入解释了它。
      【解决方案4】:

      我还需要在 Tensorflow 2 中使用 vggface,因此创建了 this fork of keras-vggface。您应该可以使用python setup.py install 安装它(克隆后)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-30
        • 2019-08-04
        • 2019-10-28
        • 2020-01-05
        • 1970-01-01
        • 2020-12-24
        • 2020-01-26
        • 1970-01-01
        相关资源
        最近更新 更多