我正在研究一个使用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
当我调试变量:“ gt_class_ids”和“ batch_gt_class_ids”时, 我知道了:
答案 0 :(得分:1)
正如@Mahesh所说,我调试了变量gt_class_ids
,并意识到它的形状为(x,1)。 'x'可以是70、15或其他数值,问题出在gt_class_ids.shape[0]
部分。 gt_class_ids.shape[0]
给我们'x',x又可以是任何数字。所以我去了
model.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”。
此解决方案对我有用:)
答案 1 :(得分:0)
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
的值吗?这可以帮助更好地解决问题。谢谢