1 速读
1.1 论文试图解决什么问题?这是否是一个新的问题?
利用光流法解决动态SLAM问题,在原基于特征点的基础上进行扩展,本质上还没有引入物体级别的概念
1.2 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?
在动态SLAM汇总处整理;
1.3 文章的贡献是什么?
一个动态SLAM框架VDO-LAM;
①利用光流法检测动态;
②构建因子图优化将动态点加入后端优化;
③可以解决遮挡的object创建方法
1.4 文章解决方案的关键是什么
光流对动态的估计+对动态物体的稠密光流得到动态物体的运动(因为动态物体大多时候占据画面一小部分,原特征点不够恢复其运动)
1.5 实验如何设计?实验结果足够论证其效果吗?
语义网络:Mask R-CNN;光流网络:PWC-Net;深度网络:MonoDepth2;特征提取:FAST;
三个误差尺度;
在KITTI上和DynaSLAM2和CubeSLAM做比较:
相机位姿上:效果和Dyna差不多,比Cube好,但是单目情况表现不好因为网络给出的深度信息不准确;
物体跟踪上:选取了一些存在时间较长的物体比较跟踪距离和速度评测;
最后展示map结果;
1.6 数据集是什么?
两个数据集:Oxford Multimotion Dataset(indoor)和 KITTI Tracking
1.7 还会存在什么问题
作者conclusion:
①计算量太大;
我觉得:
②本质上还是基于特征点的SLAM,只不过不是将动态点抛弃而是按照原来优化静态点的思路加入了SLAM过程,没有进行相应的优化或语义处理
2 主要内容
效果图如下:
上图 红色:相机轨迹;黑色:静态背景点;彩色:移动物体点;
下图 黑色:静态背景点;框+彩色密集点+估计的速度:移动物体;
紫色区域可以看到车头没有被标注进来;
2.1 系统框架
①Pre-processing数据预处理:从图像中得到深度图,并进行语义分割(得到object级信息)+稠密光流估计(用于最大化object上的track point);
②Tracking:
静态部分track:提取剔除语义部分的特征点用光流track并用于相机位姿估计
动态object track:语义标签动态+场景流检测用于构建动态物体,所有物体被标记(静态部分记为为l=0,动态部分l≠0),根据与上一帧的光流correspondence确定最新帧的中的物体标签(其中与上一帧静态部分构成correspondence的动态物体被认为新出现或者在被遮挡后重新出现,会新建动态物体);动态物体位姿计算没看懂
③Mapping:
Local Batch优化:在一个滑窗内做局部优化,只优化窗口内的相机位姿和静态结构(作者说也可以加入动态部分,那为什么不加呢?)
Global Batch优化:全局地图保存tracking计算的相机位姿,object运动,内点结构,最后构建出一个factor graph的优化;
From Mapping to Tracking:保存的map信息帮助tracking优化(应该是一些设计代码细节的东西)
2.2 Background and Notation
H:object位姿变换(文章称为body-frame pose change),T:相机位姿变换
L:object位姿,X:相机位姿(相机坐标系到世界坐标系),m:3D点坐标
左上角表示相对于哪个坐标系,右下角表示在哪个时刻;
①点由object坐标系到世界坐标系的变化为:
m
k
i
=
L
k
⋅
L
k
m
k
i
m_k^i = L_k\cdot {^{L_k}m_k^i}
mki=Lk⋅Lkmki②由刚体假设有点在object坐标系下坐标不变(从①推得):
L
k
m
k
i
=
L
k
−
1
⋅
m
k
i
=
L
k
−
1
−
1
⋅
m
k
−
1
i
^{L_k}m_k^i = L_k^{-1}\cdot m_k^i = L_{k-1}^{-1}\cdot m_{k-1}^i
Lkmki=Lk−1⋅mki=Lk−1−1⋅mk−1i③object相对与上一个object坐标系的位姿变化为:
L
k
−
1
H
k
=
L
k
−
1
−
1
L
k
^{L_{k-1}}H_k = L_{k-1}^{-1}L_{k}
Lk−1Hk=Lk−1−1Lk④将②③带入①中得到:
m
k
i
=
L
k
−
1
⋅
L
k
−
1
H
k
⋅
L
k
−
1
−
1
⋅
m
k
−
1
i
m_k^i = L_{k-1}\cdot {^{L_{k-1}}H_k\cdot L_{k-1}^{-1}\cdot m_{k-1}^i}
mki=Lk−1⋅Lk−1Hk⋅Lk−1−1⋅mk−1i最终可以得到两个时刻相同动态点在世界坐标系下的齐次变换表示:
H
k
=
L
k
−
1
⋅
L
k
−
1
H
k
⋅
L
k
−
1
−
1
H_{k} = L_{k-1}\cdot ^{L_{k-1}}H_k\cdot L_{k-1}^{-1}
Hk=Lk−1⋅Lk−1Hk⋅Lk−1−1即将动态点的位置变换转化为由上一帧的object位姿+当前帧和上一帧的object相对位姿变换表示。这个式子将整个优化过程变成了点与点的关系,是不基于object-pose的model-free的方式;
2.3 Camera Pose and Object Motion Estimation
①相机位姿估计
最小化重投影误差,静态点的重投影误差,计算相机位姿X:
e
e
g
o
i
=
p
k
i
−
π
(
X
k
−
1
m
k
−
1
i
)
,
m
b
e
l
o
n
g
t
o
s
t
a
t
i
c
;
e_{ego}^i =p_k^i-\pi(X_{k}^{-1}m_{k-1}^{i}), m\ belong\ to\ static;
eegoi=pki−π(Xk−1mk−1i),m belong to static;②目标运动估计
最小化object上点的重投影误差,计算齐次变换H:
e
o
b
j
i
=
p
k
i
−
π
(
X
k
−
1
H
k
m
k
−
1
i
)
=
p
k
i
−
π
(
G
k
m
k
−
1
i
)
,
m
b
e
l
o
n
g
t
o
o
b
j
e
c
t
;
e_{obj}^i = p_k^i - \pi(X_k^{-1}H_km_{k-1}^i) = p_k^i - \pi(G_km_{k-1}^i),m\ belong\ to\ object;
eobji=pki−π(Xk−1Hkmk−1i)=pki−π(Gkmk−1i),m belong to object;③联合光流估计
将原匹配点
p
k
i
p_k^i
pki转换成光流的结果,重投影误差变成了:
e
e
g
o
i
=
p
k
−
1
i
+
ϕ
k
−
1
i
−
π
(
X
k
−
1
m
k
−
1
i
)
,
m
b
e
l
o
n
g
t
o
s
t
a
t
i
c
;
e_{ego}^i =p_{k-1}^i+\phi_{k-1}^i-\pi(X_{k}^{-1}m_{k-1}^{i}), m\ belong\ to\ static;
eegoi=pk−1i+ϕk−1i−π(Xk−1mk−1i),m belong to static;最终的cost方程为优化光流项+重投影误差项,即结合了光流的结果以应对一些复杂动态场景;
这是关于相机位姿的,目标运动和光流结合同理;
2.4 Graph Optimisation
四个误差:
①青色圈:运动平滑误差,认为物体速度不会突变:
e
s
m
o
o
t
h
l
,
k
=
(
H
k
−
1
l
)
−
1
H
k
l
e_{smooth}^{l,k} = (H_{k-1}^l)^{-1}H_{k}^l
esmoothl,k=(Hk−1l)−1Hkl②橙色圈:里程计误差,之前估计的相机位姿作为约束参与位姿优化:
e
o
d
e
m
e
t
r
y
k
=
(
X
k
−
1
−
1
X
k
)
−
1
T
k
e_{odemetry}^k=(X_{k-1}^{-1}X_k)^{-1}T_k
eodemetryk=(Xk−1−1Xk)−1Tk③洋红色圈:运动模型误差,由其次变换表示的运动存在的误差:
e
m
o
t
i
o
n
i
,
j
,
k
=
m
k
i
−
H
k
l
m
k
−
1
i
e_{motion}^{i,j,k} = m_k^i - H_{k}^{l}m_{k-1}^i
emotioni,j,k=mki−Hklmk−1i④白色圈:3D点观测误差,因为不管动静,map中的信息都是一堆点,z为测量深度值:
e
p
o
i
n
t
i
,
k
=
X
k
−
1
m
k
i
−
z
k
i
e_{point}^{i,k} = X_k^{-1}m_k^i - z_k^i
epointi,k=Xk−1mki−zki最终误差:从左到右为①②③④
m
θ
i
n
∑
l
,
k
ρ
(
∣
∣
e
s
m
o
o
t
h
l
,
k
∣
∣
∑
z
2
)
+
∑
k
ρ
(
∣
∣
e
o
d
e
m
e
t
r
y
k
∣
∣
∑
o
2
)
+
∑
i
,
j
,
k
ρ
(
∣
∣
e
m
o
t
i
o
n
i
,
j
,
k
∣
∣
∑
g
2
)
+
∑
i
,
k
ρ
(
∣
∣
e
p
o
i
n
t
i
,
k
∣
∣
∑
z
2
)
\underset{\theta} min\sum_{l,k}\rho(||e_{smooth}^{l, k}||_{\sum_z}^2) + \sum_{k}\rho(||e_{odemetry}^{k}||_{\sum_o}^2) \\+ \sum_{i,j,k}\rho(||e_{motion}^{i,j, k}||_{\sum_g}^2) + \sum_{i,k}\rho(||e_{point}^{i, k}||_{\sum_z}^2)
θminl,k∑ρ(∣∣esmoothl,k∣∣∑z2)+k∑ρ(∣∣eodemetryk∣∣∑o2)+i,j,k∑ρ(∣∣emotioni,j,k∣∣∑g2)+i,k∑ρ(∣∣epointi,k∣∣∑z2)待优化参数列表:从左到右为3D点坐标,相机位姿,齐次变换
θ
=
{
θ
X
,
θ
M
,
θ
H
}
\theta = \{\theta_X, \theta_M, \theta_H\}
θ={θX,θM,θH}
因子图:
蓝色:静态点;黑色:相机位姿;红色:动态点;绿色:齐次变换;
黑色圈:globalmap给的先验约束;橙色圈:odemestry约束;白色圈:观测约束;洋红色圈:点运动约束;object运动平滑约束:青色;
3 实验
三个误差尺度:
①平移误差
E
t
E_t
Et:位姿变换E中的平移部分,用L2范数表示;
②旋转误差
E
r
E_r
Er:位姿变换E中的旋转部分;
③object速度误差:运动前在两帧之间的运动向量就是速度:
v
≈
m
k
i
−
m
k
−
1
i
=
(
H
k
−
I
)
m
k
−
1
i
=
t
k
−
(
I
−
R
k
)
m
k
−
1
i
v \approx m_k^i - m_{k-1}^i = (H_k - I)m_{k-1}^i\\ =t_k - (I-R_k)m_{k-1}^i
v≈mki−mk−1i=(Hk−I)mk−1i=tk−(I−Rk)mk−1i对于一个object的速度,用其质心坐标
c
k
−
1
=
1
n
∑
m
k
−
1
i
c_{k-1}=\frac{1}{n}\sum m_{k-1}^i
ck−1=n1∑mk−1i的速度误差表示:
v
≈
1
n
∑
i
=
1
n
(
t
k
−
(
I
−
R
k
)
m
k
−
1
i
)
=
t
k
−
(
I
−
R
k
)
c
k
−
1
v \approx \frac{1}{n}\sum_{i=1}^n(t_k - (I-R_k)m_{k-1}^i)\\ = t_k - (I-R_k)c_{k-1}
v≈n1i=1∑n(tk−(I−Rk)mk−1i)=tk−(I−Rk)ck−1
问题
1.一直提到的inliner的具体意义是什么?
2.没有太理解object跟object上的点是什么样的关系;
这里应该没有完整的object概念,文中的object就是为了好说明原理,实质上是点云;