多模态回归—不止L1与L2损失

本文探讨了在处理多模态回归目标时,L1和L2损失的局限性,并介绍了多bin损失方法,该方法通过将目标范围离散化为多个区间(bin),结合分类与回归来更有效地解决问题。
部署运行你感兴趣的模型镜像

前言:本篇博文为译文,翻译自Patrick Langechuan Liu 发表在towards data science的博文 “Multimodal Regression — Beyond L1 and L2 Loss”

原博文链接:https://towardsdatascience.com/anchors-and-multi-bin-loss-for-multi-modal-target-regression-647ea1974617

原博文撰写时间:2019-09-30


深度学习最著名的应用是图像分类,其目标是训练神经网络从N个预定义的可能性中选择一个. 经过训练的神经网络可以从许多类别中分辨出一小块图像中的物体类型(例如猫). 这种情况下,常用的softmax损失函数即可表现很好. 然而,有时候网络的输出不是离散的类别,而是连续的值,这就是事情开始变得复杂的地方(This is where things start to get complicated).

(笔者注解:这不就是分类与回归任务中需要的损失函数不同嚒)

分类与回归

当面对一个连续的回归目标时,很容易想到将L1或L2损失直接应用到原始目标上,看它效果如何. 如果回归目标是单峰的(unimodal)(或者在分布中只有一个明显的峰值,非常像高斯),L2范数应该工作得很好. 然而,如果目标是超过单峰的,L2损失则不能得到很好的效果.

本文旨在讨论更有条理的(principled)方法来得到连续回归目标的损失,而且不止于高斯目标分布.

单峰分布及以上

0. 为什么L2损失在某些情况下会失败?

从概率的观点来看,L2损失假定潜在的目标分布是高斯分布(因此是单峰的). 最小化L2损失,或均方误差(MSE),均是最大化对数似然高斯(log-likelihood of a Gaussian). L2损失鼓励网络将所有模态的损失最小化,这将导致对任何单一模态的估计都可能很差. 特别是在图像重建应用中,使用L2损失通常会导致图像模糊. 这是由于假设噪声是高斯分布失败造成的.

使用L2损失回归双峰数据分布的失败示例

请注意,L1损失也不好. L2损失假设高斯先验,L1损失假设拉普拉斯先验(Laplacian prior),也是一种单峰分布. 直观地看,平滑L1损失(smooth L1 loss),或Huber损失,是L1和L2损失的组合,也假设了一个单峰的基本分布.

首先将回归目标的分布可视化,并考虑比L2更能反映和容纳目标数据分布的其他损失函数,才是更加合理的做法. 例如,如果目标分布是双峰的,一种直观的方法是查找目标属于哪个模式(或bin),然后对距模态中心的偏移进行回归.

这正是所谓的多bin损失(或混合分类/回归损失,离散/连续损失)所做的. 在CVPR 2017年的论文《3D Bounding Box Estimation Using Deep Learning and Geometry》中,首次提出了这种损失用于角度回归. 最初的背景是在单眼3D车辆检测中返回一个范围在[-π, π)的连续方向角. 从那时起,它被广泛应用于三维物体检测中的汽车方向回归,包括仅使用单眼图像(如Multi-level fusion、MonoPSR和FQNet)和使用点云(如Frustum PointNet和AVOD).

1. 在多Bin(Multi-Bin)损失之前(预备知识)

由于回归目标的范围较大,以及周期性带来的角度不确定性,方向估计可能是回归中最困难的问题之一.

在论文Crafting a multi-task CNN for viewpoint estimation (BMVC 2016)和Render for CNN: Viewpoint Estimation in Images Using CNNs Trained with Rendered 3D Model Views (CVPR 2015)中,作者总结了几种用于方向预测的方法(它们有不同的形式),分别是:

  1. 预测cos(θ)和sin(θ)
  2. 预测cos(θ-π/3), cos(θ) and cos(θ+π/3)
  3. 基于softmax交叉熵损失,直接将其划分为n个bins
  4. 基于加权交叉熵损失,使用几何结构感知分类(geometrically structure aware classification, GSA cls)

