参考文献:VDO-SLAM(动物判别与跟踪)、*DynaSLAM(深度学习+多视图几何分割)、*CoFusion(语义+运动分割)、Meaningful Maps With Object-Oriented Semantic Mapping(深度图上的非监督分割方法)、*Improving RGB-D SLAM in dynamic environments: A motion removal approach(基于几何的运动分割方法)、* DOT: Dynamic Object Tracking for Visual SLAM(先分割再由几何关系计算物体的实际运动)、DSP-SLAM(基于已重建对象的数据关联)、CubeSLAM(数据关联)、DymSLAM(运动分割)
GitHub - BertaBescos/DynaSLAM: DynaSLAM is a SLAM system robust in dynamic environments for monocular, stereo and RGB-D setups
关键词:RGB-D/stere、基于ORB-SLAM2 、稀疏特征点跟踪、稠密建图、实例+几何分割、主攻静态场景重建、无多目标跟踪优化
GitHub - martinruenz/co-fusion: Co-Fusion: Real-time Segmentation, Tracking and Fusion of Multiple Objects
关键词:RGB-D/stere、稠密光流跟踪、稠密建图、实例+运动分割、主攻多目标重建、可多目标跟踪但无联合优化
1.Surfel重建(面元重建):用面元进行表面重建。一个面元包含元素有:位置、法线、颜色、半径、初始化时间戳、最新更新时间戳(更新次数)。点的融合更新:点的位置信息,法向量和颜色信息的更新方法类似于KinectFusion 采用加权融合的方式,可以参考StaticFusion中的方法,体素面(面元)的半径通过场景表面离相机光心的距离求得,距离越大,面片的半径越大。
2.模型跟踪:本文模型分为两类:激活模型和未激活模型。此部分是对每个激活模型进行六自由度位姿跟踪。(文中说模型跟踪是第一步,那获取的新帧怎么知道哪个是激活模型,模型又对应当前帧哪部分呢?应该是ICP+直接法可以不用知道匹配部分,只要移动较慢初值准确就直接能跟踪位姿。)
3.运动分割:由上一部分得到所有激活模型的Mt个位姿变换集合{Tmt}。运动分割的任务就是一个标记问题:将当前帧的所有点赋予Mt中一个运动标签或外点标签。为了减小计算量,首先将当前帧划分为SLIC超像素,然后再对超像素进行标记算法。这个标记问题用全连接CRF算法解决:最小化以下代价函数
4.这种先跟踪再分割的方法应该满足:动态物体占比远小于背景。因为如果动态物体过大,在物体由静转动的时候,背景模型的跟踪误差可能较大,影响分割。
5.参考:稀疏点分割也可参照此分割方法。但是会有缺点:同一背景下有两个重叠但运动方向不同的物体,一开始分割为同一个物体,由于特征点跟踪不像ICP会倾向于变化慢的物体,而会取最小二乘解,这会导致帧间跟踪结果离两个物体真实位姿变换都很大,导致模型分割不开。
http://visual.cs.ucl.ac.uk/pubs/maskfusion/
关键词:RGB-D/stere、稠密光流跟踪、稠密建图、实例+几何分割、主攻分割和多目标重建、可多目标跟踪但无联合优化
1.MaskFusion 前边跟踪与Co-Fusion相同,重点是分割方法不同:Co是运动分割(依赖于模型的运动)且让语义分割作为补充;Mask是几何分割(单帧几何分割)与语义分割融合作为分割结果
2.跟踪前的动静判断:对各模型Mm依次判断动还是静,为减少计算量只对动物跟踪。动静判断原则:运动不一致性和手拿性。运动不一致性:应该是先通过背景模型与当前帧计算相机运动,然后将各模型按照相机运动变换到当前帧,然后计算各模型的ICP误差,此误差大于阈值确定为动物。
3.RGBD图像上的几何分割:基于物体表面凸性和深度连续性假设。故在凹区和深度不连续区域进行分割(此方法会过分割)。常用于激光雷达数据的分割。本文定义深度不连续项φd和凹项 φc,对于一个像素点φd + λ φc > τ时就确定为边缘点。
其中vi和ni是v邻域节点位置和法向量,N为邻域大小。由此确定了边缘,再通过封装好的连通域算法由边缘进行区域标记。
4.分割融合:每帧都要进行几何分割,语义分割是偶尔的。当当前帧的语义分割可用时,将几何分割得到的标签映射到语义分割的掩码上,再将新的掩码映射到模型;当无可用语义分割结果就直接将几何标签映射到模型:
5.这种分割缺点:虽然可以将语义分割与几何分割结合得到更精确的分割,但是本质上还是语义分割来识别目标,几何分割只在语义分割结果或现有模型基础上进行精修,对于未知运动目标无法分割。所以它处理动态场景还是只依靠语义分割的感知能力。如果背景中出现未知移动物体,则无法跟踪识别,还是属于背景模型中的部分。
技术疑问:新的模型如何加入、sufel模型的更新,尤其结构增加或减少后如何更新?
Meaningful Maps With Object-Oriented Semantic Mapping:ORB-SLAM2+稠密建图
3.数据关联:将当前帧实例分割得到的结果关联到地图中已存在的目标模型或新建模型有以下方法:首先根据点云中心的欧式距离选择候选目标点云;然后再在两组点云间利用最近邻搜索,找到两两对应点对,计算点对距离(类似ICP误差)。如果百分之五十的点对距离小于阈值则进行关联。否则无法关联,故新建模型。(这一方法是要在得到相机位姿的情况下进行,因为要将俩个组点云转换到同一坐标系)
4.对象map独立维护:对象模型更新的核心是更新置信度(通过新的目标检测的置信度来累计更新);map由两部分组成:所有观测到的点云(保存的是每一关键帧观测到的点云),每个对象对应的所有分割点云(保存着指向pose graph的指针)。这种保存方式可以在位姿更新时更新map。
5.缺点:此方法类似于《动态场景下的视觉定位与语义建图技术研究_郑冰清》的3D分割方法,也是要提取拟合场景平面。
1.关于动态物体对SLAM的影响:(主要体现在SLAM的位姿图优化过程中)
2.运动分割方法:单应矩阵计算相机运动、运动补偿后的差分图计算、由粒子滤波来加强运动检测结果、根据深度图进行前景分割(对深度图聚类)。
3.缺点:这里的单应矩阵适合于平面场景,针对普通场景不适合。
1.算法流程:分割得到掩码→按照目标掩码跟踪→直接法+匀速模型→得到Tc和To→由Tc(假设静态)将前一帧点投影当前帧→由Tc+To(实际运动)将前一帧点投影到当前帧→计算两种投影后的差值(动态视差),并得到其均值→由目标位姿估计的不确定度计算目标物的微分熵→由微分熵确定物体动静判断阈值→动态视差大于对应的阈值则视为动态→将分割掩码更新,只激活动态掩码→将掩码结果传入SLAM以避免动物影响
2.运动判断:文章首先根据分割结果计算了相机运动Tc和目标运动To(稠密直接法),简单的可以通过To大于阈值来判断目标动静。但是由于图像噪声对To的影响不同,不好设一个绝对阈值。本文选择在2D图像上进行判断:将目标的前一帧分别通过Tc和Tc+To投影到当前帧:
计算两者投影后对应点的差值(动态视差)。由于图像对运动的敏感度取决于:像素坐标、深度值、相机运动与目标运动方向夹角。所以,视差判断阈值与微分熵正相关(微分熵由运动估计的不确定度决定),通俗来讲:越远的物体,图片上一个像素的移动代表的实际运动就越大;反之,相同的实际运动越远的物体图像上的视差越小,判断其动静的阈值就应该越小。但是微分熵不能太小,太小的话目标的运动就不可观了。最后,通过目标上动态视差的均值大于目标阈值来判断动静。
3.掩码传播:通过将同一目标相邻几帧的点投影到当前帧来传播掩码(类似于上述的实际运动投影方法),省去了语义数据关联。到关键帧时才通过网络提取,这样可以提高分割频率。
4.参考:ICP/直接法等方法不需要匹配,可先跟踪再用跟踪的结果投影前一帧点/地图点来找到当前帧上的对应点。可以参考掩码传播。
GitHub - halajun/VDO_SLAM: VDO-SLAM: A Visual Dynamic Object-aware SLAM System
关键词:RGB-D/stere、稀疏+稠密光流跟踪、稀疏静态地图+稠密目标建图、实例分割、主攻多目标跟踪、可多目标跟踪+联合优化
1.数据关联:对输入的每一帧都要进行
(1)像素级实例分割,ORB特征点提取。假设分割之后属于先验动态实例的特征点是动态特征,不考虑这些先验是否真的在动。
(2)静态特征-地图静态点关联:首先将静态特征与之前帧和地图中的特征相关联,以初步估计相机姿势,就跟ORB-SLAM中一样。
(3)相邻帧间的实例-实例关联:以2Dbounding box的IOU作为代价的Munkres算法实现。
(4)动态特征-局部地图动态点关联:动态特征与局部地图中的动态点匹配关联,通过两种方法:地图中目标速度已知,就用匀速假设投影地图动态目标上的动态点到当前帧来寻找匹配,如果匹配点对不满足上边的实例匹配,则设为外点;如果目标速度未知,或上一方式匹配点不够,就在相邻帧中重叠最多的实例上暴力匹配。
(5)实例-目标关联:一个新的实例上的大多数特征点都能与地图中属于同一目标的点匹配关联上,就将此目标ID赋予这个实例。
(6)新目标创建:如果一个先验类别是动态的实例,其上有至少七个未曾被观测到的关键点,且这些点距离相机较近,则此实例就创建为新的目标,这些关键点与新目标绑定。
2.对象建模方式(跟踪参考坐标系设定):
3.解耦的3D bounding box估计:目标的跟踪是用上述(1)的目标跟踪参考坐标系,这样可以对动态物体一开始就能跟踪上;但是要想对目标的尺寸和空间占有率进行感知就必须解耦估计3Dbounding box。所以,在(1)完成后,对目标点云估计3D bounding box(初始化:找到两个能够拟合大多数特征点的相互垂直的面来初始化3D bounding box),然后在窗口内优化3Dbounding box的尺寸和相对于跟踪参考坐标系的位姿(优化原理:最小化3D bounding box的图像投影与2D bounding box的距离)。
4.参考:动态特征点的匹配方法;针对目标的运动建模;联合BA优化和3Dbounding box的解耦估计与优化。
https://github.com/shichaoy/cube_slam
关键词:单目、基于ORB-SLAM2、稀疏特征+光流跟踪+目标跟踪、稀疏建图+目标3D bounding box、目标检测无分割、主攻单目目标3Dbounding box估计+对象级slam、可多目标跟踪且联合优化
1.对象建模:对于静态目标上的点表示在世界坐标系下;对于动态目标上的点表示在目标坐标系下(因为此时的点是与目标绑定的,在目标坐标系下点的坐标不变)
2.数据关联:
3.参考:对象的建模方法,目标级SLAM的因子图设计,动态SLAM因子图设计。
1.流程:目标检测→多层次概率关联(对于动态目标)→特征点与landmark关联、当前帧object与已存在clusters关联→利用异构CRF方法对当前帧生成的新的landmarks聚类标记→匈牙利算法匹配聚类与实例关联结果→新的运动聚类结果形成并更新每个landmark标记权重→双跟踪框架进行状态估计
2.参考:
1、介绍:此方法是离线批量方法,需要输入一批图片,通过判断整批图片上不同特征点间运动距离一致性来分割运动。首先构建运动距离一致性矩阵,作为之后的聚类标准。运动距离一致性矩阵是整批图片上所有特征点两两之间的距离一致性表征,运动距离一致性矩阵构建步骤有:
(1)距离计算。由两部分组成:一是3D几何距离的平均值,用来描述一对点在3D空间的距离一致性;一是一对点在图像空间的距离的最大值,用来描述视觉先验。
(2)元素剔除。由于观测不足会影响观测精度,所以将观测次数少于阈值的点剔除,此时运动距离矩阵就是一个稀疏矩阵。
聚类运用HAC(层次聚合聚类方法);通过多块一致聚类方法将帧分块单独进行HAC然后进行一致聚类,以加速HAC的进行。
在聚类将所有场景中出现的物体分类成功后进行考虑噪声的聚类形状估计:
然后进行解耦的因子图优化:先解q!=0,将(Pct)'Pqt看成一个变量Tqc;再解q=0得到相机运动Pct;结合Tqc和Pct得到目标运动Pqt。以下是能量函数构建
2、特点:利用运动中同一物体上的特征点间距不变原理,构建整个批次上的运动距离一致性矩阵来表示两两特征点在运动中的运动距离一致性。
3、参考:利用运动一致性检测原理实现运动聚类。
1.原理:在多模型拟合中用permutation preference(排序偏好)表示点,迭代的交替进行模型采样与基于permutation preference的点聚类。单模型拟合方法用RANSAC,用来剔除外点和噪声。但运动分割是多空间问题,本文采用多模型拟合方法[41]-[43]。
2.疑问:
1.几何一致性的静态区域提取:
1.三角剖分表示3D点云:有拓扑分解法、节点连接法、基于栅格法、Delaunay三角剖分(德劳内法),其中Delaunay三角剖分非常常用。
(1)Delaunay三角剖分原理:
(2)2D空间的Delaunay三角剖分:常用算法有,翻边算法、逐点插入算法、分割合并法、Bowyer-Waston算法;用的最多的是逐点插入法(找一个超级三角形将所有点包起来,从任一点开始连接到外层三角形三个顶点,形成新的三个三角形,每个三角形做外接圆,如果外接圆内有点就连接点到这个三角形的三个顶点,如此迭代插入)。
(3)3D空间的Delaunay三角剖分:分割归并法(快但占内存)、逐点插入法(慢但不占内存)、三角网生长法。前两种合并形成合成算法。
合成算法步骤:
2.目标分割
(1)基于深度图的阈值分割:根据背景与前景的深度值差异进行分割,一般有三种方法:
(2)基于点云的平面检测:通过RANSAC算法将点云拟合至最佳平面
3.几何形状识别
对于3D物体,可以通过点云旋转变换使得待测物体表面平行于XY平面进行投影,这样就将3D曲面形状检测转化为2D平面形状检测。因此需要设计区分不同目标物体的描述子来表征目标物,传统目标识别一般用人工设计特征:SIFT、3D点云自旋转图像、几何特征等。
(1)几何不变矩:通过轮廓特征区分不同类物体,用几何不变矩定量表示轮廓特征。又称Hu矩,描述3D物体轮廓的特征向量,适用于深度图平面形状识别。在深度图上(x,y)为随机变量,深度值f(x,y)为密度函数,根据阶数不同组成各阶不变矩:零阶中心矩表征目标区域面积;一阶中心矩表征目标区域质心坐标;二阶中心矩表征目标区域旋转半径;三阶中心矩表征目标区域方位和斜度,反映目标扭曲程度。各阶中心矩通过零阶中心矩进行尺度归一化,最终利用二阶和三阶归一化中心矩构造7个不变矩组表征几何形状,具有平移、旋转和尺度不变性。提取几何不变矩特征后,训练SVM分类器,识别3D物体形状。
(2)3D关键点检测:
投影到深度图,进行2D图像上的关键点检测。
(3)其他3D特征: