【三维目标检测模型】FCOS3D

 【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。   

参考书籍:《人工智能点云处理及深度学习算法》

        本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“https://blog.csdn.net/suiyingy/article/details/124017716”。配套书籍《人工智能点云处理及深度学习算法》提供更加全面和系统的解析。

        FCOS3D是二维FCOS模型的延展,由香港中文大学-商汤联合实验室发表在ICCVW 2021 《FCOS3D: Fully Convolutional One-Stage Monocular 3D Object Detection》,论文下载地址为“https://arxiv.org/abs/2104.10956”。该模型也属于一种anchor-free的单目三维目标检测方法,采用图像特征直接预测目标物体的三维属性。在图像特征提取阶段,FCOS3D分别提取了5种不同尺度特征,并且每种尺度特征都参与目标预测。在NeurIPS 2020大赛中,FCOS3D在nuScenes数据集上仅用视觉检测三维目标的比赛任务上取得了第一名成绩。

1 总体结构

        FCOS3D模型总体结构如下图所示。从图中可以基本看出,FCOS模型的核心思想是采用多尺度特征进行目标预测。其中,多尺度特征由BackBone和FPN neck计算得到,并且通过Share Head预测目标三维属性。在模型训练阶段,我们需要理解各个真实目标如何分配给对应的特征图已进行损失计算和迭代训练,下文将会对此进行详细介绍。

图 FCOS3D模型总体结构

        FCOS3D模型总体计算过程如下图所示:

2 模型详解

2.1 图像特征提取

        FCOS3D图像特征提取由主干网络BackBone和特征金字塔FPN Neck来完成,函数入口为self.extract_feat(img)。主干网络采用残差网络ResNet结构,提取4种尺度特征,分别为256x232x400、512x116x200、1024x58x100、2048x29x50。特征金字塔将四种尺度特征进行再次进行特征融合和特征提取,并且增加了两种更小尺度的特征图,以有利于进行大尺寸目标的检测。图像特征提取模块最终输出5种尺度特征,分别为256x116x200、256x58x100、256x29x50、256x15x25、256x8x13,下面用hk x wk来表示这五种特征尺度。

图 FCOS3D图像特征提取

2.2 检测头Head

        FCOS3D针对各个尺度特征图分别采用相同(Shared)Head进行结果预测,因而每一种预测结果都包括5组数据。以分类预测结果为例,类别数量为10(含背景),模型通过卷积通道将特征通道数量由256转换为10。5组特征图(256 x hk x wk)预测得到的分类预测结果cls_score为10x116x200、10x58x100、10x29x50、10x8x13,共计10x30929。

        同样地,bbox位置预测结果bbox_pred维度为9x116x200、9x58x100、9x29x50、9x8x13,共计9x30929。这9个维度分别对应特征点相对目标二维中心点偏移(Offset,两个维度)、深度(Depth,1个维度)、尺寸(Size,3个维度)、角度(Rotation,1个维度)以及速度(Velocity,两个维度)。

        方向分类预测结果dir_cls_pred维度为2x116x200、2x58x100、2x29x50、2x8x13,共计2x30929。中心度预测结果centerness维度为1x116x200、1x58x100、1x29x50、1x8x13,共计1x30929。

        FCOS3D模型另外一个不同之处在于对目标的属性进行了预测,而之前所介绍的模型均没有对属性值进行预测。其属性来源于nuScenes数据集,共8个类别,例如汽车是否处于行驶状态。详细属性介绍请参考前文nuScenes数据集介绍章节。属性值预测结果attr_pred维度为9x116x200、9x58x100、9x29x50、9x8x13,共计9x30929。

        FCOS3D模型的Head结构如下图所示。

图 FCOS3D Head结构

3 损失计算

3.1 标签计算

        FCOS3D属于一种anchor-free三维目标检测方法,根据特征点来完成对目标的预测。5个不同尺度特征图的网格根据缩放比例分别对应到原始图像尺寸上的一个特征点。该操作实际与anchor的思路一致。特征点的总体数量为30929,即全部特征网格数量之和。

        特征点落在在真实目标二维中心点一定半径视野范围内时,则该点可能作为一个正样本特征点。但是,不同尺度特征图对应的特征点可能落在同一目标视野范围内,那么模型会根据特征图缩放尺度和目标中心偏差将目标分配给其中一种尺度特征图。这样做的目的在于使用小尺度特征图预测大目标,而大尺度特征图预测小目标。

        另一方面,同一特征点可能落入多个不同目标视野范围内,那么FCOS3D把该特征点仅分配至二维中心距离最近的目标。经过上述限定,FCOS3D获取的真实标签主要包括类别标签labels_3d(30929)、候选框标签bbox_targets_3d(30929x9)、中心度标签centerness_targets(30929)和属性标签attr_labels(30929)

        FCOS3D真实标签获取的关键程序解析如下所示。

