如何计算Mask Rcnn中对象的单个蒙版区域
Posted
技术标签:
【中文标题】如何计算Mask Rcnn中对象的单个蒙版区域【英文标题】:How to calculate individual mask area of the objects in Mask Rcnn 【发布时间】:2020-04-16 08:57:41 【问题描述】:我创建了自己的数据集,用于识别田地中特定类型的作物。 Mask RCNN 在该对象上创建一个多边形掩码。图像中大约有 17 个不同的对象,因此 MaskRCNN 在 17 个对象上创建了一个遮罩。但我无法找到每个面具的面积。
我找到了一种方法,但我不确定它是否正确。 我已将此代码添加到 inspect_balloon_model.ipynb:
r['masks].shape[-1] = 17
for i in range(r['masks'].shape[-1]):
mask = r['masks'][:, :, i]
image[mask] = 255
image[~mask] = 0
unique, counts = np.unique(image, return_counts=True)
mask_area = counts[1] / (counts[0] + counts[1])
print(counts[1])
这里是 counts1 是单个蒙版的面积。这是正确的吗?
编辑: r['masks'].shape ---> (8170, 6000, 17); 原图形状 --> (8170, 6000, 3)
示例图片:
【问题讨论】:
【参考方案1】:看起来正确,但 IMO 非常复杂。 更简单的版本是:
positive_pixel_count = mask.sum() # assumes binary mask (True == 1)
h, w = mask.shape[1:3] # assumes NHWC data format, adapt as needed
area = positive_pixel_count / (w*h)
【讨论】:
这里的mask.shape和原图的形状一样 你提到了Mask RCNN。在该网络中,预测的掩码是每个实例并且相对于边界框。如果您谈论的是不同类型的口罩,请在问题中说明并提供口罩外观示例 我分享了一张示例图片。添加了面具的形状 我是否正确假设每个蒙版都是一个二值图像,其中一个彩色区域为白色,其他地方为黑色?如果是这样,你的面积计算和我的是等价的,因为counts[0]
是黑色像素的数量,所以将counts[0]
和counts[1]
相加得到像素总数(即w*h
)。这不是您要寻找的领域吗?以上是关于如何计算Mask Rcnn中对象的单个蒙版区域的主要内容,如果未能解决你的问题,请参考以下文章
『计算机视觉』Mask-RCNN_训练网络其三:model准备
如何将使用 Mask Rcnn 在自定义对象检测上创建蒙版图像的 Keras 模型转换为 CoreML 模型以在 iOS 应用程序中使用?