3和4的主要区别在于,传统的交叉熵只考虑了一个bin(包含ground truth的bin)的预测,而几何感知交叉熵损失考虑了所有bin,并以ground truth到每个bin中心的距离进行加权. 3和4只将得分最高的bin作为最终预测.

不同的方向预测方法

2. 原始多Bin(Multi-Bin)损失(用于角度回归)

原始的Multi-Bin损失将目标范围离散化,并将其划分为n个重叠的bin. 对于每个bin,神经网络模型既估计输出目标位于第i个bin内的置信概率Ci,也估计ground truth到bin中心的距离以作为输出目标的加权值. 总的multi-bin损失基本上是分类损失项(通常是softmax)和位置回归项(通常是L2或L1或平滑L1损失)的加权平均值.

注意在训练和推理过程中存在差异. 在训练过程中,所有包含ground truth角的bin被强制用于估计正确的目标. 在推理过程中,选择具有最大置信度的bin,并将该bin的估计残差应用于计算最终输出.

这一思想可以推广到角回归(angle regression)以外的许多情况. 关于重叠bin(overlapping bins)的一个简短说明:这对于均匀分布更重要,但对于多模态分布(multimodal distribution)就不那么重要了,因为对于后者,在bin边界上的样本要少得多.

2.1 Bin 宽度选择

如果回归目标中没有明确的聚类模式,且目标范围较宽,建议使用标准差作为bin尺度,正如论文GS3D: An Efficient 3D Object Detection Framework for Autonomous Driving (CVPR 2019)所推荐. 这比直接回归目标的效果好得多.

2.2 改进的 Multi-Bin Loss

在论文3D-RCNN: Instance-level 3D Object Reconstruction via Render-and-Compare (CVPR 2018)中,作者提出了不同的multi-bin损失. 它也将连续目标范围离散化为bins,但不是使用softmax挑选出唯一正确的bin,而是使用bin中心的加权平均(期望)作为最终预测,并使用L1进行正则化. 这样,就没有必要回归到bin中心的偏移量. 这与GSA的公式非常接近.

2.3 Anchor Boxes in Object Detection (对象检测中的锚框)

新进入目标检测领域的人可能会对锚框(anchor boxes)的概念感到困惑,锚框在许多现代目标检测网络架构中很流行,如Faster RCNN、RetinaNet和YOLOv2.

锚定法将图像空间(包括位置、比例、高宽比)划分为离散的bins,并在相应的bin中细化对象区域.

锚框被设计用于将所有可能的实例框的连续空间离散为具有预定义位置、比例和高宽比的有限数量的框.

锚框类似于深度学习中卷积的滑动窗口.

Image for post
人脸检测中的滑动窗口
DL中的锚框是一种以卷积方式应用滑动窗口的方法

从另一个角度来看,锚框和multi-bin损失背后的原理是极其相似的.

锚框和multi-bin损失通过对锚框(或multi-bin损失中的bin)进行分类并对到锚框/bin的残差进行回归,解决了一个非常复杂的多模态回归问题.

实际上,锚框是设计来捕获基于训练数据集的比例和高宽比,正如YOLOv2中解释的那样. 这与FQNet中基于多bin损失和k-means聚类的车辆大小回归非常相似.

3. The Takeaways(使用技巧)

可视化:在盲目应用L2范数之前,应先检查目标分布.

分治法:将目标范围划分为多个bin(重叠或不重叠),对目标所在bin/anchor进行分类,然后对残差进行回归.

另一个有用的技巧是执行目标标准化,以得到均值为零,方差为1的目标. 虽然在传统的机器学习中,标准化通常是在feature上使用,而target不需要,但是我发现如果我们也进行目标标准化的话,会让训练变得更容易.

您可能感兴趣的与本文相关的镜像

Qwen3-VL-8B

Qwen3-VL-8B

图文对话
Qwen3-VL

