Mask-RCNN,ValueError:无法将输入数组从形状(70)广播到形状(1)

Posted

技术标签:

【中文标题】Mask-RCNN,ValueError:无法将输入数组从形状(70)广播到形状(1)【英文标题】:Mask-RCNN, ValueError: could not broadcast input array from shape (70) into shape (1) 【发布时间】:2020-01-11 11:07:36 【问题描述】:

我正在开展一个项目,该项目使用 Mask-RCNN 在 SpaceNet 数据集上检测建筑物。当我运行这段代码时:

model.train(dataset_train, dataset_val, 
            learning_rate=config.LEARNING_RATE, 
            epochs=1, 
            layers='heads')

我收到了这个错误:

    1772             batch_images[b] = mold_image(image.astype(np.float32), config)

-> 1773             batch_gt_class_ids[b, :gt_class_ids.shape[0]] = gt_class_ids

   1774             batch_gt_boxes[b, :gt_boxes.shape[0]] = gt_boxes

   1775             batch_gt_masks[b, :, :, :gt_masks.shape[-1]] = gt_masks

ValueError: 无法将输入数组从形状 (70) 广播到形状 (1)

并且还收到了这个警告:

当我调试变量:“gt_class_ids”和“batch_gt_class_ids”时, 我得到了这个:

【问题讨论】:

嗨,我在第 1775 行“batch_gt_masks[b, :, :, :gt_masks.shape[-1]] = gt_masks”上收到此错误,为什么会发生这种情况?跨度> 【参考方案1】:

ValueError: could not broadcast input array from shape (70) into shape (1) 表示第 1773 行 batch_gt_boxes[b, :gt_boxes.shape[0]] = gt_boxes 中存在数组形状不匹配,更具体地说,您尝试将值从形状 70 的数组广播到形状 1 的数组。

你能在这个脚本上运行一个调试器并分享gt_class_idsbatch_gt_class_ids的值吗?这可以帮助更好地解决问题。谢谢

【讨论】:

【参考方案2】:

正如@Mahesh 所说,我调试了变量gt_class_ids 并意识到它的形状是(x, 1)。 'x' 可能是 70、15 或其他任何值,问题出在 gt_class_ids.shape[0] 部分。 gt_class_ids.shape[0] 给了我们“x”,x 又可以是任何数字。于是我去了

模型.py

(我的方向是:C:\Users\MUSTAFAAKTAS\Desktop\SpaceNet_MaskRCNN\mrcnn\model.py)

文件并更改为batch_gt_class_ids[b, :gt_class_ids.shape[1]] = gt_class_ids

改为batch_gt_class_ids[b, :gt_class_ids.shape[0]] = gt_class_ids

所以,它返回 '1' 而不是 'x'。

这个解决方案对我有用:)

【讨论】:

另一种解决方案是注意您传递给该代码的数组大小。

以上是关于Mask-RCNN,ValueError:无法将输入数组从形状(70)广播到形状(1)的主要内容,如果未能解决你的问题,请参考以下文章

使用 MSBuild 将输出项传递给单独的目标

『计算机视觉』Mask-RCNN_关键点检测分支(待续)

Mask-RCNN : 代码使用

Mask-RCNN数据集制作

mask-rcnn训练自己的数据集

mask-rcnn训练自己的数据集