作者: skylook

论文笔记:Online Invariance Selection for Local Feature Descriptors

本篇文章是 ECCV 2020 Oral ,来自 ETH 的最新大作。本文主要侧重点在于通过神经网络的方式在线选择不变性的局部特征。通过很少的计算量增加,该方法可以比较通用地扩展到各种检测和描述子中,极大地提升实际场景的匹配效果。 主要创新点如下: 使用一个网络通过多任务学习的方式学习出适应多种变化组合的描述子 提出了一种基于 meta descriptor 的轻量级在线选择不变性描述子的方式 本文提出的多任务学习变化描述子以及在线选择不变性描述子的方式,可以拓展到任何传统或者基于 learning 的描述子上,具有很强的通用性。 1 Learning the best invariance for local descriptors 为了说明选择最佳不变性描述子的意义,作者举了个例子: 如上图所示,在纯旋转情况下 SIFT 可以有很好的表现,但是在没有旋转时, Upright SIFT (主方向固定为 (0, 1))...

论文笔记:Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics

Multi-Task Learning (MTL) 问题一个典型方法就是把所有的 Loss 放在一起优化,但是往往又需要设置不同权重。传统方法中往往根据不同 Loss 的量级等人为分析、实验等设置合理的权重,但是取得理想效果往往需要大量工作。本文提出了一种使用 Uncertainty 自动学习权重的方式。 如下图展示了一个典型的 Multi-Task Learning 的场景,同时学习 Semantic、Instance 和 Depth,这一场景包含了分类、特征学习、回归任务,比较典型,也是本文的示例: 本文主要创新点如下: 1)一种创新的原则,利用同方差不确定性的多任务学习方法 2)一个统一的用于学习 semantic segmentation, instance segmentation 和 depth regression 的框架 3)展示了通过学习方法获得权重的有效性 1 Multi Task...

PyTorch Lighting 常见问题整理

0 系统版本 PyTorch Lighting 1.1.7 1 错误:object has no attribute '_metrics_to_agg' 当使用自定义的 Logger 时,如果出现上面的错误,一个很可能的原因是在自定义的 __init__ 函数中忘记调用 super().__init__(),正确的自定义初始化函数用法如下: Python class MyLogger(LightningLoggerBase): def __init__(self, a): ...

论文笔记:From Coarse to Fine: Robust Hierarchical Localization at Large Scale

0 Background 视觉定位是指,在大尺度场景下,已知环境地图,给定任意一张图片,计算出该图片对应的位姿。目前比较流行的方法是,由粗到细两步定位。先通过图像检索的方式找到最接近的关键帧,再与该关键帧匹配局部特征。由于关键帧位姿已知,所以通过PnP等方法可以估计出当前帧位姿。两步定位可以避免从所有关键帧中直接匹配带来的时间复杂度,同时避免了将整个环境地图加载进内存带来的空间复杂度。 本文基于作者更早一些的工作《Leveraging Deep Visual Descriptors for Hierarchical Efficient Localization》,在那篇文章中,作者使用MobileNetVLAD实现图像检索,再使用局部特征(FREAK、SIFT等)实现位姿估计。 在看这篇文章之前可以看下 CVPR 2020 的 Long-term Visual Localization 比赛: 其中在手持设备定位方面,排在最前面的就是这篇 HF-Net + SuperGlue 的组合,可以看出其还是很有实战竞争力的。 1 Introduction 在视觉定位领域,基本上有两种主要的方向,一种是所谓的 End-to-end 方法,代表作是 PoseNet,这类方法直接用图片和 pose...

Anaconda 使用方法

0 系统环境 Ubuntu 16.04/18.04 Anaconda 3 1 安装 Anaconda Anaconda 是一个比较强大的虚拟环境工具,它支持了很多常用的科学计算库,对于配置非常有用。而且最大的优势就是不需要像 pip 一样更改系统环境,随意切换也很安全。下图是 Anaconda 支持的一些常见计算库: 首先在网站上下载最新可用的 Anaconda 安装包,我这里下载的是 Python 3.7 版本 Linux 安装包,这个 Python 版本其实后面可以切换。 https://www.anaconda.com/download 如果是 Linux 用户下载其中的 sh 文件。 将 sh...

每次训练自动备份源码的脚本

