学习内容
1.论文
2.吴恩达深度学习(151 / 181)
学习时间
2023.09.13 — 2023.09.18
学习笔记
论文
关于 LCD 的网络架构部分:
网络由 2D 自动编码器和 3D 自动编码器组成。输入图像和点云数据分别用 MSE loss 和 Chamfer loss 重建。重建损失确保嵌入中的特征具有区分性和代表性。2D 嵌入 dI 和 3D 嵌入 dP 之间的相似性通过三元组损失进一步正则化。
2D encoder 的输入是 rgb 三通道矩阵。经过 conv,fc,mxp 等操作以后,得到一个特征描述子(即 da),在本文中,可以设定维度为 (64, 128, 256)。同样地,先通过 RGB-D 数据集生成点云,3D 使用的是 PointNet,将点云输入,经过 encoder 后也会得到特征描述子(dp,dn),与从 2D 里得到的是同维度的。
使用这两对特征描述子构建 triplet loss,以下是具体过程:
_pairwise_distance_squared(x, y)
函数的输出矩阵的维度将是 (n, n)
,其中 n
表示样本数量。
这个矩阵的每个元素 pdist[i, j]
代表了第 i
个样本与第 j
个样本之间的欧几里得距离的平方。换句话说,它测量了样本之间的相似性或差异性,其中较小的值表示样本更相似,而较大的值表示样本更不相似。
HardTripletLoss.forward(self, x, y)
正样本 dp 即点云与图像之间的距离,负样本 dn 即除去 (i, i)
以外距离最近的 (i, j)
。是一个三元组损失。
关于 LCD 的 2D-3D 匹配部分:
文中把它叫做 2D-3D place recognition,而 place recognition 的主要目标是:在给定一张图像的情况下,确定该图像是来自何处的,通常是通过与一个地点数据库中的图像进行比较来实现的。
任务是:一种检索任务(retrieval task),根据一个查询的 2D 图像,在数据库中找到与之对应的 3D 几何子地图。
几何子图生成方式:使用每 100 个连续 RGB-D 帧,from SceneNN。一共生成了 1191 张 3d 子图,以 VLAD 描述子的形式存在数据库中(下文简称“子图”),查询图像直接从 RGB frames 中获取。
DenseVLAD 方法获得描述子:对 3d 子图,我们对连续的 100 帧使用,然后聚合成一个紧凑的 VLAD 描述子(Vector of Locally Aggregated Descriptors) 。对于 2d 图像,也是如此,不过使用的是 2d 网格。
查出前 N 个最相似的子图:计算 查询图像 与 子图 的特征描述子的相似性,选出最符合的 N 个子图。然后再进行下一步计算,查看姿态是否在范围内,只要有一个就说明检索成功。
目前面临的问题:
- DenseVLAD 具体实现不清楚,但是这可以通过阅读 24/7 与 NetVLAD 这两篇论文来实现。
- 提供图像的 VLAD 描述子后,如何计算与数据库子图的相似性。
- 对于提取出来的 N 个子图,如何判定姿态是否在范围内(如何计算出一个标准,让姿态在 d = 0.5m,θ = 30° 的范围内)。
深度学习
1.7 对新序列采样(Sampling novel sequence)
训练完上一节的模型后,我们可以试一试。
先生成第一个词的 softmax 层,然后根据概率随机选择一个词作为第一个词,并接着输入下一层。以此生成一个随机的句子。
此外,还可以以字符(a,b,c,… )作为单位,来生成句子,这样可以避免 <UNK> 的出现。缺点是数据太长,一个句子中可能有 10-20 个单词,换成字符就会很多。
1.8 循环神经网络的梯度消失(Vanishing gradients with RNNs)
RNN 也和普通的神经网络一样,存在梯度消失与梯度爆炸的问题,关于这两个概念,请查阅本节。
梯度消失不太好解决(请看后几节,GRU),而梯度爆炸可以设定一个 threshold,来防止过大的梯度。
此外,RNN 还有的问题是,语法问题。有时候,会遇到前后距离很长的情况,比如单复数,前面指定了单个的物品,在经过很长的文本后,一定要使用 is。但是网络在这方面处理的并不好。
1.9 GRU 单元(Gated Recurrent Unit(GRU))
如何让 RNN “记住”某个单词呢?我们需要使用 GRU 单元。
GRU 会有一个新的变量 c,代表记忆细胞。比如句子的主语是单数,当它看到句子的时候,能一直记住主语是单数。我们让 c < t > = a < t > c^{<t>}=a^{<t>} c<t>=a<t>(对于 GRU 而言,两个值相等。LSTM 中的值不同)。有以下公式:
(其中:
Γ
r
\Gamma_{r}
Γr 表示相关(relevance)门,告诉我们,上一个 c 值与下一个有多大的相关性。
Γ
u
\Gamma_{u}
Γu 代表更新(update)门,表示是否要继续保持上一个 c 值,在大多数情况下,值接近 0 或 1,因此值很小,不存在梯度消失的问题了)
h
~
c
~
<
t
>
=
t
a
n
h
(
W
c
[
Γ
r
⋅
c
<
t
−
1
>
,
x
<
t
>
]
+
b
c
)
u
Γ
u
=
σ
(
W
u
[
c
<
t
−
1
>
,
x
<
t
>
]
+
b
u
)
r
Γ
r
=
σ
(
W
r
[
c
<
t
−
1
>
,
x
<
t
>
]
+
b
r
)
h
c
<
t
>
=
Γ
u
⋅
c
~
<
t
>
+
(
1
−
Γ
u
)
⋅
c
<
t
−
1
>
\tilde{h}\ \ \tilde{c}^{<t>}=tanh(W_{c}[\Gamma_{r}\cdot c^{<t-1>},x^{<t>}]+b_{c})\\ u\ \ \Gamma_{u}=\sigma(W_{u}[c^{<t-1>},x^{<t>}]+b_{u})\\ r\ \ \Gamma_{r}=\sigma(W_{r}[c^{<t-1>},x^{<t>}]+b_{r})\\ h\ \ c^{<t>}=\Gamma_{u}\cdot \tilde{c}^{<t>}+(1-\Gamma_{u})\cdot c^{<t-1>}
h~ c~<t>=tanh(Wc[Γr⋅c<t−1>,x<t>]+bc)u Γu=σ(Wu[c<t−1>,x<t>]+bu)r Γr=σ(Wr[c<t−1>,x<t>]+br)h c<t>=Γu⋅c~<t>+(1−Γu)⋅c<t−1>
Γ u \Gamma_{u} Γu | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
Sentence | The | cat | , | which | ate | already | … | … | , | was | full |
论文参考:
Chung J, Gulcehre C, et al. Empirical Evaluation of Gated Recurrent Nerual Networks on Sequence Modeling[J]. Eprint Arxiv, 2014.
Cho K, et al. On the Properties of Nerual Machine Translation: Encoder-Decoder Approaches[J]. Computer Science, 2014.
1.10 长短期记忆(LSTM(long short term memory))
LSTM 是一个比 GRU 更加强大且通用的版本。
分出了更新门 u 与遗忘门 f,可以让神经网络更加灵活的选择是否更新 candidate value。
有时计算门的时候还会加入
c
<
t
−
1
>
c^{<t-1>}
c<t−1> ,用于结合计算。
c
~
<
t
>
=
t
a
n
h
(
W
c
[
a
<
t
−
1
>
,
x
<
t
>
]
+
b
c
)
Γ
u
=
σ
(
W
u
[
a
<
t
−
1
>
,
x
<
t
>
]
+
b
u
)
Γ
f
=
σ
(
W
f
[
a
<
t
−
1
>
,
x
<
t
>
]
+
b
f
)
Γ
o
=
σ
(
W
o
[
a
<
t
−
1
>
,
x
<
t
>
]
+
b
o
)
c
<
t
>
=
Γ
u
⋅
c
~
<
t
>
+
Γ
f
⋅
c
<
t
−
1
>
a
<
t
>
=
Γ
o
⋅
t
a
n
h
(
c
<
t
>
)
\tilde{c}^{<t>}=tanh(W_{c}[ a^{<t-1>},x^{<t>}]+b_{c})\\ \Gamma_{u}=\sigma(W_{u}[a^{<t-1>},x^{<t>}]+b_{u})\\ \Gamma_{f}=\sigma(W_{f}[a^{<t-1>},x^{<t>}]+b_{f})\\ \Gamma_{o}=\sigma(W_{o}[a^{<t-1>},x^{<t>}]+b_{o})\\ c^{<t>}=\Gamma_{u}\cdot \tilde{c}^{<t>}+\Gamma_{f}\cdot c^{<t-1>}\\ a^{<t>}=\Gamma_{o}\cdot tanh(c^{<t>})
c~<t>=tanh(Wc[a<t−1>,x<t>]+bc)Γu=σ(Wu[a<t−1>,x<t>]+bu)Γf=σ(Wf[a<t−1>,x<t>]+bf)Γo=σ(Wo[a<t−1>,x<t>]+bo)c<t>=Γu⋅c~<t>+Γf⋅c<t−1>a<t>=Γo⋅tanh(c<t>)
论文参考:
Hochreiter S, et al. Long short-Term Memory[J]. Nerual Computation, 1997, 9(8):1735-1780.