coco数据集的mask将每个实例都分离出来了,这通常适用于实例分割或者全景分割
对于语义分割而言,每一个mask包含每个类别的所有实例
所以coco实力分割的mask转语义分割思路很简单,将同一个类别的实例mask直接相加,然后转成布尔类型即可
假设你已经开始训练,训练时获取到了当前batch某个class的标签,那么代码如下:
# 处理coco实例分割掩码
# 实例mask累加-->语义mask
true_masks = torch.stack([tensor.sum(dim=0, keepdim=True) for tensor in masks], dim=0) \
.bool() \ #累加后需要转成二值图
.squeeze(1) \ #由于合并后所有的实例都在一张mask上,,实例通道等于1,因此直接丢掉这个通道即可
.to(device=device, dtype=torch.long)