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

前言:本篇博文为译文,翻译自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不需要,但是我发现如果我们也进行目标标准化的话,会让训练变得更容易.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值