SemanticFusion: Dense 3D Semantic Mapping with Convolutional Neural Networks
Dyson Robotics Lab(戴森),Imperial College London(帝国理工学院),2016.9.28, NYUv2
总结
主要贡献:
- 将slam系统、CNN网络、贝叶斯更新、条件随机场优化结合设计了semantic mapping的系统。
- 实时性:25fps
- 结合视频连续帧间的信息,优化CNN对单张图片的分割效果
网络结构
由三部分构成:
- ElasticFusion模块:实时计算帧间位姿关系,构建surfels表示的全局地图,提供surfels在帧之间的对应关系。
- CNN分割模块:输入RGBD图像,输出每个像素的类别概率
- 贝叶斯更新模块(Bayesian update scheme):根据CNN的输出和SLAM提供的2D-3D点关联关系,更新全局地图中每个surfel的类别概率。
最后使用CRF来优化输出结果。
工作流程:
RGBD相机接受输入,SLAM系统构建3D地图。每隔固定帧CNN运行一次,给地图更新语义信息。每隔另一个固定帧,CRF运行一次,调整语义分割结果。同时整个系统作用期间都运行闭环检测,若检测到闭环,就更新地图,同时保持语义信息的不变
1. SLAM Mapping:
论文选择ElasticFusion 作为SLAM模块。slam是实时的,对每一帧都进行处理
- 使用ICP进行相机的位姿估计,得到世界坐标到相机坐标的转换矩阵Twc
- 对最新的一帧,其中的新的面元信息加入到map中,已经存在的面元负责优化map中的对应面元(位置信息,法向信息,颜色信息)
- 闭环检测并行运行,若检测到则进行闭环优化
2. CNN Architecture :
CNN 网络负责语义分割
模型结构:VGG16 + unpooling + deconvolutional layers
预训练的网络输入是RGB,但是实际的输入数据是RGBD,这里论文提出了一种将模型迁移到RGBD的方法:
前三个通道的weights已经由大规模的RGB数据集训练好,第四个通道的 weights 初始化为前三个的均值,然后把灰度图[0,255]的range对应到深度图 的[0,8]
输入图像的预处理:
获取到的深度图和彩色图分辨率应该是不同的,所以先用双线性插值把 RGB图像缩放到224x224,然后用最近邻获取每个点的深度。
最后使用数据集NYUv2进行fine tune
3. Incremental Semantic Label Fusion
即surfels的概率更新机制。
将每个surfel的概率初始化为等概率分布,类别数已知,无先验
更新公式:
4. Map Regularisation
使用条件随机场优化更新结果,在分割任务中已经见过不少使用CRF来做最后优化的,貌似是行业共识。
作者给出的直觉是,几何上离得近的元素应该拥有相同的类别。
对于每个像素i具有类别标签xi还有对应的观测值yi,这样每个像素点作为节点,像素与像素间的关系作为边,即构成了一个条件随机场。通过观测变量yi来推测像素i对应的类别标签xi
条件随机场符合吉布斯分布:(此处的xx即上面说的观测值)
P
(
X
=
x
∣
I
)
=
1
Z
(
I
)
e
x
p
(
−
E
(
x
∣
I
)
)
P(X=x|I)= \frac{1}{Z(I)}exp(−E(x|I))
P(X=x∣I)=Z(I)1exp(−E(x∣I))
其中的E(x|I)是能量函数,为了简便,以下省略全局观测I:
E
(
x
)
=
∑
i
Ψ
u
(
x
i
)
+
∑
i
<
j
Ψ
p
(
x
i
,
x
j
)
E(x)=∑_iΨ_u(x_i)+∑_{i<j}Ψ_p(x_i,x_j)
E(x)=i∑Ψu(xi)+i<j∑Ψp(xi,xj)
其中的一元势函数 ∑Ψu(xi)即来自于之前网络的输出。而二元势函数如下:
二元势函数就是描述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同标签,而这个“距离”的定义与颜色值和实际相对距离有关:
所以这样CRF能够使图片尽量在边界处分割。而全连接条件随机场的不同就在于,二元势函数描述的是每一个像素与其他所有像素的关系,所以叫“全连接”
实验过程
主要由于slam是实时的,CNN和CRF是每隔几帧运行一次,所以需要用实验寻找跳过多少帧才比较合适。
CNN:
当CNN每一帧都进行处理时精度最高,52.5%,但是帧率只有8.2Hz。
最终选择每10帧处理一次,49-51%, 25.3Hz
CRF:
实验发现要是每帧都运行CRF会导致精度大幅下降,最终选择每500帧处理一次,获得轻微的性能提升
实验结果: 
直观效果比较。前两行是效果比较好的,第三行则是太多的旋转导致融合预测结果的不同比较小,第四行则是轨迹并没有清晰地按照跟踪和建图轨迹来走,在这类情况下单目帧框架的准确率将更高。
个人想法:
最后一句,作者表示更加强大的系统应该是直接与清晰的物体识别模型交互,一旦置信度超过了一个合适的阈值,就将所谓的点元模型替代为3D物体模型。
slam相关的论文看的太少,看完之后还有很多不是特别清楚的地方。不过可以把语义分割的模型用deeplabV3试试,帧率应该也会快一点(虽然我猜已经有人做了。。。)
不过整个pipeline的性能提升不超过6%,本论文的重点应该还是在于将slam建图和深度学习结合的思想,目标检测(不管是3D还是2D)早就做不动了,slam + deep learning 说不定是眼下值得研究的一个方向。
引用:
https://blog.csdn.net/pikachu_777/article/details/84553835
https://blog.csdn.net/u012759136/article/details/52434826