我正在学习this example about Unet。 这是关于二进制分段的,我对代码有一些疑问:
这是什么意思:
#preprocess the mask
mask[mask >= 2] = 0
mask[mask != 0 ] = 1
数据集包含由三种颜色组成的“蒙版”图片(实际上,它们被称为“三映射”)。作为测试,我尝试在这段代码之前和之后绘制mask
,看来这些代码行的作用是将mask
图片从三种颜色转换为两种颜色({ {1}}和background: purple
),但我不知道如何。
在“ 生成器”部分的底部,有一个由三个子图片组成的图片。中间的子图像是“黑白”蒙版。
哪些代码行可以将“蒙版”图片的颜色从foregorund: yellow
转换为purple/yellow
?
最后,我尝试通过代码行black/white
来绘制msk
,而不是通过plt.imshow(msk)
来绘制(如代码中所示)。
但是通过plt.imshow( np.concatenate([img, msk], axis = 1))
绘制msk
的结果是黑色的,为什么?
答案 0 :(得分:1)
UNet至少以其原始形式与二进制掩码一起使用。您具有具有三个区域,背景,对象和某种边缘的蒙版。这段代码使背景(标签2)等于零,而对象及其边缘(标签0和1)等于1。这样,您就可以将二进制掩码用作基本事实。您会看到它们是紫色和黄色,因为matplotlib的默认颜色图是 viridis ,它恰好是零的紫色和1的黄色。这并不是说实际上是从那些可能会以某种方式使用的蒙版中丢弃了有用的信息训练更好的模型但这可以简化一些事情并更好地了解发生了什么。
遮罩预处理代码中的最后一步将单色遮罩转换为rgb。因此,当您用彩色图像绘制它们时,您的蒙版可以是(0, 0, 0)
(黑色)或(1, 1, 1)
(白色)。
不确定,它应该可以工作,可能与plt.imshow