DTAM 中的 Cost Volume 笔记
DTAM 是比较经典的基于 RGBD 的 SLAM 算法,其中的 Cost Volume 部分也是后续比较常见的模块,这里进行一下记录。
1 定义说明
定义 表示从相机坐标系 到世界坐标系 的变换矩阵:
其中 表示旋转矩阵, 表示平移向量。
则对于空间中一个点具有如下变换关系:
以及投影操作:
反投影操作:
其中 表示像素 对应的逆深度。
则 2D...
Tensorflow C++ 从训练到部署(2):简单图的保存、读取与 CMake 编译
经过了 上一篇文章,我们已经成功编译了 tensorflow c++ 的系统库文件并且安装到系统目录下了。这里我们将使用这个编译好的库进行基本的 C++ 模型加载执行等操作。
注意,在本篇文章会使用 Tensorflow 的 Python API,因为比较简单,这里不做介绍,安装详见官网教程:
https://www.tensorflow.org/install/
0、系统环境
Ubuntu 16.04
Tensorflow 1.10.1 (安装详见官网,建议使用 pip 方式安装)
1、一个简单网络的保存
只有 c = a * b 的网络:
Python
#!/usr/bin/env pythonimport tensorflow as...
Python 常见问题总结
1 错误:No module named '_tkinter'
如果在使用类似 matplotlib 库时遇到如下错误:
import tkinter
File "/usr/local/lib/python3.6/tkinter/__init__.py", line 36, in <module>
import _tkinter #...
Ubuntu Linux 常见问题总结
系统环境
Ubuntu 16.04
问题1:dpkg: error processing package libpaper-utils
在执行 apt-get 安装包时可能遇到如下问题:
dpkg: error processing package libpaper-utils (--configure):
dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.23-0ubuntu10) ...
Errors were encountered...
Tensorflow C++ 从训练到部署(1):环境搭建
很多人使用 Tensorflow 作为自己深度学习的实验工具,然而它只能用 Python 来训练和预测,对于实际生产而言,我们更多地会用 C++ 来放入自己工程中。例如一个典型的流程如下:1)在训练环节,我们仍然希望使用 Python 接口
2)在预测环节,我们使用 C++ 接口获取结果
这几篇博客我们就尝试按照上面的方式,完成从环境搭建、训练到部署的一整套流程。
0、系统环境
Ubuntu 16.04
Tensorflow 1.10.1
ProtoBuf 3.6.1
1、安装依赖
1)安装 JDK 8
下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
或者到我的网盘下载:
[Ubuntu] https://pan.baidu.com/s/1B2wpEVVqtP6JwBfEvEQsnw
[Mac] https://pan.baidu.com/s/15zxVi7uJDmnJk6gQfov1Cw
2)安装依赖库:
使用如下命令:
Shell
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip...
Semantic SLAM 文章收集
截至目前 Semantic SLAM (注意不是 Semantic Mapping)工作还比较初步,可能很多思路还没有打开,但可以预见未来几年工作会越来越多。语义 SLAM 的难点在于怎样设计误差函数,将 Deep Learning 的检测或者分割结果作为一个观测,融入 SLAM 的优化问题中一起联合优化,同时还要尽可能做到至少 GPU 实时。
这一篇博客我将尽力收集一些有代表性的文章,提供下载和简单思路的理解,但个人精力、能力有限也欢迎大家随时提供更多更好的文章。
1、《Probabilistic Data Association for Semantic SLAM》 ICRA 2017语义 SLAM 中的概率数据融合,感觉应该算开山鼻祖的一篇了。这篇也获得了 ICRA...
阿里云 MySQL 频繁挂掉的解决方法
阿里云如果使用低配的服务器,随着访问量增大,上面的 MySQL 经常被系统停掉。除了升级内存硬盘等系统资源外,还可以使用如下方法尝试解决下:
1、降低数据库 InnoDB 引擎的缓冲区大小
找到 MySQL 的配置文件,一般在 /etc/mysql/my.cnf 或者 /etc/my.cnf 这种位置。编辑配置文件,修改或添加下列行:
Shell
innodb_buffer_pool_size = 64M
1
innodb_buffer_pool_size = 64M
2、添加 SWAP 分区
阿里云服务器默认不带 SWAP 分区,我们可以自己创建。请在 Shell 中依次执行以下命令:
Shell
dd if=/dev/zero of=/swapfile bs=1M...
欧拉积分、中点积分与龙格-库塔积分
在 SLAM 系统中经常用到各种不同的数值积分方法,工程上最常见的有三种:欧拉积分(Euler method)、中点积分(Midpoint method)和龙格-库塔法积分(Runge–Kutta methods)。他们的区别就是如何用数值方法模拟一个斜率。这里简单总结如下:
一、欧拉积分
设有如下微分方程:
并且 和 时刻的差为 ,则欧拉积分定义为:
也就是说用 t 时刻的斜率作为整个 时刻的导数。
二、中点积分
设有如下微分方程:
并且 和 时刻的差为 ,则显式中点积分定义为:
则隐式中点积分定义为:
也就是说用 时刻的斜率作为整个 时刻的导数。
欧拉积分与中点积分都是一阶近似并没有本质不同,二者只是一阶导数所取位置不同,他们的性能也有差别,如下图所示,作为一阶积分近似方法来讲,中点积分有时会稍好一些(带来更快的收敛速度)。图示为方程 ...
[C++11] C++11 中的回调
之前写 Java 和 OC 非常羡慕其中的回调机制,之前的博客也介绍了一个使用 fast delegate 回调的 C++ 机制(参见:[C++] 简单高效的 delegate 方法)。现在 C++11 已经普及了,也同样支持了回调,虽然比高阶的语言 Java 和 OC 之类还稍显繁琐,但是基本功能已经都有了,这里简单说明如下。
1、回调基本函数
在 C++11 中使用 std::function 定义回调函数和参数类型,使用 std::bind 绑定回调函数。示例如下:
C++
#include...
GLog & GFlags 的安装
0、系统环境
Ubuntu 16.04
GCC 5.4
1、安装步骤
1)安装 GFlags
运行如下指令:
Shell
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build && cd build
cmake .. -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC ..
make -j4
sudo make install
123456
git clone https://github.com/gflags/gflags.gitcd gflagsmkdir build && cd buildcmake...