之前无数次遇见mask,这次总算搞懂了,简单总结下:
- 控制损失中不同样本的分量
假设损失是对N个样本的单独损失求和,而网络对某些样本的预测已经足够精确了,这时候就可以利用mask(我也不懂为什么要叫mask)控制损失计算时,不同样本的权重,让损失更关注结果差的样本
masks = torch.zeros(len(index)).float().cuda() # 创建masks
for m in range(len(masks)):
iou = get_iou(index[m], gt_index[m]) # 以iou作为衡量每个样本预测效果的指标
masks[m] = (1-iou) # masks与iou值相反,iou越大,表示预测效果越好,则该样本在损失计算中越低
loss = loss * masks # 将计算好的损失乘以masks
注:这种用法,要求masks的维度就是样本数
- 损失计算时覆盖掉非法数值
我的任务中,这个问题非常常见,因为任务的目标是预测每个视频的起始点和结束点,所以有时深度模型可能将起始点预测到结束点之后,这是不合法的,因此可以用mask来解决此类问题
这里就不举例了,不同场景下不一样
- 图像分割任务中的掩码
不展开讲,没研究过这个任务
- nlp中应对pad机制
参考知乎回答,有机会整理案例