目前的SLAM系统存在两个待完善的地方:
contribution:
系统使用mask rcnn识别物体,得到的检测结果,与几何分割得到的结果匹配,最终使用匹配的几何分割的区域,更新model。
不太懂的地方是:
对于场景中的静态和动态物体采用不同的方法。
存储表示这个物体的surfel的set,估计其六自由度的位姿。位姿的估计是通过ICP最小化光度误差,光度误差是根据上一帧位姿,得到的当前帧像素点于地图点匹配对计算出来的。(那么,像素点和地图点怎么计算photometric cost based on brightness constancy?)
和背景一样,一起看作一个整体跟踪。
两种方法:
语义分割结合了深度网络和几何方法两种。系统实时运行几何边缘分割,仅匹配当前地图中已存在的model,并优化它们。同时间隔一定帧数运行Mask RCNN。这样几何提取边缘的方法,就能逐渐优化Mask RCNN的实例分割结果。
使用Mask RCNN提供目标检测结果和粗略的实例分割边界。但Mask RCNN不能实时运行,且语义边界粗糙(leak into background)。
通过深度不连续性和表面法向量,得到精准的语义边界。可以实时运行,但会over segment
每一个物体几何结构的融合,采用的方法于elastic fusion相同,是基于其类别标签,把同类的surfel关联到正确的模型上。
地图存储了一系列的instance model,包括N个instance和1一个背景:
M m ∀ m ∈ { 0 , . . . , N } M_m \forall m \in \{0,...,N\} Mm∀m∈{0,...,N}
模型的存储方式是:
每一个instance的模型都存储了:
对于每一个surfel M m s M_m^{s} Mms,存储了:
此外,对于每隔时刻的instance(time instance),还存储了:
(这个时刻instance,难道是指每一帧吗)
假设前一帧的估计是准确的,对于第t帧中,模型m的位姿估计,是通过当前帧和上一帧,其通过模型m关联的像素点,在深度图和强度图中的误差最小化而来的。其中,强度图是由彩色图转化而来的单通道图。
整体估计方法是通过高斯牛顿法优化非线性最小二乘问题,优化变量是t时刻的六自由度位姿。
误差项由几何误差和光度误差共同构成:
E m = m i n e m ( E m i c p + λ E m r g b ) E_m=min_{e_m}(E_m^{icp}+\lambda E_{m}^{rgb}) Em=minem(Emicp+λEmrgb)
E m i c p E_m^{icp} Emicp是几何误差项,为对应点的ICP误差。 E m r g b E_{m}^{rgb} Emrgb是光度误差项,为对应点的强度误差平方和。
简单介绍了一下估计出位姿后,怎么根据当前帧完善模型,给模型添加新surfel的方法。没有细讲,只强调了一下每一个新建的surfel都仅属于一个已存在的model。此外,针对分割结果有缺陷的事实,引入了surfel的置信度惩罚机制。
使用Mask RCNN+几何方法共同进行语义分割。Mask RCNN是一个于tracking和fusion并行的线程。系统设置了一个缓冲队列,存放固定数量的帧,tracking从队头取帧,Mask RCNN处理队尾的帧。
由于Mask RCNN无法实时运行,因此只处理间隔数量的帧。在融合的时候,如果Mask RCNN检测到了新物体,则加入场景。如果这一帧Mask RCNN没处理,就只匹配地图中已存在的模型,并用这一帧去优化匹配到的模型。
介绍了一下Mask RCNN
假设:场景中的物体边缘总是凹的,且深度(与背景?)不连续。基于这个假设,根据邻域内顶点和法线,计算两个得分项。如果它们的加权和大于一定的阈值,则认为这个像素是边。
得到抽取边的map后,再将其转为不同的几何结构(类似于取连通区域?)。
但是,这个方法会过分割(太碎)。
分割部分,几何方法逐帧运行,包括以下流程:
当进行Mask RCNN时,这一帧中,Mask RCNN和几何方法都运行,包括以下流程:
在这样的帧中:
对每个components计算它和mask相交的面积,大于一定阈值视为匹配。一个mask可以与多个component匹配,但一个component只能匹配一个mask。
如果匹配上了,则用对应的component区域代替原mask。
将地图中的model根据估计的位姿投影到当前帧,这里默认位姿估计准确。然后也是用相交面积判断,这个更新后的component,是否与model匹配,同时要确认类别标签是否一致。
剩下的那些没有和模型匹配上的component,直接匹配到地图中。(是对于新物体吗?)