复现 LET-NET_计算机视觉

复现 LET-NET_计算机视觉_02


代码:  https://github.com/linyicheng1/LET-NET

摘要

稀疏光流法是计算机视觉中的一项基本任务。然而,它依赖于恒定的假设限制了其在高动态范围(HDR)场景中的适用性。在本研究中,我们提出了一种新的方法,旨在通过学习一个对光照变化具有鲁棒性的特征映射来超越图像的颜色信息。该特征图随后被构造成一个特征金字塔,并集成到稀疏的Lucas-Kanade(LK)光流中。通过采用这种混合光流方法,我们克服了亮度常数假设的限制。具体来说,我们利用一个轻量级的网络从图像中提取特征图和关键点。考虑到为浅层网络获得可靠的关键点的挑战,我们采用了一个额外的深度网络来支持训练过程。这两种网络都使用无监督的方法进行训练。所提出的轻量级网络在板载CPU上达到了190fps的显著速度。为了验证我们的方法,我们在动态照明条件下与传统光流方法的重复性和匹配性能进行了比较。此外,我们通过将其集成到VINS-Mono中,证明了我们的方法的有效性,从而在公共HDR数据集上显著降低了93%的偏移误差。

方法

这篇论文提出了一种轻量级网络与传统金字塔LK光流方法相结合的混合光流方法,旨在实现高效的实时目标跟踪。以下是该方法的过程描述:

  1. 特征提取:首先,使用共享编码器从图像中提取共享特征图。这些特征图不仅包含基本的RGB信息,还包括更高层次的特征信息。
  2. 特征图解码:共享特征图被解码为两个关键地图——得分图(S)和光照不变特征图(F)。其中,得分图用于提取关键点,使用非极大值抑制(NMS)方法来识别关键点,并通过最大间隔采样方法确保关键点的均匀分布。
  3. 金字塔光流计算:在金字塔光流方法中,首先计算光照不变特征图的空间和时间导数(Fx, Fy, Ft)。然后将所有关键点的导数结合成一个系数矩阵A和一个常量向量b,通过求解方程Av = b来获得光流速度v。
  4. 训练过程:训练过程中包含两个关键步骤:
    4.1. 辅助训练:首先使用深度网络进行辅助训练,以增强轻量级网络的性能。
    4.2. 损失计算:在训练中,引入了新的损失函数,包括关键点损失、特征损失和描述符损失,这些损失基于得分图(S)、特征图(F)和描述符图(D)的结果进行计算。深度网络只用于训练,而在实际的混合光流方法中,仅使用浅层网络。
  5. 匹配与评估:光流方法在预处理图像(如使用普查变换和直方图均衡化)后,进行关键点的匹配。最终通过匹配每一帧图像的关键点,估计基础矩阵,并使用RANSAC算法过滤匹配结果,以获得正确的匹配对。

这种方法在动态光照条件下与传统光流方法进行了对比验证,展示了其在重复性和匹配性能方面的优势。此外,通过将该方法集成到VINS-Mono中,实现了在公共HDR数据集上的显著精度提升,减少了93%的平移误差。

环境准备

OpenCV ( https://docs.opencv.org/3.4/d7/d9f/tutorial_linux_install.html)
ncnn ( https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-linux)

CMakeLists.txt

set(ncnn_DIR "<your_path>/install/lib/cmake/ncnn" CACHE PATH "Directory that contains ncnnConfig.cmake")
  • 1.

编译

mkdir build && cd build
cmake .. && make -j4
  • 1.
  • 2.

代码运行

./build/demo <path_param> <path_bin> <path_video>
  • 1.

或者

./build/demo <path_param> <path_bin> <path_img_1> <path_img_2>
  • 1.

例如

./build/demo ./model/model.param ./model/model.bin ./assets/nyu_snippet.mp4
  • 1.