ZippyPoint: 一种基于学习的特征点提取+二进制描述子,速度提升5倍+,为移动平台提供一种ORB的替代方案...
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
作者丨Realcat
来源丨 计算机视觉SLAM
作者来自ETHZ Computer Vision实验室,本文设计了ZippyPoint,它是一个用于特征点提取的网络。与ORB的描述子类似,ZippyPoint得到的也是二进制描述子。该特征点可以获得与基于学习的特征匹配以及视觉定位性能,同时速度提升5倍。
论文:arxiv.org/abs/2203.03610
本文代码即将开源,笔者将持续关注。
摘要
更复杂、更强大的神经网络模型的设计显著提升了局部特征检测和描述的技术水平。这些技术进步可以归因于更深的网络、通过自我监督改进的训练方法,或引入新的网络结构,例如用于特征匹配的图神经网络。然而,在追求更高性能的过程中,生成轻量级描述符的高效架构几乎没有受到关注。本文的出发点就是设计一种可用于低功耗低算力的移动平台的特征提取网络。本文设计的ZippyPoint使用了二进制描述子归一化层以及混合精度网络,该特征点可以获得与基于学习的特征匹配以及视觉定位性能,同时速度提升5倍。
基本原理
基线网络
输入:一张图像
输出:特征点位置 , 描述子 以及特征点置信度得分
后续将基于KP2D[5]网络进行优化,得到量化后的二进制描述子。
网络优化/量化
对一个卷积层的量化需要考虑的因素包括:权重精度、特征精度以及是否使用高精度的残差等。当对整个网络进行量化时,多层卷积组合在一起需要考虑的因素将形成一个巨大的参数搜索空间。面对这个问题,穷举策略并不可取。
为缩小搜索空间,本文提出了一种网络层的划分和遍历策略算法,如图2所示。首先,本文将目标网络(即KP2D)的操作划分为宏块(macro-block)。对于每个宏块,定义一个候选量化配置的集合。然后遍历宏块,为每个宏块确定最佳配置。由此可见,这种策略将搜索的复杂性从组合级(每个宏块配置数量的乘积)降低到线性级(每个宏块配置数量的总和)。
具体地,作者将基线网络划分为5个macro-blocks:编码器第一个卷积层,编码器剩余的卷积层,空间缩小层(如池化层),解码器最后一层(即输出层)以及除最后一层剩下的解码器层。
Macro-Block I (First Encoder Convolution):两种配置,FP以及INT8,作者发现使用INT8可以提升约3FPS,同时可保持性能不下降。作者认为,这是因为输入图像也是用INT8表示的,因此,输入序列的离散化不会造成信息的损失。
Macro-Block II (Encoder Convolutions):三种配置,INT8, binary (BIN)以及具有高精度残差的二进制(BIN-R)。使用二进制表示可以极大地提到吞吐量,但是性能下降明显;为应对性能下降,本文引入了用于构建高精度残差的INT8表示。
Macro-Block III (Spatial Reduction):四种配置,average-pooling (Aver.), max-pooling (Max), sub-sampling (Sub.S.)以及一个需要学习的池化操作(INT8表示)。
Macro-Block IV (Decoder Convolutions):二种配置,INT8以及BIN-R。
Macro-Block V (Final Decoder Convolutions):二种配置,FP以及INT8。
小结: 若直接将网络第一层与最后一层量化为INT8,则效果下降明显;混合精度网络可以获得精度较高的效果;仅有BIN-R 或INT8的卷积将会使网络陷入次优;对于预测头(head),特征点位置以及得分必须保持是FP,而描述子可以被量化为INT8。
二进制描述子
在描述一幅图像或者图像块时,学习映射(learned mapping)的目的是将一组数据点映射到一个嵌入空间(embedding space)。在这个空间里,相似的数据紧密相连,而不相似的数据则相距甚远。
为了确保稳定的优化,嵌入后的结果一般要归一化,通常使用归一化:
但是对于离散的二进制输出上述归一化形式并不可行(不可微),作者在此处设计了一种归一化的一般化形式:
402 Payment Required
当 以及 时,上式与L2归一化等价。
本文假设二进制描述子的归一化等价于具有恒定数量的1。作者从多类别分类问题中获得灵感,将二进制描述子归一化视为在维超立方体中的描述子在维多面体上的投影。这里我翻译成人话就是:一个特征点对应的维描述子中1的个数为(或者说和为)。
这样就可以定义:
作者重新定义了目标函数为如下形式:
402 Payment Required
其中是二进制交叉熵函数,上式可以变为拉格朗日对偶问题进行求解[1][2],具体过程参见原文。
实验
本文基于TensorFlow实现,使用Larq[3]库用于二进制量化,训练集使用了COCO 2017(同SuperPoint[4])。
注:上述比较中CPU使用的是Apple的M1 ARM芯片;作者对原始的KP2D算法进行了细微调整作为baseline,新基线适配基于块的搜索算法,将Leaky-ReLU替换成hard-swish(效果相当,但是更快)。
结论
本文基于KP2D设计了一整套加速提取与匹配手段,为适配二进制描述子,作者设计了基于二进制的L2归一化等;为降低网络量化搜索空间,作者引入了基于macro-Blocks的混合精度量化算法。最终得到的ZippyPoint可在图像匹配以及视觉定位任务中取得远超人工设计的二进制描述子的性能,并与SuperPoint接近(白天),但是速度快了近14倍。
笔者注意到,本文也存在一些遗留问题,如本文针对KP2D设计的一套量化优化方案是否容易迁移到其它特征点提取网络?网络以macro-blocks划分时引入了较多技巧,每个macro-block的选择是否足够?相对于人工设计的混合量化网络,是否有一种通用的混合量化方式可以更好地得到一个优化后的网络...
参考
[1]. B. Amos, V. Koltun, and J. Z. Kolter, “The limited multi-label projection layer,” arXiv, 2019.
[2]. B. Amos and J. Z. Kolter, “Optnet: Differentiable optimization as a layer in neural networks,” in ICML, 2017.
[3]. L. Geiger et al., “Larq: An open-source library for training binarized neural networks,” Journal of Open Source Software, vol. 5, no. 45, p. 1746, Jan. 2020.
[4]. D. DeTone, T. Malisiewicz, and A. Rabinovich, “Superpoint: Self-supervised interest point detection and description,” in CVPRW, 2018.
[5]. J. Tang, H. Kim, V. Guizilini, S. Pillai, and R. Ambrus, “Neural outlier rejection for self-supervised keypoint learning,” in ICLR, 2020
本文仅做学术分享,如有侵权,请联系删文。
3D视觉精品课程推荐:
1.面向自动驾驶领域的多传感器数据融合技术
2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)
9.从零搭建一套结构光3D重建系统[理论+源码+实践]
10.单目深度估计方法:算法梳理与代码实现
11.自动驾驶中的深度学习模型部署实战
12.相机模型与标定(单目+双目+鱼眼)
13.重磅!四旋翼飞行器:算法与实战
14.ROS2从入门到精通:理论与实战
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
ZippyPoint: 一种基于学习的特征点提取+二进制描述子,速度提升5倍+,为移动平台提供一种ORB的替代方案...相关推荐
- 一种基于颜色统计和特征指纹的图片相似度计算方法
一种基于颜色统计和特征指纹的图片相似度计算方法 1.摘要 图片相似度有很多实际应用,比如谷歌搜图.淘宝识物购买,现在很多类似应用已经使用神经网络训练实现,但是本文仅仅从图像处理角度出发,根据图像内容特 ...
- 零基础学习ORB-SLAM2特征点提取-从原理到源码【李哈哈】_正在刷夜的李哈哈的博客-CSDN博客
零基础学习ORB-SLAM2特征点提取-从原理到源码[李哈哈]_正在刷夜的李哈哈的博客-CSDN博客
- SIFT特征点提取及描述论文算法详解
SIFT特征点提取及描述论文算法详解 1. 尺度空间极值检测(Scale-space extrema detection) 1.1 尺度空间和极值 1.2 DoG和LoG的关系 1.3 构建高斯尺度差 ...
- 优化:一种将grid-search速度提升10倍的方法
Python 2.7 IDE Pychrm 5.0.3 sci-kit learn 0.18.1 前言 抖了个机灵,不要来打我,这是没有理论依据证明的,只是模型测试出来的确有效,并且等待时间下降(约) ...
- alexnet训练多久收敛_如何将深度学习训练速度提升一百倍?PAISoar 来了
阿里妹导读:得力于数据规模增长.神经网络结构的演进和计算能力的增强,深度学习的图像处理.语音识别等领域取得了飞速发展.随着训练数据规模和模型复杂度的不断增大,如何充分利用分布式集群的计算资源加快训练速 ...
- 如何将深度学习训练速度提升一百倍?PAISoar 来了
阿里妹导读:得力于数据规模增长.神经网络结构的演进和计算能力的增强,深度学习的图像处理.语音识别等领域取得了飞速发展.随着训练数据规模和模型复杂度的不断增大,如何充分利用分布式集群的计算资源加快训练速 ...
- 【深度学习-数据加载优化-训练速度提升一倍】
1,介绍 数据加载 深度学习的训练,简单的说就是将数据切分成batch,丢入模型中,并计算loss训练.其中比较重要的一环是数据打batch部分(数据加载部分). 训练时间优化: 深度学习训练往往需要 ...
- 零基础学习ORB-SLAM2特征点提取-从原理到源码【李哈哈】
写在前边的话 该文章将介绍ORB-SLAM2源代码中特征提取部分的主题内容,涉及整体流程.原理简介.源代码讲解,那我们开始吧! 强烈建议配合B站视频食用,效果更更佳!也是我自己做der: 正在刷夜的李 ...
- 基于深度前馈序列记忆网络,如何将语音合成速度提升四倍?
研究背景 语音合成系统主要分为两类,拼接合成系统和参数合成系统.其中参数合成系统在引入了神经网络作为模型之后,合成质量和自然度都获得了长足的进步.另一方面,物联网设备(例如智能音箱和智能电视)的大量普 ...
最新文章
- 几大最短路径算法比较
- thinkphp-许愿墙-2
- 五子棋项目结束总结_居家活动系列总结
- win10磁盘100官方解释_win10磁盘分区管理工具大变脸,现代磁盘管理工具喷薄而出...
- 使用MSHTML解析HTML页面
- 2015年计算机模块在线,2015年工程师职称计算机考试Excel 2003模块题库.doc
- 关于浮点数据类型和布尔数据类型以及最后的总结
- 基于lerna重构Concis组件库
- xsim安装手记(转)
- 只有你能听见(Calling you)2
- 单元测试的基本概念和核心技法
- 众人逃离北上广后又逃回:观念不合拍还要拼爹
- Python 中的多进程(进程之间的通信)
- [jni] [android] 用C++开发安卓程序
- 【基于Java+MySQL等技术的企业员工信息管理系统设计与实现】(源代码+数据库+论文+PPT+视频讲解部署 获取)
- 指向字符串的指针 ------ 字符串指针
- 2019年大学计算机排名,2019年USNews大学计算机专业排名!
- TRIZ创新方法——现代TRIZ理论
- 好的js特效网站!!!
- 三体运动——基于MWORKS.Sysplorer研究初值对混沌系统数值求解的影响
热门文章
- js高级教程阅读笔记 第五章-引用类型(5.6)
- Netflix海外市场交到好运 用户数量猛增
- 利用OnAnimatorove函数控制人物的移动
- PHP中刷新输出缓冲
- 关于Presenting view controllers on detached view ...
- 远程监控 – 数据采集管道
- 在Windows 2003 64位下ASP无法连接Access数据库的解决办法
- 业务系统性能优化——缓存
- 领域驱动设计(DDD)架构演进和DDD的几种典型架构介绍(图文详解)
- 简单介绍4种限流算法!(固定窗口计数器算法、滑动窗口计数器算法、漏桶算法、令牌桶算法)...