参考代码:bev_baseline
project page:A Simple Baseline for BEV Perception Without LiDAR

1. 概述

介绍:在这篇文章中提出了一种特别简单但效果不错的bev特征提取方法,也就是通过在构建的bev grid中向图像特征进行反向投影,并在投影点处对图像特征进行双线性插值采样得到图像模态下的bev特征。同时对于lidar和radar这些其它模态的传感器信息输入(若有),直接在编码之后与之前bev特征进行concat操作融合,以此来构建多模态bev特征。除开使用该方式进行bev特征构建之外,文章还仔细分析了在网络训练中batchsize、image augmentation、image resolution等超参数给网络性能带来的影响,并对这些变量做了对应消融实验,可为后续模型训练引入参考。此外,之前radar的结果在bev特征构建过程中是不那么重要的,相比lidar确实差挺多的,但是有好歹聊胜于无。在文章的实验结果中也证实了这些数据都是对bev感知效果提升是有用的。另外,文章的backbone为ResNet-101。

首先对bev特征构建的过程进行回顾,这里作者分析了几种bev构建的方案:

  • 1)对网络提取金字塔特征(也就是不同cnn网络不同stage输出特征)通过网络映射实现在不同深度范围上bev特征映射,其方法也就是左上角的图,实现可以参考:pyramid.py;
  • 2)将深度信息隐式编码到网络特征图中构建视锥,从而得到bev特征图,以LSS方法为代表,见右上角图;
  • 3)将bev特征构建任务转换为width-wise的投影任务,见左下角图;
  • 4)首先构建bev grid,并以此作为transformer的queris,从而通过attention的方式得到最后bev特征;

2. 方法设计

2.1 pipeline

文章的方法如下:

输入的是多模态传感器,这些传感器的信息经过编码之后会统一准还到bev特征下,之后这些特征使用concat进行融合,从而得到完整bev特征。在此基础上对bev解码器进行优化,这里在进行bev特征优化之前会对bev特征在Y维度上进行压缩投影,从而将一个4D特征变换为3D特征,方便后续CNN网络运算。那么对于特征优化过程使用一个resnet-18网络构建一个U型结构去refine bev特征,之后通过不同的预测头实现bev预测。

对于构建bev特征的过程文章使用的是投影之后双线性采样的形式,也就是如下图中所示:

2.2 bev投影过程

这部分的核心是较为独立的空间坐标变换操作:

# utils/vox.py#291
def unproject_image_to_mem(self, rgb_camB, pixB_T_camA, camB_T_camA, Z, Y, X, assert_cube=False):# rgb_camB is B x C x H x W camera特征# pixB_T_camA is B x 4 x 4 到相机坐标到图像坐标——内参# pixB_T_camA is B x 4 x 4 世界坐标到相机坐标转换——平移和旋转矩阵# rgb lives in B pixel coords# we want everything in A memory coords# this puts each C-dim pixel in the rgb_camB# along a ray in the voxelgridB, C, H, W = list(rgb_camB.shape)xyz_memA = utils.basic.gridcloud3d(B, Z, Y, X, norm=False, device=pixB_T_camA.device)  # 构建3D空间网格[B,N,3]xyz_camA = self.Mem2Ref(xyz_memA, Z, Y, X, assert_cube=assert_cube)  # 将3D空间点映射到图像对应相机坐标维度xyz_camB = utils.geom.apply_4x4(camB_T_camA, xyz_camA)z = xyz_camB[:,:,2]xyz_pixB = utils.geom.apply_4x4(pixB_T_camA, xyz_camA)  # 相机坐标3D空间点到图像特征的映射normalizer = torch.unsqueeze(xyz_pixB[:,:,2], 2)EPS=1e-6# z = xyz_pixB[:,:,2]xy_pixB = xyz_pixB[:,:,:2]/torch.clamp(normalizer, min=EPS)  # 除以深度信息得到XY平面坐标# this is B x N x 2# this is the (floating point) pixel coordinate of each voxelx, y = xy_pixB[:,:,0], xy_pixB[:,:,1]# these are B x Nx_valid = (x>-0.5).bool() & (x<float(W-0.5)).bool()  # 计算投影之后XY平面坐标的有效性y_valid = (y>-0.5).bool() & (y<float(H-0.5)).bool()z_valid = (z>0.0).bool()valid_mem = (x_valid & y_valid & z_valid).reshape(B, 1, Z, Y, X).float()if (0):# handwritten versionvalues = torch.zeros([B, C, Z*Y*X], dtype=torch.float32)for b in list(range(B)):values[b] = utils.samp.bilinear_sample_single(rgb_camB[b], x_pixB[b], y_pixB[b])else:  # 实现在图像特征上双线性插值采样# native pytorch versiony_pixB, x_pixB = utils.basic.normalize_grid2d(y, x, H, W)# since we want a 3d output, we need 5d tensorsz_pixB = torch.zeros_like(x)xyz_pixB = torch.stack([x_pixB, y_pixB, z_pixB], axis=2)rgb_camB = rgb_camB.unsqueeze(2)xyz_pixB = torch.reshape(xyz_pixB, [B, Z, Y, X, 3])values = F.grid_sample(rgb_camB, xyz_pixB, align_corners=False)values = torch.reshape(values, (B, C, Z, Y, X))  # raw 4D的bev特征values = values * valid_memreturn values

