使用tensorflow-hub.KerasLayer和tensorflow 2.x使用Faster-RCNN进行学习转移

时间:2020-01-15 14:53:06

标签: python tensorflow tensorflow-hub

系统信息

  • 您正在使用的模型的顶级目录是什么http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz
  • 我是否编写了自定义代码(与使用TensorFlow提供的股票示例脚本相反):是
  • 操作系统平台和发行版(例如Linux Ubuntu 16.04):Windows 10
  • 从(源或二进制)安装的TensorFlow :二进制
  • TensorFlow版本(使用下面的命令):2.1.0
  • Bazel版本(如果从源代码编译)
  • CUDA / cuDNN版本:10.0 / 7.6.5
  • GPU模型和内存:GTX 1060
  • 要复制的精确命令

我正在尝试使用fast_rcnn进行转学。 当前该模型无法通过tensorflow-hub使用,因此我必须加载旧版模块 从上面给出的地址。 我能够加载模型,检索tensorflow-hub.KerasLayer对象并通过它传递数据。

但是现在我想将此网络调整为仅包含2个类的我自己的数据集,所以我想知道如何修改KerasLayer对象,以便分类层不输出90个类,而只输出2个类?

如果我使用的方法不正确,您对解决我的问题有何建议?

我想避免使用tensorflow对象检测API。 就像文档中提到的那样,旧模型是不可训练的,但是我认为如果添加自己的层不会有问题,对吗?

这是我正在使用的代码

import tensorflow_hub as hub
import numpy as np
import cv2 

# Run this once, then provide the local path where the model was downloaded, 
# instead of the below http address
model = hub.KerasLayer(
    "http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz",
    signature="serving_default",
    signature_outputs_as_dict=True,
)

image = np.expand_dims(cv2.imread("/your/image.jpg"), 0).astype(np.uint8)
# I would like this to output only 2 different classes in 'outputs["detection_classes"]'
outputs = model(image)

0 个答案:

没有答案