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_ids
和batch_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)的主要内容,如果未能解决你的问题,请参考以下文章