【问题标题】:How to resize image segmentation mask?如何调整图像分割蒙版的大小?
【发布时间】:2020-09-23 12:52:28
【问题描述】:
我对每个图像都有一个二进制掩码,每个掩码像素的值为 0 或 255。现在因为我的图像分割需要固定大小的图像,我将不得不调整图像和掩码的大小。但是,当我调整图像大小时,掩码中会出现值大于 0 但小于 255 的位置。我如何知道要保留哪一个?因为图书馆要求只有0或255。请帮帮我,非常感谢。
【问题讨论】:
标签:
deep-learning
computer-vision
conv-neural-network
image-segmentation
semantic-segmentation
【解决方案1】:
如果您想调整图像大小并希望结果图像仅包含原始范围内的值,您可以使用最近邻插值法。
【解决方案2】:
如果您使用最近邻以外的插值调整大小,您确实会得到 [0, 255] 范围内的值。这不一定是坏事。如果您的损失函数是交叉熵,您可以将这些值视为“软标签”。也就是说,这个像素对任何目标都没有“硬”分配,而是对两者都有“软”的概率分配。
将此推广到多标签分割掩码,以及更复杂的几何增强(例如,旋转、仿射等)。问题是
如何正确地将增强应用于离散目标图像?
例如,您有一个包含 81 个类别的语义分割掩码(也就是说,每个像素在 {0, 1, ..., 80} 中都有值,表示该像素的类别。
这些目标掩码存储为indexed RGB images。
您想对输入图像和目标蒙版应用一些几何增强。
Amitay Nachmani 提出的“快速而肮脏”的方法是使用最近邻插值法。
更“准确”和“正确”的方法是将目标掩码从HxW 离散(整数)掩码转换为CxHxW 概率图:即每个通道将对应于每个像素属于 81 个类别中的每一个的概率。
请注意,这不是预测的分割(网络的输出),而是网络应该预测的目标。这样,您可以将每个目标像素表示为 1-hot 81-dim 向量。
通过这种表示,您可以使用与输入图像本身(通常是双三次)相同的插值方法将增强分别应用于每个通道。
现在,对于每个目标像素,它属于 81 个类别中的每一个的概率,这些向量不再是 1-hot(由于插值和变换)。您可以使用argmax 将此映射转换回每个像素的类硬分配,或修改损失函数以使用这些软标签以更好地捕获图像中不同区域之间的边界。