2.3 影响性能的一些方面

2.3.1 数据增广

对于数据增广操作,文章对图片颜色、对比度、模糊这些增广操作进行实验,发现其并不像分类任务中那么有效,甚至会带来负面影响。

2.3.2 输入图像分辨率


对于分辨率并不是呈现单调线型变化关系,文章给出的解释是ResNet-101是在COCO上做过object detection预训练的,其适应了该数据集下的目标尺寸,因而对bev任务在分辨率上存在一定的先验性。

2.3.3 batchsize


从上表中看出batchsize和性能之间存在着单调正向关联,这篇文章的代码中也通过了梯度累加的形式增大batch。

# train_nuscenes.py#L405
for internal_step in range(grad_acc):...

2.3.4 reference camera和camera nums对性能的影响


从上表证实reference camera变换会带来涨点,使用全量camera也能带来涨点。

2.3.5 radar超参数带来的影响

3. 实验结果

vehicle segmentation on nuScenes:

时序与传感器数据类型对性能的影响:

《A Simple Baseline for BEV Perception Without LiDAR》论文笔记相关推荐

  1. 论文笔记之Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 论文链接:http://dwz.cn/6qPeIb 本文的主要思想是为了剖析出一个跟踪算法中到 ...

  2. 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    本人为目标追踪初入小白,在博客下第一次记录一下自己的论文笔记,如有差错,恳请批评指正!! 论文相关信息:<Understanding and Diagnosing Visual Tracking ...

  3. 论文笔记Understanding and Diagnosing Visual Tracking Systems

    最近在看目标跟踪方面的论文,看到王乃岩博士发的一篇分析跟踪系统的文章,将目标跟踪系统拆分为多个独立的部分进行分析,比较各个部分的效果.本文主要对该论文的重点的一个大致翻译,刚入门,水平有限,如有理解错 ...

  4. 目标跟踪笔记Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 原文链接:https://blog.csdn.net/u010515206/article/d ...

  5. 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)

    追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems) PROJECT http://winsty.net/tracker_di ...

  6. ICCV 2015 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    目录 写在前面 文章大意 一些benchmark 实验 实验设置 基本模型 数据集 实验1 Featrue Extractor 实验2 Observation Model 实验3 Motion Mod ...

  7. Understanding and Diagnosing Visual Tracking Systems

    文章把一个跟踪器分为几个模块,分别为motion model, feature extractor, observation model, model updater, and ensemble po ...

  8. CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做SANet.作者在论文中提到,CNN模型主要适用于类间判别,对于相似物体的判别能力不强.作者提出使用RNN对目标物体的self-structure进行建模,用于提 ...

  9. ICCV 2017 UCT:《UCT: Learning Unified Convolutional Networks forReal-time Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做UCT.就像论文题目一样,作者提出了一个基于卷积神经网络的end2end的tracking模型.模型的整体结构如下图所示(图中实线代表online trackin ...

  10. CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文提出的模型叫做STRCF. 在DCF中存在边界效应,SRDCF在DCF的基础上中通过加入spatial惩罚项解决了边界效应,但是SRDCF在tracking的过程中要使用 ...

最新文章

  1. 替代方法_ASD干预:替代行为的正确使用方法和注意事项
  2. C++ 贪吃蛇 小游戏
  3. 修改Yarn的全局安装和缓存位置
  4. java_函数的概述
  5. MySQL驱动jar包的下载--保姆教程
  6. taskctl跨调度服务依赖实现
  7. cass坡度土方计算案例_南方cass几种土石方计算方法分析.doc
  8. python读pdf文件字体大小_如何使用python中的pyPDF2更改pdf文件中的字体
  9. 【软件测试】BUG的管理
  10. 1024X600RGB屏幕规格书分析
  11. 偿还技术债 - 通过重构拯救老代码
  12. java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽
  13. SSM+流浪动物救助系统 毕业设计-附源码191631
  14. 如何搭建一个自己图床网站
  15. 【传感器大赏】3轴磁场传感器
  16. App Inventor 微数据库记录分数并排序
  17. E2UART编程(β板实操)task1传输helloworld
  18. WorldView卫星家族简介
  19. linux怎么生成图形,如何在Ubuntu 16.04中创建GIF动态图片
  20. Java基础知识点面试题,安卓程序员必备hook技术之进阶篇

热门文章

  1. 拓嘉启远:拼多多开店不交保证金,店铺能做好吗
  2. c语言double类型数据四舍五入
  3. 限时开放 | 欢迎加入「奇妙的 Linux 世界」技术交流微信群
  4. 如果服务器开机显示NObootable,电脑重装开机提示No bootable device的解决办法
  5. 怪物猎人世界取得服务器信息,怪物猎人世界联机服务器选择工具
  6. Lucene 7.5.0 索引文件之timtip
  7. 鲁大师智能化评测新项目——鲁大师真续航测试1.0正式发布
  8. 推荐4款电脑必备高质量软件,各有千秋,总有一款能惊艳到你
  9. python账号怎么注销_利用python批量登录QQ,防止账号被注销。
  10. 解决报错{ error_code: 18, error_msg: ‘Open api qps request limit reached‘ }