参考代码:BEVDistill
1. 概述
介绍:基于相机的BEV感知算法可以从周视图像中获取丰富语义信息,但是缺乏深度信息的,对此一些方法中通过深度估计的形式对这部分缺乏的深度信息进行补充,从而实现网络性能的提升。使用深度估计需要添加对应网络模块和标签数据,也会带来不少的工作量。对此,可以从知识蒸馏的角度从Lidar点云数据中去弥补图像中缺失的信息,这篇文章中检测网络的角度探讨了3D检测下的知识蒸馏(核心在于怎么实现不同模态数据的信息蒸馏),给出从BEV特征dense蒸馏和实例蒸馏的方法。
2. 方法实现
2.1 整体方案
在下图中展示了文章方法的整体方案结构图:
在上图中分别用Lidar和多视图相机构建了对应3D检测算法,并在空间特征对齐的BEV特征下做基于object的dense蒸馏,在检测头中基于匹配做inst级别的稀疏蒸馏。
2.2 基于object BEV的dense蒸馏
这部分对BEV特征的蒸馏是比较具有通用价值的,可以迁移到其它任务场景下去。对于Lidar和相机生成的BEV特征描述为 F 3 D , F 2 D F^{3D},F^{2D} F3D,F2D,则套用原本的蒸馏方法直接减少对应特征图的差异Loss:
L f e a t = 1 H W ∑ i H ∑ j W ∣ ∣ F i j 3 D − F i j 2 D ∣ ∣ 2 L_{feat}=\frac{1}{HW}\sum_i^H\sum_j^W||F_{ij}^{3D}-F_{ij}^{2D}||_2 Lfeat=HW1i∑Hj∑W∣∣Fij3D−Fij2D∣∣2
但是,由于Lidar和相机之间数据的模态差异较大,直接进行蒸馏会引入很多无关噪声。对此,一种一种解决方案便是在目标区域(object area)上去做特征差异最小化,这里去第 i i i个object的中心为 ( x i , y i ) (x_i,y_i) (xi,yi),则以该中心构造二维高斯分布:
w i , x , y = e x p ( − ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 2 σ i 2 ) w_{i,x,y}=exp(-\frac{(x_i-\hat{x}_i)^2+(y_i-\hat{y}_i)^2}{2\sigma_i^2}) wi,x,y=exp(−2σ