导读:无人驾驶近几年在人们的视野中出现地越来越频繁,并且随着计算机科学、智能控制技术的发展,研究者和企业对无人驾驶的探索更加深刻。特斯拉、Waymo、蔚来、百度,国内外企业大笔投入资金,推动了自动驾驶的发展进程。
获取全部公开课链接及入群,
讲师:胡庆拥 牛津大学计算机系在读博士,国防科技大学硕士,研究方向为3D视觉、机器人、机器学习。
讲师:李瑞辉 香港中文大学计算机系在读博士,主要研究方向为三维点云处理,三维重建等。
讲师:赵季 华中科技大学博士, CMU 博士后,曾在自动驾驶公司担任定位方向的技术负责人。研究兴趣包括3D视觉、多传感器融合、 SLAM 等。在 PAMI 、1JCV、 CVPR 、 ICcV 、 ECCV 、 ICRA 、 IROs 等发表多篇论文。在定位、建图、标定方面有丰富的项目经验。
讲师:王龙光 国防科技大学博士生,研究方向为深度学习与低层视觉,专注于图像超分辨与图像复原,在 TPAMl / TIP / CVPR / ECCV 等知名期刊及会议上发表多篇论文。
获取全部公开课链接及入群,
讲师:高翔 慕尼黑工业大学博士后、清华大学自动化系博士
准确可靠的定位与建图是大多数移动机器人以及无人车系统的关键组成部分。激光雷达传感器凭借其高精度以及对光照变化十分鲁棒等优点,目前被广泛应用于SLAM问题中。
视觉SLAM领域中特征点法的代表作,也是首个同时适用于单目、双目和RGB-D相机的开源SLAM方案。代码主要分为三个线程:前端实时定位跟踪、后端优化建图与回环检测。整套代码几乎涉及到了视觉SLAM系统的方方面面:从单目系统初始化、特征提取匹配,到LocalBA、GlobalBA的优化设计,到关键帧的选取、地图的复用,以及诸多巧妙设计的工程技巧等等。代码结构较为清晰,称得上是最适合新手学习的第一套VSLAM代码。
近十几年来,作为一种概率图模型,因子图在机器人领域(特别是SLAM问题)中得到广泛的应用。在大规模SLAM问题上,因子图与传统卡尔曼滤波相比,具有速度快、精度高等优点。
在本次讲座中,我们将初步了解因子图模型以及因子图在机器人学中的应用。
(2). 《视觉导航:从状态估计到运动规划》
(3). 《视觉状态估计及其在无人系统中的应用》
(4). 《视觉导航:从状态估计到运动规划》
获取全部公开课链接及入群,
本次公开课由李伏欣老师主讲,李伏欣老师是美国俄勒冈州立大学助力教授,公开课主要介绍了涵盖3D点云领域的研究,并重点介绍了李老师近期的最新工作内容。
本次分享首先介绍了最近几年的两篇经典论文中3D点云识别的工作,详细介绍PointNet++与PointNet;接着由传统CNN入手,逐渐引入PointConv;最后将结合PointConv介绍了李老师团队最近的工作内容。
课程开始,李伏欣老师介绍了点云CNN的一些背景。
点云上做CNN的工作和点云上其他操作有些不同,点云CNN更偏重于识别的任务,目前市面上已经有了很多深度传感器,可以直接获得周围物体的深度数据,例如Velodyne LiDAR等,随着深 度传感器的普及,日后深度传感器在我们日常生活中将会变得更加普遍。我们都知道深度学习在2D图像识别中有了飞跃性的发展,研究点云CNN的目的就是使深度学习在点云上的应用更加广泛。
常见的三维表示形式有很多种,常见的表示形式为点云、Mesh、Volumetric和RGBD等,Mesh可以更好地表示物体表面信息,Volumetric是将三维空间转换成网格的表示形式,RGBD则在传统RGB图相中增加了一个深度维度的信息,但只能看到一个视角的信息。而为什么我们要研究点云的CNN呢?因为不管是LiDAR、结构光还是TOF等深度传感器,都是直接获得的点云信息,而其他的三维表示都是由点云生成的。
同时我们还可以把RGB的信息贴到点云数据中去,这样在空间表示中不仅仅有物体的三维信息,还有物体的颜色信息。常见的点云往往都是稀疏的,而在土木工程领域中会应用到一种强大的扫描仪,获得数量庞大的点云数据用于还原物体信息,可以表示详细的空间信息。
点云CNN为什么难做?从2D图像中出发,例如,可以用image(i-1,j-1)表示像素image(i,j)的邻域信息来表示图像中具体的位置信息,但是不能保证在点云中相同的相对位置处存在点云数据。于是可以把这个问题转成volumetric convolution来进行点云的CNN,那么有的Voxel有特征点,有的Voxel并没有特征点,有点的Voxel可以找到该点的邻域进行计算。将这种方法应用到点云中,近些年研究学者发现利用矩阵稀疏性可以起到提高计算速度的作用,精度和速度近些年已经取得了相当不错的结果。
提到点云深度学习就一定离不开PointNet和PointNet++两篇经典的点云神经网络处理方法。PointNet中常用的有两种操作:1x1 convolution 和Max-pooling,然而只有这两种操作实际上对3D识别来讲是远远不够的。PointNet提取特征的方式是对所有点云数据提取了一个全局的特征,显然,这和目前流行的CNN逐层提取局部特征的方式不一样。
受到CNN的启发,紧接着同一批作者发表了PointNet++,就更接近了传统的CNN,相较于PointNet,它能够在不同尺度提取局部特征,通过多层网络结构得到深层特征。
首先,在网络处理时对输入点的数据点进行采样,采样后的结果中每一个点所构成其局部的点进行组合,方便后面连接PointNet的局部特征提取,由于Max-pooling的影响,每组特征点最后只输出一个点。
对提取的特征点再根据每个点所构成的局部点进行组合,得到的结果进行sampling连接PointNet。由Sampling、Grouping和PointNet三层组成了类似卷积层的结构,可以应用这种结构进行分类和分割。
PointNet++作者使用的采样算法是farthest point sampling(最远点采样),相对于随机采样,这种采样算法能够更好地覆盖整个采样空间,包括点云数据特征信息和边角信息,这些都是随机采样所无法具备的。
虽然PointNet已经足够优秀,但是PointNet缺少邻域信息,与传统意义上通过周围邻域得到卷积结果十分不同,这也很难直接应用于后面的点云CNN中。
例如这里有一个最简单的边缘检测的任务,在边缘处两边的颜色不同,为了检测出边缘,我们至少需要考虑两个点的颜色信息才能判断出是否存在边缘。而PointNet除了Max Pooling以外,剩下的所有操作都只对单点进行,很难直接应用到Corner Detection等任务中去,因此我们迫切需要真正意义上的点云CNN。
为了引入点云CNN,首先我们来回顾一下传统的CNN。对于2D图片来说,某个位置的输出,不仅与该位置的输入有关,还与此位置周边位置的输入有关,不同位置的输入,具有不同的权重。下图中X(i,j,k)可以看做图像的原始像素,W为卷积核,G为邻域。卷积是一个加权求和的操作,由于位置坐标的像素值是固定值,卷积核上所有作用点以此作用于原始图像像素,并通过线性叠加把所有的作用结果累加,即是图像卷积的输出。
可以通过连续域考虑,此时W就不是权重矩阵而是一个函数,那么由于点云位置是随机的,不同位置的权重应该不同,这样可以把权重函数W抽象成为一个关于三维坐标的函数。由于所有操作都可微,通过深度学习不断学习,由Δi, Δj, Δk作为输入的权重值作为函数的输出结果,这也是最初很重要的一种想法。下图中W和X为连续的函数,(i,j,k)为三维参考坐标,(Δi, Δj, Δk)为该点邻域的相对坐标,由于卷积本质上是一个加权求和的操纵。如果某些位置的采样点比较密集,而某些位置的采样点比较稀疏,最终的计算结果主要受到采样密集的位置的点的影响。考虑到点云是非均匀采样的传感器,为了补偿不均匀采样,需要用点云逆密度对学到的权重进行加权,该模块主要目的是处理点云采样不均的情况。这样我们可以把PointConv描述为:
PointConv的主要工作是在原有通过1层隐藏层替换权重函数W的基础上,在添加了一层隐藏层和KDE。这样网络的基本结构就可以描述为:通过寻找点云的K nearest neighbor获得K×3的坐标,做两层全连接网络,得到K×(Cin×Cout)的W,与复制Cout份的输入特征Fin运算,便可以得到1×Cout维的一个点的输出特征。完整的PointCov网络结构图如下所示:
李老师团队之前提交过一篇论文,但由于不知道之前已有团队做过相同的工作而被拒。在他们的工作中由于每个点都需要计算K×Cin×Cout维的权重值, PointConv 实现起来内存消耗大、效率低,很难形成大型的卷积网络结构。李老师发现通过更改了上图中蓝框里求和的顺序可以保证在结果不变的基础上,极大降低内存。假设MLP最后一层的输入为M,M与计算的逆密学习到的权重加权得到的结果Fin直接相乘,而把最后一层全连接层放到最后。看似只是简单的调整顺序,却可以省去复制Cout次的操作,也不用得到K×(Cin×Cout)很大的Tensor,有效的降低了参数的数据量,避免每次卷积都要产生巨大的权重值的问题。
实验结果证明原结构大概需要8G内存,优化过后大概只需要占用100M,极大的节省了内存占用率,为后面构建大规模网络奠定了基础,这样一个PointConv layer就可以完整的对应到一层普通卷积层,优化过后的网络结构为:
当然,我们还可以来定义PointDeconv,在之前的PointNet++中,Deconvolution主要是通过插值的方法来实现的。例如在下层有了一个k邻域,上层的点直接做插值来实现。而有了Pointconv以后可以在每次插值加入一层Pointconv,这样PointDeconv 由两部分组成:插值和 PointConv。首先,使用一个线性插值算法来得到精细层的特征的初始值,再在精细层上进行一个 PointConv 进行优化特征,从而获得较高精度的特征值。
有了PointConv和PointDeConv,便可以根据传统的卷积神经网络结构搭建一个U-Net网络,用于点云的分类任务。如下图所示,将所有的点先通过PointConv得到非常少的点,再通过一系列PointDeConv点数逐渐增多直至回到初始的点数,再对每个点进行1×1的卷积,便得到了点云的U-Net。
为了验证PointConv可以替代真正的卷积效果,李老师团队将CIFAR-10替换成了点云,在5层和19层的实验中发现,PointConv的准确度高于近期出现的PointCNN和SpiderCNN 的点云深度学习网络,接近甚至高于传统卷积神经网络框架。
同时李老师团队也在ModelNet、ShapeNet和ScanNet上与更多的点云深度学习网络结果进行对比,在ModelNet40和ShapeNet提高的精度不是很高,但是在真实的室内扫描数据集ScanNet却提高了很大的精度。
声明:本文为公开课分享的原创文章,如需转载,请联系育心,并标明文章转载出处。
深度学习与图像处理(一)主要讲的是数据加载问题,二主要是介绍模型的调用与训练问题。本篇将会以ResNet18为例进行说明与演示,开发环境同一中所述
深度学习模型主要是通过nn.Module这个继承类来实现的,所以一般需要依赖torch.nn这个包,具体过程如下所示: