这一篇是发表于ICRA2018的一篇文章,结合深度学习去解决SLAM中位置识别的问题,主要是针对长时间运行的、跨季节的、光照变化显著条件下运行的SLAM系统,由于传统描述子在这些条件下的表达或匹配不鲁棒而不能准确定位的问题。本文的一个核心idea就是利用图像语义分割后得到的描述子代替传统描述子,然后再建模去考虑2D点到3D点的映射关系。此外还需要注意的是,这个系统是在一个已有3D map的基础上结合语义分割特征一起进行的,换句话说,rely on pre-constructed maps.(不是没有环境先验的)。
目录
读Long-term Visual Localization using Semantically Segmented Images
Abstract
Introduction
Problem statement
观测量
地图,如何表示地图
MODELS
PROCESS MODEL
MEASUREMENT MODEL
SIFT map
Semantic map
Algorithm Details
SIFT FILTER
SEMANTIC FILTER
Experiment Evaluation
Setup:
MAP CREATION
GROUND TRUTH
Conclusion
附录知识点
还是那个顺序,我们首先来看摘要
Abstract— Robust cross-seasonal localization is one of the major challenges in long-term visual navigation of autonomous vehicles. In this paper, we exploit recent advances in semantic segmentation of images, i.e., where each pixel is assigned a label related to the type of object it represents, to attack the problem of long-term visual localization. We show that semantically labeled 3D point maps of the environment, together with semantically segmented images, can be efficiently used for vehicle localization without the need for detailed feature descriptors (SIFT, SURF, etc.). Thus, instead of depending on hand-crafted feature descriptors, we rely on the training of an image segmenter. The resulting map takes up much less storage space compared to a traditional descriptor based map. A particle filter based semantic localization solution is compared to one based on SIFT-features, and even with large seasonal variations over the year we perform on par with the larger and more descriptive SIFT-features, and are able to localize with an error below 1 m most of the time.
作者主要想解决一个什么问题呢,想解决在长时间的跨季节的系统运行下,位置识别能够保证一个鲁棒的结果。
作者的策略是不用传统的人工描述子,而是利用图像的语义。通过结合有标注语义的3D点的环境地图和语义分割之后的图像,利用粒子滤波进行语义定位以实现一个误差小于1m的长时间视觉定位功能。
首先讲为什么要在有预先建造的地图下进行自动驾驶(大多数目的在于日常活动,比如下班通勤的自动驾驶技术都依赖于一个pre-constructed地图)→而这之中最重要的是定位→定位需要信息,并且会创建landmarks来辅助理解信息:对于相机,landmark就是点特征,关联地图就利用这些点特征建立;定位时,寻找2D-3D的联系并且solvePnP求解位姿。→然后camera也有些问题啦:比如光下,季节天气变化下不鲁棒/光照强变化下没用,树这种没纹理的搞不定。!对光照变化非常敏感,就算描述子对环境鲁棒,但是匹配也会出现问题,由于探测器在定位期间不像在映射期间那样在相同点处触发。
所以!在充分不相似的场景下很难去依靠图像和地图的特征匹配完成建图和定位。
所以!问题可以归结于要找到一个环境描述,既可以用于定位,并且长时间不变,而且还紧凑。否则,你就只能一直更新地图。
好了 上作者方法。 作者主要是想证明语义的特征比传统的特征好
作者利用语义分割后的图片和语义点地图设计了一个定位算法。每一个点由它空间中的三维位置和语义类别来描述,不再使用传统的描述子来描述。这样从描述子到语义分割,算法具备了季节不变性。对比实验的话,就是在同系统下,利用每一个点由它空间中的三维位置和SIFT描述子来描述,同数据集作对比。
接下来是问题陈述:讲的是有关观测值的观测细节并引入map的一些注释。
首先,研究的问题是什么?: 本文关心的是在一个点特征的地图中,利用在线相机,能够顺序查找车的当前位置/或者说能时刻找到车的位置。
用的什么数据集:CMU,video+GPS
|
本文方法![]() |
基于SIFT的![]() |
![]() |
![]() ![]() |
其中
是特征点的全局坐标,分别代表其在向东、向北、向上方向的值;
则是这个特征点对应的描述向量;最后
表示它的可见性。
。特征点可见性
由可见概率
和可见体积(
)来参数化表示。
这样空间点被建模后具有一个可被检测概率
:即,在由角
定义的角度(黄色涂抹的夹角区域),由
控制长度(蓝色箭头指示方向)的一个楔形体积内的可检测概率
,看图说话!
问题可以理解成 在给定所有观察的情况下递归地计算相对于地图M的车辆姿态的后验密度。
假设已知在t时刻下的车的pose状态量是,
,其中
d代表的是global坐标,
代表yaw,pitch,roll角度,要顺序计算其后验概率密度
。
作者是通过滤波的方法来解决的,滤波问题的解决可以看做两个模型的求解。(或者说一个运动方程一个观测方程?)
process model |
描述系统状态量的变化 | |
measurement model | 描述状态量和观测量之间的关系 |
process模型套用的是一个点质量模型(point mass model):
可以把这个模型拆解为两个部分,。① 前一个
以速度作为输入描述的是两个相邻时间上pose 的关系:
的含义由下方第一个式子得到,
>>>> (1)
其中噪声服从正态分布:
。
②后一个为的是确保road上永远有一个很小的后验概率密度。这样可以使得丢失的滤波器再重新获得它的横向位置。
怎么做呢,通过轨迹上的投影,密度的一小部分会赋给road,所以是
在road上的投影。最终获得(1)式的process model。
这里,road是由绘制的车辆已驾驶的路线route定义,route与地图中的3-D地标一起存储。
======================================
为了方便读者对后文的理解,我们先把几个概率值的定义给出解释,如有误解,欢迎评论讨论
一共有
个feature,注意在semantic map中,
与
相互独立
概率表达式子 | 以i进行解释,假设i描述的类别是building(building就是它的feature)/当然![]() |
![]() |
假设此时 |
![]() |
抛去语义。t时刻,在点云里与feature i 相对应的3D点![]() |
![]() |
t时刻,在点云里与feature i 相对应的且类别为![]() ![]() ![]() |
记得前文提到的,已知量是map,观测量是速度和图像。这里的输入量考虑的是图像,图像观测值可以表示为 。作者的measurement model 是指当前图像
给出的特征点(SIFT/semantic feature)的被测量概率的model,【一般的measurement likelihood值的是粒子权重(详见附录知识点1)】。
*measurement likelihood function会根据预测值与测量值之间的误差大小来计算每个粒子的权值(likelihood)。与观测值越接近的粒子权值越大,反之越小。
这里为了likelihood表述简明,假设了已知图像中的点与地图中的点的对应关系。这样就有了一个数据关联矢量,其中
代表的是图像特征
相匹配的是地图特征
(其中
>0,代表图像特征
有对应的
特征出现在map中的,
=0,代表
在map中没有对应点)。然后,再假设pairs对
与
条件独立【pairs:
(点的图像坐标正则化后的表示)和
(点的描述符),条件独立见见附录知识点2】,我们得到了似然的表达式:
其中
顾名思义,是指在Map M中对应图像特征
的3D点,
是最终的每一类特征的measurement likelihood model
接下来对两种不同的特征的地图,p的建模有所不同。
——————————————————
SIFTmap中,对于给定的数据关联,SIFT描述子对likelihood p不做贡献。【因为是指在Map M中对应图像特征
的3D点,所以此处的
只代表SIFT特征点。】再假设检测SIFT关键点的位置受到噪声的影响:三维点的投影误差为零均值正态分布。
可以得到 (没有descriptor)。
其中代表有透镜畸变的针孔相机模型,
是detector误差的方差。 相对于车辆坐标系的摄像机安装及其内部参数都隐含在
。
------------------------------------------------------
1)单个特征点的似然表示
首先,描述子:图像中的,map中的
,都只是代表其语义类别的标签。(特征点)包含了图像中所有的点。作者又开始假设了,像素坐标
与像素类别
独立,因此可以将单个特征点的likelihood划分为:
2)的常量概率解释
但6式的表达会导致对观测值的过度置信,测量值越多,结果越糟。而且第一个因子,代表的是在pixel i中特征被检测到的可能性【第i个特征的对应点
检测到
的概率】,显然这是一个常量,所以我们讲(6)式改写成(7)
即t时刻,在点云里与feature i 相对应的且类别为的3D点
上,对应的图像特征点的label为
的概率。
3)关于的讨论,像素点能否在map中存在
而对于(7)式右边的,我们又可以分为两个情况考虑:pixel i 到底在map中有没有对应的投影点,即,
。 不能从map中得到类别信息,假设这些像素的分布服从所有类别上的边缘分布:(所有类别应该是独立的)
。在这个情况里,虽然像素点和地图点对应,但是我们仍然不确定我们是否在图像中检测到该3D点的对应点还是被某物(例如车辆或行人)遮挡。为了处理这种不确定性,我们引入了检测变量
,如果在图像中检测到地图点,则为1,否则为0。 使用这个检测变量,我们可以表示具有相应地图点的像素的可能性:
和式的前一项代表的是给定特定地图点被遮挡或可见的像素类别概率。其中,代表点被遮挡,也就是
时像素类别的概率,
是在图像中可见情况下的像素类别的概率。 这些是传感器特定的模型,也取决于所使用的语义分割算法的属性。
后一项描述了给定地图点可见的概率,具体表达为
回想在map中定义的楔形,如果观测量在这个楔形区域内,则
的值为1。
指定可见地图点被遮挡的概率。
为
的倒数
4)总结
总的来说,将可能性分解为像素坐标的一个部分和描述符的一个部分。 像素部分,值为1;而
是由(4)式中所有帖子的乘积得到的,并且根据它有没有对应的map point而分两种情况计算:
#这一章真的是绕......
好了,模型搞清楚之后我们进入滤波器部分。
(这部分不细细解读了,说来说去也是作者对一些参数的设置,一些情况的解决,直接翻译了)
其中是与具有状态
的
粒子的权重,s是设置为3的缩放倍数,
是在图像中投影的地图点的数量,并且
= 400是限制的最大值,而更多图像中的投影地图点不会提供更多信息,理由是更多点意味着它们在图像中的间距更小,因此它们相应的测量值彼此更相关。
怎么制作Map呢,作者简单介绍了下,并强调重点还是model。
数据集提供“车辆状态”的地面实况数据,其中包括pose,但是不足以评估定位。 为了获得更可靠的ground truth,通过与地图创建中相同的SFM方法,添加序列图像和优化pose之间的手动对应来对齐图像序列。 里程计测量值是根据地面真实姿势之间的相对运动产生的,然后再加上噪声和偏差。
语义失败原因:
SIFT失败原因:
的确效果还没有太好,但的确是给出了一个语义定位的方案,虽然有些繁琐,但的确开启了思路,具有它的独创性,也可以喊大家一起来填填坑。interesting。
条件独立:给定第三个事件 ,如果 ,则称X和Y是条件独立事件,符号表示为 。 若X,Y关于事件Z条件独立,则有以下一些理解:①事件 Z 的发生,使本来可能不独立的事件A和事件B变得独立起来;②事件Z 的出现或发生,解开了X 和 Y 的依赖关系。
狄拉克函数:在概念上,它是这么一个“函数”:在除了零以外的点函数值都等于零,而其在整个定义域上的积分等于1
2018.9.14