pbewithmd5anddes算法 对应.net_论文翻译 | LSNet:单目双目视觉的非线性最小二乘学习算法...

66b0f75251a5b7b1611796db4639ae17.png

1摘要

在本文中,我们提出了最小二乘网络,一种神经非线性最小二乘优化算法,即使在逆境中也能有效地优化这些代价函数.与传统方法不同,所提出的求解器不需要hand-crafted的正则化或先验,因为这些都是从数据中隐式学习的.我们把我们的方法应用于运动立体问题。从单目序列的图像对联合估计运动和场景几何形状.我们表明,我们学习的优化器能够有效地解决这个具有挑战性的优化问题.

2介绍

计算机视觉中的大多数算法使用某种形式的优化来获得最能满足手头问题的某些目标函数的解.优化方法本身可以被视为一种简单的智能方法,用于搜索答案的解空间,可能利用目标函数的特定结构来指导搜索.

目标函数的一种特别有趣的形式是由许多平方剩余项的和组成的.

在大多数情况下,剩余项是优化变量的非线性函数,这类目标函数的问题称为非线性最小二乘(NLLS)问题。使用二阶方法可以有效地求解非线性规划问题[13]。

然而,能否成功找到一个好的解决方案也取决于问题本身的特点。剩余函数集可以比作一个方程组,其解为零, .如果这个系统中变量的数目大于方程的数目,那么这个系统是欠定的,如果它们相等,那么它是确定的.如果方程多于变量,那么它是超定的.适定问题需要满足三个条件:1)解必须存在2)必须有唯一的解,以及3)解必须作为其参数的函数是连续的[21].

待定问题是不适定的,因为它们有无限多的解,因此不存在唯一的解。为了解决这个问题,传统的优化器使用手工的正则化和先验来使不适定问题适定。

在本文中,我们旨在利用来自传统非线性最小二乘解算器的强大而成熟的思想,并将这些思想与有前途的基于学习的新方法相结合。在这样做的过程中,我们寻求利用基于神经网络的方法来学习稳健的数据驱动的先验的能力,以及传统的基于优化的方法来获得高精度的精确解。特别地,我们建议学习如何基于当前残差和雅可比(以及一些额外的参数)来计算更新,以使NLLS优化算法更有效并且对高噪声更鲁棒

我们将优化器应用于从单目图像序列估计帧对的姿态和深度的问题,该单目图像序列被称为单目立体,如图1所示。

综上所述,本文的贡献如下:

  • 我们提出了一种端到端的可训练优化方法,它建立在对NLLS问题的强大的近似基于Hessian的优化方法的基础上
  • 直接从数据中隐式学习最小二乘问题的先验和正则.
  • 第一个采用机器学习来优化光度误差的算法
3非线性最小二乘求解

典型的非线性最小二乘问题如下:

3767ede7b2dfb37a7959090761672364.png

其中代表第j项的误差,x是优化变量,E代表目标函数.遇到这些情况,我们通常使用GN、LM等.

将误差进行一阶展开:

ce00b061dc7e49e83ef107e8903a56cd.png

其中:

9100968951087a234dfaf7a281231fb5.png

则最优迭代值为

2657bf9d403e82ab2679a5a091378232.png

在Gauss-Newton (GN) 法中迭代步长通过下述方程求解:

ecf4232b2bb1b8aad681283f7848ff48.png

而与GN算法不同,Levenberg-Marquadt(LM)算法引入p改善收敛性,其迭代步长为:

f831a96677f9de19e50b34d9df63f926.png

4映射与光度误差

三维空间中的变换矩阵可以通过SE(3)李群中的指数映射得到,其中 是对应的李代数

0dab0e589d988e18e21246d732a92fb9.png

其投影映射关系如下(极线约束),其中代表source图中的点坐标,代表target图中的对应点坐标:

dc6886dfa9ef52dbdc7a3de335a239a5.png

通过映射获得光度误差为:

2b0dd63986fe00a834dc593f5fe1c795.png

其中通过双线性插值得到.通过建立光度误差:

0826dd444e44f20b7c6524695159ca18.png

其雅克比很容易通过各种框架的autodiff自动求导得到(导数包含了双线性差值部分),例如Tensorflow里面可以用tf.gradients(res[i],x)),这里无需给出.

5LS-Net 模型设计

这一部分主要包含三个模块,分别说明如下。

 1     Initialization Network

这一部分主要是特征提取,作者使用了3个卷积层,stride=2,作为 backbone。最后接一个 upsample 和 conv1x1 得到一个大小为原图的1/4 的输出作为 depth 估计。另外通过 backbone 接全连接层输出一个6维向量作为 pose。这一部分没有什么特别的。

为了能够更好地描述较远的深度,实际上网络输出作者采用的是逆深度形式z=1/d

Optimizing Nonlinear Least Squares with LS-Net

这一部分就是非线性优化层了,作者称之为 LS-Net。它的算法部分流程如下:

87afe8d1f4a61f15a0783aa2cc788618.png

如之前所述,我们要估计的目标函数是上述每个像素的光度误差之和,其中待估计变量分为逆深度z和姿态pose两部分x=(z,p).

