【问题标题】:Mask-RCNN with Keras : Tried to convert 'shape' to a tensor and failed. Error: None values not supported带有 Keras 的 Mask-RCNN:尝试将“形状”转换为张量但失败了。错误:不支持无值
【发布时间】:2019-05-24 09:04:22
【问题描述】:

我正在尝试在推理模式下运行Keras implemention of Mask_RCNN。基本上就是运行这段代码demo.ipynb

但是当我运行它时,我在创建模型时收到以下错误:

ValueError: Tried to convert 'shape' to a tensor and failed. Error: None values not supported.

这里是堆栈跟踪:

Traceback (most recent call last):
  File "/snap/pycharm-community/128/helpers/pydev/pydevd.py", line 1758, in <module>
    main()
  File "/snap/pycharm-community/128/helpers/pydev/pydevd.py", line 1752, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/snap/pycharm-community/128/helpers/pydev/pydevd.py", line 1147, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/snap/pycharm-community/128/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "[PATH/TO/Mask_RCNN/]/Own_code/Test.py", line 44, in <module>
    model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)
  File "[PATH/TO/Mask_RCNN/]/Mask_RCNN/mrcnn/model.py", line 1833, in __init__
    self.keras_model = self.build(mode=mode, config=config)
  File "[PATH/TO/Mask_RCNN/]/Mask_RCNN/mrcnn/model.py", line 2035, in build
    fc_layers_size=config.FPN_CLASSIF_FC_LAYERS_SIZE)
  File "[PATH/TO/Mask_RCNN/]/Mask_RCNN/mrcnn/model.py", line 947, in fpn_classifier_graph
    mrcnn_bbox = KL.Reshape((s[1], num_classes, 4), name="mrcnn_bbox")(x)
  File "[PATH/TO/venv/]lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 554, in __call__
    outputs = self.call(inputs, *args, **kwargs)
  File "[PATH/TO/venv/]lib/python3.6/site-packages/tensorflow/python/keras/layers/core.py", line 439, in call
    (array_ops.shape(inputs)[0],) + self.target_shape)
  File "[PATH/TO/venv/]lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py", line 7179, in reshape
    "Reshape", tensor=tensor, shape=shape, name=name)
  File "[PATH/TO/venv/]lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 529, in _apply_op_helper
    (input_name, err))

看起来我的问题与here 描述的相同,但没有真正的答案。

注意事项:

  • 我使用 Python 3.6 和 Tensorflow 1.13.1 运行它
  • 我已编辑 Keras 导入以使用嵌入在 Tensorflow 中的 Keras 版本
  • 我运行出现此错误的代码对应于演示笔记本的前 3 个块。

编辑

这是我正在运行的代码:

# Root directory of the project
ROOT_DIR = os.path.abspath("../")

# Import Mask RCNN
sys.path.append(ROOT_DIR)  # To find local version of the library

# Import COCO config
sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  # To find local version

# Directory to save logs and trained model
MODEL_DIR = os.path.join(ROOT_DIR, "logs")

# Local path to trained weights file
COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
# Download COCO trained weights from Releases if needed
if not os.path.exists(COCO_MODEL_PATH):
    utils.download_trained_weights(COCO_MODEL_PATH)

# Directory of images to run detection on
IMAGE_DIR = os.path.join(ROOT_DIR, "images")

class InferenceConfig(coco.CocoConfig):
    # Set batch size to 1 since we'll be running inference on
    # one image at a time. Batch size = GPU_COUNT * IMAGES_PER_GPU
    GPU_COUNT = 1
    IMAGES_PER_GPU = 1

config = InferenceConfig()

# Create model object in inference mode.
model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)

这实际上是来自 maskRCNN 存储库的 demo.ipynb 的复制/粘贴。最后一行是发生错误的地方。

【问题讨论】:

  • 如果我们能看到您的代码会有所帮助

标签: python tensorflow keras


【解决方案1】:

我得到了同样的错误,直到:

  1. 使用keras.__version__ == 2.2.4
  2. Tensorflow-gpu version == 1.12.0
  3. Skimage.__version__ == 0.14.2

不确定其他版本的错误是什么,可能与 pycocotools 或

不符
optimizer = keras.optimizers.SGD(
            lr=learning_rate, momentum=momentum,
            clipnorm=self.config.GRADIENT_CLIP_NORM) #this portion.

【讨论】:

  • 实际上,问题似乎出在使用嵌入在 Tensorflow 中的 Keras。当分别使用 Tensorflow 1.13 和 Keras 2.2.4 时,它可以工作。不知道为什么。
  • 是的..我也遇到了同样的情况...刚刚再次安装它们,它们就可以工作了!!
  • 是的,嵌入在 Tensorflow 中的 Keras 与独立的 Keras 之间存在一些差异。现在建议使用嵌入在 Tensorflow 中的 Keras 而不是简单的 Keras,我真的希望更新存储库以包含必要的更改。
  • 正确,如果我们追求实际生产力,tf 提供了比香草 keras 更多的选择。至少我更喜欢在做事的时候有更多的选择
【解决方案2】:

我做了这个官方issue thread推荐的所有更改。

这些基本上是 model.py 脚本中的更改,以使用 tf.keras 函数而不是纯 keras 函数。

这里是 my working fork(针对 TF 2.4.1 更新 - 2021 年 5 月)。

你可以在里面找到我的 colab 样本,或者通过这个link

【讨论】:

  • 谢谢安东尼奥,你能简单地提出这个问题吗?
【解决方案3】:

在model.py中替换这段代码

if s[1] is None:
    mrcnn_bbox = KL.Reshape((-1, num_classes, 4), name="mrcnn_bbox")(x)
else:
    mrcnn_bbox = KL.Reshape((s[1], num_classes, 4), name="mrcnn_bbox")(x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多