gt_bboxes_3d = gt_bboxes_3d.tensor.to(gt_bboxes.device)#相机坐标系三维真实框,9个维度,坐标3、尺寸3、方向1、速度2
gt_bboxes_3d[..., 6] = -torch.atan2(gt_bboxes_3d[..., 0], gt_bboxes_3d[..., 2]) + gt_bboxes_3d[..., 6]#角度转换
bbox_targets_3d = torch.cat((delta_xs, delta_ys, depths, gt_bboxes_3d[..., 3:]), dim=-1)#每个特征点距各个真实目标的二维中心偏差、深度、尺寸、方向、速度
bbox_targets = torch.stack((left, top, right, bottom), -1)#特征点相对于真实目标二维边界框四个边界的偏差
center_gts = torch.zeros_like(gt_bboxes)#真实目标二维中心点在各个特征图下的视野范围(固定特征图半径),特征图越小,则对应的视野范围越大
center_bbox = torch.stack((cb_dist_left, cb_dist_top, cb_dist_right, cb_dist_bottom), -1)#特征点到目标视野范围的距离
inside_gt_bbox_mask = center_bbox.min(-1)[0] > 0#特征点在真实目标视野范围内,即在中心区域内
max_regress_distance = bbox_targets.max(-1)[0]
inside_regress_range = ((max_regress_distance >= regress_ranges[..., 0])& (max_regress_distance <= regress_ranges[..., 1]))#距目标框的回归范围需满足要求,不同尺寸特征图用于回归不同大小目标
dists = torch.sqrt(torch.sum(bbox_targets_3d[..., :2]**2, dim=-1))#将每个特征点分配给距离最近的目标
in_dist, min_dist_inds = dists.min(dim=1)
labels = gt_labels[min_dist_inds]

3.2 损失函数

        FCOS3D损失函数与上述Head预测结果和标签结果基本一一对应,主要包括分类损失、中心度损失、候选框损失和属性损失三大部分,且中心度损失、候选框损失和属性损失仅针对正样本进行计算。分类损失loss_cls采用FocalLoss损失函数,输入为cls_scores与labels_3d。中心度损失loss_centerness和属性损失loss_attr均采用CrossEntropyLoss损失函数。

        候选框由9个维度数据组成,需分别进行损失函数计算。各个维度损失函数权重由code_weight来决定,即 [1.0, 1.0, 0.2, 1.0, 1.0, 1.0, 1.0, 0.05, 0.05]。其损失函数包括二维中心偏差损失loss_offset、深度损失loss_depth、尺寸损失loss_size、角度损失loss_rotsin和速度损失loss_velo,损失函数均为SmoothL1Loss。此外,根据角度预测结果,FCOS3D也计算方向分类损失loss_dir,损失函数为CrossEntropyLoss。

因此,FCOS3D总体损失函数组成包括loss_cls、loss_centerness、loss_attr、loss_offset、        loss_depth、loss_size、loss_rotsin、loss_velo和loss_dir等9个部分。

4 模型训练

        本节所介绍的FCOS3D模型示例程序来源于mmdetection3d框架,其输入数据集为nuScenes,共预测9个类别目标。模型除预测三维目标类别和候选框信息之外,还对8个属性值进行预测。模型训练命令为“python tools/train.py configs/fcos3d/fcos3d_r101_caffe_fpn_gn-head_dcn_2x8_1x_nus-mono3d.py”。运行训练命令可得到如下图所示训练结果。

图 FCOS3D训练结果示意图

【python三维深度学习】python三维点云从基础到深度学习_python3d点云从基础到深度学习-CSDN博客

【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。  

更多python与C++技巧、三维算法、深度学习算法总结、大模型请关注我的博客,欢迎讨论与交流:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。Python三维领域专业书籍推荐:《人工智能点云处理及深度学习算法》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值