Qwen3-VL是迄今为止 Qwen 系列中最强大的视觉-语言模型,这一代在各个方面都进行了全面升级:更优秀的文本理解和生成、更深入的视觉感知和推理、扩展的上下文长度、增强的空间和视频动态理解能力,以及更强的代理交互能力

在高光谱图像激光雷达数据的多模态融合过程中,损失函数的设计旨在优化融合特征的表示能力,同时减少模态间的干扰。损失函数通常由多个部分组成,分别用于约束不同模态的特征一致性、空间对齐性以及任务相关的性能指标。 ### 损失函数的定义 1. **特征一致性损失(Feature Consistency Loss)** 为了确保高光谱图像激光雷达数据在共享特征空间中保持一致性,通常使用L1或L2范数来衡量不同模态之间的特征差异。该损失函数可以表示为: ```python loss_consistency = torch.mean(torch.abs(fusion_features - lidar_features)) # L1损失 ``` 或者使用L2损失: ```python loss_consistency = torch.mean((fusion_features - lidar_features) ** 2) # L2损失 ``` 其中,`fusion_features`表示融合后的特征,`lidar_features`表示激光雷达提取的特征。 2. **空间对齐损失(Spatial Alignment Loss)** 由于高光谱图像激光雷达数据在空间分辨率和坐标系统上存在差异,通常引入仿射变换或空间变换网络(STN)来对齐两者的空间信息。空间对齐损失可以采用特征图之间的互相关(Normalized Cross-Correlation, NCC)来衡量: ```python def ncc_loss(fused, lidar): mean_fused = torch.mean(fused) mean_lidar = torch.mean(lidar) numerator = torch.sum((fused - mean_fused) * (lidar - mean_lidar)) denominator = torch.sqrt(torch.sum((fused - mean_fused) ** 2) * torch.sum((lidar - mean_lidar) ** 2)) return 1 - numerator / denominator ``` 3. **任务驱动损失(Task-driven Loss)** 在目标检测或语义分割等任务中,损失函数还需结合具体任务进行设计。例如,在目标检测中,可以使用Faster R-CNN中的分类损失(交叉熵损失)和边界框回归损失(Smooth L1 Loss): ```python classification_loss = F.cross_entropy(class_logits, targets) regression_loss = F.smooth_l1_loss(predicted_boxes, target_boxes) total_task_loss = classification_loss + regression_loss ``` 4. **模态抑制损失(Modality Suppression Loss)** 针对模态干扰问题,例如在烟雾或低光照条件下某模态信息质量较差,可以引入模态抑制机制,通过注意力机制或门控机制动态调整各模态的权重。例如,使用Sigmoid门控函数控制模态的贡献: ```python gate = torch.sigmoid(modality_attention_weights) suppressed_features = gate * high_spectral_features + (1 - gate) * lidar_features loss_suppression = torch.mean((suppressed_features - target_features) ** 2) ``` ### 损失函数的综合形式 最终的总损失函数通常由上述多个损失项加权组合而成: ```python total_loss = α * loss_consistency + β * loss_spatial + γ * loss_task + δ * loss_suppression ``` 其中,α、β、γ、δ为各损失项的权重系数,通常通过实验调优确定。 ### 损失计算的实现 在实际实现中,这些损失函数通常在深度学习框架(如PyTorch或TensorFlow)中定义,并在训练过程中通过反向传播进行优化。例如,在PyTorch中: ```python optimizer.zero_grad() total_loss.backward() optimizer.step() ``` ### 模型优化策略 - **多尺度损失计算**:在不同特征尺度上计算损失,以增强模型对多尺度目标的适应能力。 - **动态权重调整**:根据训练过程中的损失变化动态调整各损失项的权重,避免某一损失项主导训练过程。 - **正则化项**:引入L2正则化或Dropout机制防止过拟合。 通过上述损失函数设计,可以有效提升高光谱图像激光雷达数据在多模态融合中的性能,同时减少模态间的干扰和噪声影响[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值