本文介绍使用4D毫米波雷达,实现目标检测与可行驶区域分割,它是来自CVPR2022的。
会讲解论文整体思路、输入数据分析、模型框架、设计理念、损失函数等,还有结合代码进行分析。
论文地址:Raw High-Definition Radar for Multi-Task Learning
代码地址:https://github.com/valeoai/RADIal/tree/main
FFT-RadNet只使用雷达信息,实现车辆检测和可行驶区域分割。
模型框架如下图所示
整体思路主要由6步组成:
论文使用的4D毫米波雷达,是高清的,角度分辨率提升到小于一度,接近激光雷达的性能。
模型输入的是“范围-多普勒”频谱,RD图。下面有两张RD图,先看一下是长这样的,有些抽象。
分析一下,如何生成这种“范围-多普勒”频谱图。
雷达通常由一组发射天线和接收天线组成。发射天线发射电磁波,这些波在撞击环境中的物体后反射回接收天线。
然后分析一下,为什么要用“范围-多普勒”RD图,作为模型的输入。
A、范围-方位角-多普勒(RAD),需要计算3D张量的开销,而且预处理成本高。
B、范围-方位(RA)
C、点云(PC),雷达点云分割被探索过,用来估算占用情况,但是预处理成本高。
输入的“范围-多普勒”频谱,首先进入MIMO预处理编码模块。其中,MIMO是指多输入多输出。
论文使用的4D毫米波雷达,是高清的,称为“高清成像雷达”
物体如何在RD频谱中显示:
预编码器层的目的:
预编码器的作用:
预编码器的技术细节:
方位角和仰角的恢复:
端到端训练:
FFT-RadNet架构中的预编码器
每个接收天线接收到的反射信号形成一个范围-多普勒(RD)频谱。这个频谱是一个二维数组,其中一个维度代表距离,另一个维度代表速度(多普勒)。
MIMO预处理模块的代码:
class MIMO_PreEncoder(nn.Module):
def __init__(self, in_layer,out_layer,kernel_size=(1,12),dilation=(1,16),use_bn = False):
super(MIMO_PreEncoder, self).__init__()
self.use_bn = use_bn
self.conv = nn.Conv2d(in_layer, out_layer, kernel_size,
stride=(1, 1), padding=0,dilation=dilation, bias= (not use_bn) )
self.bn = nn.BatchNorm2d(out_layer)
self.padding = int(NbVirtualAntenna/2)
def forward(self,x):
width = x.shape[-1]
x = torch.cat([x[...,-self.padding:],x,x[...,:self.padding]],axis=3)
x = self.conv(x)
x = x[...,int(x.shape[-1]/2-width/2):int(x.shape[-1]/2+width/2)]
if self.use_bn:
x = self.bn(x)
return x
kernel_size
(默认为 (1, 12)
)dilation
(默认为 (1, 16)
)FPN金字塔结构是用来学习多尺度特征,同时捕获RD频谱图的粗略和细致特征,对于识别不同大小的对象非常重要。
FPN架构是针对雷达数据特性进行了优化的设计。
它在保持网络结构相对简单的同时,能够有效地处理雷达信号中的多尺度特征,这对于雷达数据中的对象检测和语义分割至关重要。
通过这种方式,FPN能够更好地捕捉到从远距离到近距离的不同尺度的物体特征,从而提高整体检测和分割的准确性。
FPN的部分代码:
class FPN_BackBone(nn.Module):
.......
def forward(self, x):
x = self.pre_enc(x)
x = self.conv(x)
x = self.bn(x)
x = self.relu(x)
# Backbone
features = {}
x1 = self.block1(x)
x2 = self.block2(x1)
x3 = self.block3(x2)
x4 = self.block4(x3)
# 这里在逐步下采样过程中,生成的'x2'、'x3'、'x4',后面范围-方位角RA解码器会用到
features['x0'] = x
features['x1'] = x1
features['x2'] = x2
features['x3'] = x3
features['x4'] = x4
return features
这里在逐步下采样过程中,生成的'x2'、'x3'、'x4',后面范围-方位角RA解码器会用到
范围-方位角编码器,RA解码器,从特征金字塔中输出的三个分支特征图,构建一个范围-方位角的潜在表示。
这一步骤通过模型学习,将RD数据转换成RA数据,更适合对象定位和空间分割任务。
这里建议看源码来理解,更为直接;感觉论文这里讲的有些牵强。
class RangeAngle_Decoder(nn.Module):
def __init__(self, ):
super(RangeAngle_Decoder, self).__init__()
# 创建了上采样层(deconv4 和 deconv3)和卷积块(conv_block4 和 conv_block3)。
# 上采样层使用转置卷积(ConvTranspose2d)来增加特征映射的空间分辨率。
self.deconv4 = nn.ConvTranspose2d(16, 16, kernel_size=3, stride=(2,1), padding=1, output_padding=(1,0))
self.conv_block4 = BasicBlock(48,128)
self.deconv3 = nn.ConvTranspose2d(128, 128, kernel_size=3, stride=(2,1), padding=1, output_padding=(1,0))
self.conv_block3 = BasicBlock(192,256)
# L3 和 L2 是1x1卷积层,用于调整通道维度。
self.L3 = nn.Conv2d(192, 224, kernel_size=1, stride=1,padding=0)
self.L2 = nn.Conv2d(160, 224, kernel_size=1, stride=1,padding=0)
# 定义RA解码器的计算过程
def forward(self,features):
# 'x4'、'x3'、'x2'来自PFN的多分支输出,而且是下采样过程产生的
T4 = features['x4'].transpose(1, 3)
T3 = self.L3(features['x3']).transpose(1, 3)
T2 = self.L2(features['x2']).transpose(1, 3)
# 上采样T4,然后与T3拼接在一起,再经过卷积
S4 = torch.cat((self.deconv4(T4),T3),axis=1)
S4 = self.conv_block4(S4)
# 上采样S4,然后与T2拼接在一起,再经过卷积,得到最终输出out
S43 = torch.cat((self.deconv3(S4),T2),axis=1)
out = self.conv_block3(S43)
return out
检测任务,主要用来检测车辆。
分类部分:
回归部分:
分割任务,主要用来预测可行驶区域的。
卷积处理:
最终卷积输出:
检测任务——损失函数设计:
分割任务——损失函数设计:
模型整体的损失如下公式所示:
论文提出了RADIal数据集,
公开可用的带雷达的驾驶数据集,如下表所示:
数据集规模被定义为“小”是指<15k 帧、“大”是指>130k 帧、“中等”是介于两者之间。
雷达分为低清晰度‘LD’、高清晰度‘HD’或扫描型‘S’,其数据以不同的表示形式发布,涉及不同的信号处理流程:
多普勒信息的存在取决于雷达传感器。其他传感器模态包括相机‘C’、激光雷达‘L’和里程计‘O’。
RADIal 是唯一提供高清雷达的每种表示形式,并结合相机、激光雷达和里程计的数据集,同时在论文中提出检测和自由空间分割任务。
详细信息看我这篇博客:4D毫米波雷达——RADIal数据集、格式、可视化 CVPR2022_4d毫米波雷达数据-CSDN博客
在 RADIal 测试分割上的对象检测性能
FFT-RadNet被设计用来摆脱将模数转换(ADC)数据转换为稀疏点云或更密集表示(RA或RAD)的信号处理链,同时不损害信号的丰富性。
由于输入数据仍然相当大,作者设计了一个紧凑的模型来限制操作数量方面的复杂性,作为性能和范围/角度精度之间的一种权衡。预编码器层显著压缩了输入数据。
多输入多输出(MIMO)雷达系统,可以通过对雷达信号的复杂处理来估计方位角和仰角。
这通常需要额外的信号处理步骤,比如利用不同雷达天线之间的相位差异来估计到达角(AoA)。
如上表所示:
在简单样本和困难样本上,进行车辆检测和可行使区域分割分析
本文先介绍到这里,后面会分享4D毫米波雷达的其它数据集、算法、代码、具体应用示例。
对于4D毫米波雷达的原理、对比、优势、行业现状,可以参考我这篇博客。
对于4D毫米波雷达——RADIal数据集、格式、可视化 CVPR2022,可以参考我这篇博客。
分享完成,本文只供大家参考与学习,谢谢~