56428592c0b8515e86f6f155f51f949b.png

还是按照一个典型的梯度下降过程:

e4762ce0d6aec74f76cd3eec5cc8911b.png

在本文中最大的不同就是将其中的步长 的估计使用一个循环神经网络(LSTM-RNN)来完成.公式如下

926aa448ea058886b49095e7f7d2933d.png

其中θ是网络的参数,代表隐藏层.这是一个典型的LSTM Cell.其中输入部分 在下一小节介绍

 2    The Jacobian input structure

在优化过程中作者遵循 GN 的优化过程,即

d7f767f7963b804c5056d0df58eff537.png

但是本文中的雅克比是通过对深度和姿态的自动求带获得(感觉这一步可能不合理,因为自动求导会当做在欧式空间完成,实际上pose是李代数上的).为了简化雅克比矩阵,作者按照下图做了进一步变换,将压缩后作为网络的输入,具体压缩过程如下图所示:

fd150c8ce90c415c2b0e7bdc763bdd9b.png

这里也利用了所谓雅克比矩阵的稀疏性,通常 pose 的数量远少于需要估计的深度的数量,所以可以这样压缩。实际上是减少了没用的参数输入,加快网络计算的速度。

压缩后的和 对应的合起来(concanate)作为 LSTM 的输入

6a0bc4fa2b454ef0f786566e4a2a957a.png

这里作者避免了使用作为网络输入是因为这里增加了大量计算(而且事实上也没提供新的输入信息)

 3    Upscaling Network

上一步的迭代优化网络为第一步初始化网络进行采样后的输入,因此,最后还需要一个上采样网络将优化后的深度图变成原图大小。作者采用的上采样函数就是双线性插值。

Loss

网络总计包含两个误差项,深度误差与姿态误差,两个Loss都是L1范数.

其中深度部分误差项定义为:

184741eec517af4d83a21180f4bc485d.png

姿态部分误差项定义为:

5297c851970cc95dee6cb5a277bc716a.png

最终的误差项是二者加权求和:

b5009f1a4805a8c91b5fa594365546ed.png

6 仿真数据对比

仿真部分作者做了简单的曲线拟合工作,用来和 LM 算法比较收敛速度以及误差,作者拟合的曲线包含:

e3ff1c203d7820758af531b795778c25.png

得出的实验结果如下图:

35f91626033b3510f21f8e05db71ad69.png

可以看到:

在图 a)中,仅经过5次迭代的话,LS-Net 拟合的曲线明显比 LM 拟合的曲线更接近真值。

在图 b)中,可以看出 LS-Net (实线)比 LM(虚线)收敛速度明显更快。

在图 c)中,将相同迭代次数的 LM 误差(x)和 LS-Net(y)做成散点图,可以看出相同迭代次数的 LM 误差均远大于 LS-Net 误差。说明 LS-Net 的收敛速度和收敛结果都更好

7两幅图像深度估计

作者选取了2-view深度估计,证明即使在两幅图相距很远或者很近的极端情况,LS-Net依然能够估计出可信的深度:

c3eed607564bc421ed5358ec1e44ba10.png

与 DeMoN 的对比

1fc3f6714b261ef8b08ba9537314cd39.png

与同是深度学习方法的 DeMoN 的对比,在一些情况下显示出了更好的性能:

8 与其他方法的对比
  • MVS : uses oracle with known poses
  • SIFT : uses sparse features for correspondences
  • FF : uses optical flow
  • Matlab : uses KLT tracker in Matlab

44568e66759c3d47deb53d5f7f64f2c0.png

参考:
http://www.liuxiao.org/https://blog.csdn.net/heiyaheiya/article/details/90754253
- END -
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PBEWITHMD5andDES算法是一种基于口令的加密算法,它使用MD5和DES算法进行加密。下面是一个使用PBEWITHMD5andDES算法进行加密的示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; import java.security.spec.AlgorithmParameterSpec; import java.security.spec.KeySpec; public class PBEDemo { public static void main(String[] args) throws Exception { String password = "mypassword"; String plaintext = "Hello, world!"; // 生成随机盐值 byte[] salt = new byte[8]; SecureRandom random = new SecureRandom(); random.nextBytes(salt); // 创建PBE密钥 KeySpec keySpec = new PBEKeySpec(password.toCharArray()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHMD5andDES"); SecretKey secretKey = keyFactory.generateSecret(keySpec); // 创建PBE参数 AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, 1000); // 创建加密器 Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); // 加密数据 byte[] ciphertext = cipher.doFinal(plaintext.getBytes()); System.out.println("Plaintext: " + plaintext); System.out.println("Ciphertext: " + Base64.getEncoder().encodeToString(ciphertext)); } } ``` 这个示例中,我们使用了Java的加密库来实现PBEWITHMD5andDES算法的加密。首先,我们生成一个随机的盐值,然后使用口令生成PBE密钥。接下来,我们创建PBE参数,并使用密钥和参数初始化加密器。最后,我们使用加密器对明文进行加密,并输出密文。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值