常用的计算机视觉中的损失函数有:
- 均方差损失(Mean Squared Error, MSE): 公式:MSE = 1/n * Σ(y-ŷ)² 原理:计算预测值与真实值之间的差距的平方的平均值,用于回归任务。 PyTorch代码实现:
loss = nn.MSELoss()
output = model(input)
loss_value = loss(output, target)
- 交叉熵损失(Cross Entropy Loss): 公式:CE = -Σ(y*log(ŷ)) 原理:衡量目标类别与预测类别之间的差异,用于多分类任务。通常与softmax激活函数一起使用。 PyTorch代码实现:
loss = nn.CrossEntropyLoss()
output = model(input)
loss_value = loss(output, target)
- IOU损失(Intersection over Union, IOU): 公式:IOU = (A ∩ B) / (A ∪ B) 原理:计算预测框和真实框之间的交并比,用于目标检测任务。 PyTorch代码实现:
def iou_loss(pred_boxes, target_boxes):
pred_area = (pred_boxes[..., 2] - pred_boxes[..., 0]) * (pred_boxes[..., 3] - pred_boxes[..., 1])
target_area = (target_boxes[..., 2] - target_boxes[..., 0]) * (target_boxes[..., 3] - target_boxes[..., 1])
x1 = torch.max(pred_boxes[..., 0], target_boxes[..., 0])
y1 = torch.max(pred_boxes[..., 1], target_boxes[..., 1])
x2 = torch.min(pred_boxes[..., 2], target_boxes[..., 2])
y2 = torch.min(pred_boxes[..., 3], target_boxes[..., 3])
intersection = torch.clamp((x2 - x1), min=0) * torch.clamp((y2 - y1), min=0)
union = pred_area + target_area - intersection
iou_loss = 1 - (intersection + 1e-6) / (union + 1e-6)
return iou_loss.mean()
-
Focal loss损失(Focal Loss): 公式:FL = -α(1-ŷ)ˠlog(ŷ) 原理:解决类别不平衡问题的损失函数,通过减小易分类样本的权重,使得难分类的样本更受关注。通常与sigmoid激活函数一起使用。 PyTorch代码实现:
loss = nn.BCEWithLogitsLoss(pos_weight=torch.Tensor([alpha]))
output = model(input)
loss_value = loss(output, target)
以上是计算机视觉中一些常用的损失函数及其公式、原理、使用场景和在PyTorch框架下的代码实现。根据具体的任务和需求,可以选择适合的损失函数来训练和评估模型。