浅谈语义分割任务如何给像素点上色
通常解码器最终输出都会是(batch_size ,num_classes, h, w)
num_classes对应任务的类别数
所以在预测任务中,数据经过模型得到预测结果,形状也是
(batch_size ,num_classes, h, w)的Tensor列表,元素都是预测概率
seg_pred = net(x) #
1.创建画布,设置每个类别的颜色(我这里是4个,背景不算,因为不需上色)
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
lane_img = np.zeros_like(img) # 创建画布
color = np.array([[255, 125, 0], [0, 255, 0], [0, 0, 255], [0, 255, 255]], dtype='uint8')
2. 返回最大概率的通道数,通道1对应类别1, 类推。(开头说了,语义分割解码器n个channel对应n个类别
# 返回预测概率数组中最大值的索引-------axis=0,返回概率值大的属于哪一个通道。对应语义分割的类别。
shape是(h,w) 一共有h组列表, 每个列表有w个元素。 代表从上到下,每一行像素点的分类都给出来了
coord_mask = np.argmax(seg_pred, axis=0)
3.上色
or i in range(0, num_classes-1): #不算背景
lane_img[coord_mask == (i + 1)] = color[i] # 给像素点上色-----例如
img = cv2.addWeighted(src1=lane_img, alpha=0.8, src2=img, beta=1., gamma=0.)
赞 (0)