我们运行深度学习任务时,常常要改改代码就跑个实验,同时跑很多个,时间久了可能会忘记 TensorBoard 上相应的训练任务都改了什么。 这种情况下,记录下每次运行任务时的源码状态就变得非常有必要。这里有很多方法,比如用git保存相应版本之类的。由于通常情况下深度学习的代码文件都非常少(可能也就几十kb),我这里给出一个最简单粗暴的方法:每次将特定扩展名的文件自动备份到另一个目录。 1 脚本源码 直接给出脚本源码,我这里保存其为 train.sh Shell #!/bin/bash currentdir=${PWD##*/} echo "["${currentdir}"] command line is : " "$*" echo '********************************' echo 'Begin backup source codes' # backup all necessary files # "%Y-%m-%d-%H-%M-%S" time=$(date "+%Y-%m-%d-%H-%M-%S") # echo ${time} destpath='../'${currentdir}'_backups/'${time}'/' echo...

PyTorch 常见问题整理

最近刚刚开始从 Keras 换成 PyTorch,在使用过程中可能会遇到一些常见的问题,做一些整理。 1 Loss 为 NaN 可以在 python 文件头部使用如下函数打开 nan 检查: Python torch.autograd.set_detect_anomaly(True) 1 torch.autograd.set_detect_anomaly(True) 如果遇到了 nan 的 Tensor,它会抛出异常。幸运的话它会告诉你 nan 产生的位置。比如说我遇到过: PowerShell RuntimeError: Function 'SmoothL1LossBackward' returned nan values in its 0th output. 1 RuntimeError:...

论文笔记:UnsuperPoint: End-to-end Unsupervised Interest Point Detector and Descriptor

SuperPoint 的工作取得了巨大的成功,但是有一个非常明显的问题就是训练和真值获取非常困难(采用仿真辅助)。在实际场景中,想要进行人工标注再 finetune 是比较难的。因此本文提出了一种无监督学习的方式同时获得关键点与描述子,虽然无监督,但是在数据集上取得了很好效果的同时也达到了很快的速度。 1 网络设计 本文的网络设计大体与 SuperPoint 一致,但是在 head 设计上面有很多细节不同,主要是 SuperPoint 主要使用分类方式离散地定位关键点坐标、是否为关键点等信息。在 UnsuperPoint 中,作者使用了 score map 作为关键点置信度指标、使用回归 offset 方式进行关键点定位。它的网络设计如下: 1.1 Backbone Module 本文的 Backbone module 与 SuperPoint 类似是一个...

几何深度学习(Geometry Deep Learning)相关工作汇总

深度学习喜欢 End-to-End 解决问题,中间过程有比较多的黑盒,在很多很难完整描述出数学模型的识别类任务中表现尤为出色。但是在传统的几何里面,很多工作是有比较好的数学基础的(比如摄影几何、李群与李代数、BA等等),如果抛弃这些理论全盘黑盒方式解决,有时未必有很好的效果。 因此对于 Geometry Deep Learning (几何深度学习)方向来说,如果深度学习的方式能够改进传统的几何方法的某些环节,或者利用深度学习强大的特征学习能力再与几何方式结合,或许会是一个可行的方向。 最近几年这类的工作非常之多,各大顶会也都有类似的专题,这篇博客旨在收集一些相关的内容作为备忘(个人没有太多精力收集,欢迎大家留言推荐相关文章)。 1 相关论文 1.1 传统几何算法的改进 传统几何算法使用深度学习改进其中一个方向就是所谓 ”可微分“ (Differentiable),例如 ICP、RANSAC、Bundle Adjustment 等等算法有很多所谓 ”硬决策“ 部分(Hard Decision)。这方面很多大牛做了不少工作例如 Eric Brachmann 的 DSAC 系列等等。 下面是一些收集的相关论文: 2 相关代码 2.1 3D Deep...

Differentiable Optimization 工作整理

在深度学习中,可微(Differentiable)是一个很重要的环节,可微意味着能够进行训练。在 SLAM 和很多 3D 系统中,后端往往伴随着大量的在线优化(Optimization)算法,这些算法对于整个 pipeline 很重要,如果要进行 End-to-end 学习的话,如果随意用回归之类的方法代替优化,往往不能取得满意的效果。一个比较简单直接的思想也就是把优化部分进行可微化,这样就可以比较容易地进行替换。 目前基于将优化算法可微化的论文和开源工作感觉还比较有限,这里就看到的一些进行整理,大家如果有相关工作欢迎留言补充。...