玩转Windows | 3D目标检测框架Smoke PyTorch实现

作者 | Wonderful  编辑 | GiantPandaCV

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【全栈算法】技术交流群

后台回复【标定工具】获取2D检测/分割/关键点,3D点云检测分割标注工具!

【导语】修改开源的 3D 检测算法,使用了 pytorch 自带的 DConv,省去 linux 下编译 DConv 的 cuda 代码,可以直接在 window 下训练和测试。在源码基础上增加了 finetune 和 resume 等功能,并提供了重新训练的模型。

代码:https://github.com/Huangdebo/SMOKE-window

  • [x] 模型效果40d63ecbf5929b9002bbbde145b8e261.gif

1 网络结构

2e703b94516c4d596fb687033639a546.pngsmoke 的网络机构比较简单粗暴,一个 DLA 直接出 w/4, h/4 的特征图,然后分成两路:(1) 关键点检测,用以得出每个类别的目标的 3D 中心点在 2D 图像中的投影 (2) 3D 信息的回归, depth_offset(1), keypoint_offset(2), dimension_offset(3), orientation(2),共 8 个channel。

2  3D 检测

2.1 关键点分支

类似 centernet,把目标看成点来检测,但不同的是,smoke 利用的是 3D box 的中心投影点,而不是 2D box 的中心点。cc5786e3e75e19b642ffc97e6d42443c.png

2.2 回归分支

首先是 location,网络回归的都是偏差,对于 Z 方向的值,通过预设的偏移量和尺度因子来计算:d1dca590469173248464353d4b465788.png对于 x,y,则是通过关键点分支得到的投影中心点和回归的偏移量计算得出,然后在通过反投影计算出 location:e491b60d6aa61cfaebad0ae653c87994.pngdimension 也是通过统计预设值和回归值来计算:2a2f0feb8ca9e49e9c307ac6f71d3f6b.png对于航向角的计算比较绕,smoke 并不是直接回归航向角,而是通过间接计算:4ca2fcf3b32fb0b59ba29c3b563039be.png在下图中将小车沿着y轴顺时针旋转,待小车和camera连线与相机坐标系的z轴重合时停止,那么紫色的角是没有发生变化的。于是有a4562b53abff958de6077f3e0e889069.pngr_y 和 alpha 就是 KITTI label 中的 rotation_y 和 alpha,β 就是论文中的 αz。但 smoke 也不是直接回归  αz,而且转化成另外一个变量  αx,αx 也是编码成 [sin(α), cos(α)],进行归一化处理c0ad48e74cd3874a52e9fca534aa6fc7.png基于上面的计算值,就可以 3D box 的8个顶点坐标了eab0ef023d913c351f6e920d7603f6d1.png

3 loss 计算

3.1 关键点分类 loss

与 centernet 类似,在 focal loss 的基础上加权,对中心点附近的位置降低loss权重,并通过巧妙的设计来抑制中心附近的回归值,让只有中心一个尖峰:8b0b8c3f13f5ffc8b25e3c1daab5b76f.png4f9a256033faa4b473bef6b650ecd983.png

3.2 回归 loss

smoke 使用了 disentangling loss 形式来计算回归分支的 loss,计算 3D box 需要 rotation_y,dimension 和 location 三个变量,disentangling 则是用一个预测值 + 两个 groundtruth 值来计算,从而得到三个 3D box,在进行 L1 loss 计算。ba9f34576d6b2f7a42b47b0eb74c4037.png所以总的 loss 就是 分类 loss 和 3 个不同的 L1 回归 loss80b99a8338f3703f4b59e4a8d6eb3d0d.png

结论:

SMOKE 的backbone 使用了 DLA,而且依赖 Dcnv,所以模型比较大,对落地部署不是很友好。而且是依赖镜头的内参的,不清楚多种数据训和训练效果如何。3D框的回归比较稳定,但存在漏检,尤其是小目标和只出现一部分的目标。如果能参考主流 2D 检测的多层检测,和优化关键点分支的策略,也许能缓解这些问题。


16883e75cf2e28f61bdff0ca80943ca2.png

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;

86f2b5170d0f8f761aed0544a9e9b175.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

自动驾驶之心【知识星球】

想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!

38052b015d3c4da3e62c2fcea1428ec2.jpeg

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值