HardNet解读
论文:Working hard to know your neighbor’s margins: Local descriptor learning loss
为什么介绍此文:这篇2018cvpr文章主要是从困难样本入手,提出的一个loss,简单却很有效,在图像匹配、检索、Wide baseline stereo等都做了大量详细实验,在真实任务中真正取得了state-of-the-art的结果。代码:https://github.com/DagnyT/hardnet 。上一篇博客中的论文可以和这个相结合,一起阅读更佳。此外这些通过learn得到的descriptor虽然在某些数据集结果好,但在实际中并不popular,甚至不如传统SIFT及其变体!有结论认为是数据集不够大、不够有区分度!
摘要:
受到到Lowe的SIFT的匹配标准启发,引入一种度量学习所用的loss。最大化一个batch中的最近正样本与最近负样本的距离。这种方法比复杂的优化方法更有效,它对于浅层或深层网络都很work。将这个loss结合与L2Net的结构可以达到一个更加全面的描述子,称之为HardNet。它有着和SIFT一样的特征维度128,并且state-of-art performance in wide baseline stereo, patch verification and instance retrieval benchmarks.
1. 介绍
许多计算机视觉任务依赖寻找local correspondences,例如image retrieval、panorama stitching、wide baseline stereo、3D-reconstruction。尽管越来越多端到端的方法试图取代复杂的经典方法,但是对于local patches的经典的检测子和描述子仍然被用,主要就是鲁棒性和高效性以及紧密的集成。
LIFT、MatchNet和DeepCompare是最先尝试的端到端学习,然而这些方法在实际应用中并不受欢迎,尽管它们在patch verification任务中有好的表现。近来的研究证实SIFT以及其变体(RootSIFT-PCA [16], DSP-SIFT [17)远超于learned descriptors在匹配、检索以及SD重建等领域。【19】给出结论是local patches datasets不够大和有区分度来学习这么一种高质量、可以广泛应用的descriptor。
本文关注于descriptor的学习,并提出一个新奇的网络HardNet。并通过大量实验展示了该方法学习到的descriptor同时在真实世界的任务中远超于hand-crafted和learned descriptors。达到了真正的state-of-the-art。
2. 相关工作
经典的SIFT local feature matching包括两部分:寻找最近邻和比较第一、第二近邻的距离比值来过滤假阳性matches。据作者所知还没人这么做。
【20】提出一个简单的filter plus pooling策略和convex optimization 来取代 hand-crafted filters and poolings in SIFT。MatchNet采用Siamese网络结构,首先是feature net,然后是metric net,后者提高了匹配表现,但是却无法使用快速最近邻算法例如kd-tree。【15】同样方法探索了不同结构,【22】利用hard negative mining和相对较浅的结构来探索pair-basesd similarity。
下面的几篇论文中与经典的SIFT匹配策略结合紧密。【23】利用triplet margin loss和triplet distance loss,随机采样patch。它显示了triplet-based结构比pair based的优越性。它们随机采用负样本。【7】计算挖掘的正负类样本的距离矩阵,然后是pairwise contrastive loss。
L2-Net利用一个batch中的n个匹配对来生成n方-n个负样本对并且要求每行每列中到真实匹配的距离最小。没有其他距离或者距离比值的限制。相反,它们提出一个对描述子维数的相关性的惩罚,并且通过intermediate 特征图采取deep supervision。本文采用L2-Net的结构作为base结构,我们展现了利用更简单的目标函数不需要两个辅助损失项,学习更有力描述子的可能性。
图1 ,根据图示可以看到这种采样策略比较简单,但是却很有效!
下面分析这个采样过程。
3. The proposed descriptor
3.1 Sampling and loss
学习目标模仿SIFT的匹配标准,过程如图1.首先一个batch中的匹配块生成,A代表anchor,P代表positive。那么每一对就是源于相同的一个SD point。
第二,这2n个patch进入图2中的网络。 计算L2 pairwise距离矩阵n*n:
那么
然后要分别寻找和该匹配对最相近的不匹配patch以及次相近的不匹配patch的特征向量。(这体现了sift的操作)
那目标就是最小化匹配描述子和与之最相近的非匹配描述子。这n个triplet 距离然后被送到triplet margin loss:
距离在triplet重组的过程中已经预计算好了,和随机triplet采样相比开销是距离矩阵的计算、计算行列的最值。此外,相比usual的triplets学习,我们的方案只需两路two-stream CNN,并不是三路。减少了30%的计算和存储。和L2-net不同的是neither deep supervision for intermediate layers is used, nor a constraint on the correlation of descriptor dimensions.并没有产生过拟合。
3.2 Model architecture
结构来源于L2Net,具体参数及设置见论文。
有趣的一点是Pytorch更新后,作者无法复现,通过超参数搜索后,设置lr=10,dropout rate=0.3得到了更好的结果。
3.3 Model training
在UBC数据集上,除了给出fpr95:false positive rate (FPR) at point of 0.95 true positive recall.,还给出了MatchNet和Tfeat中的FDR:(false discovery rate) 指标。另外作者没有做CS(center-surrounding)结构的实验,因为许多论文都证明了这个结构可以提升结果,所以这里不比再做,其实我认为可以看看还能提升多少。。
可以看到hardnet不论有无数据增强,都更强于L2Net!
作者又探索了batchsize的影响:发现128比较合适,256之提升了一点点。
后面的工作还有很多,关于real-world实际应用的实验,有空再补充。
HardNet解读的更多相关文章
- SDWebImage源码解读之SDWebImageDownloaderOperation
第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...
- SDWebImage源码解读 之 NSData+ImageContentType
第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...
- SDWebImage源码解读 之 UIImage+GIF
第二篇 前言 本篇是和GIF相关的一个UIImage的分类.主要提供了三个方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name ----- 根据名 ...
- SDWebImage源码解读 之 SDWebImageCompat
第三篇 前言 本篇主要解读SDWebImage的配置文件.正如compat的定义,该配置文件主要是兼容Apple的其他设备.也许我们真实的开发平台只有一个,但考虑各个平台的兼容性,对于框架有着很重要的 ...
- SDWebImage源码解读_之SDWebImageDecoder
第四篇 前言 首先,我们要弄明白一个问题? 为什么要对UIImage进行解码呢?难道不能直接使用吗? 其实不解码也是可以使用的,假如说我们通过imageNamed:来加载image,系统默认会在主线程 ...
- SDWebImage源码解读之SDWebImageCache(上)
第五篇 前言 本篇主要讲解图片缓存类的知识,虽然只涉及了图片方面的缓存的设计,但思想同样适用于别的方面的设计.在架构上来说,缓存算是存储设计的一部分.我们把各种不同的存储内容按照功能进行切割后,图片缓 ...
- SDWebImage源码解读之SDWebImageCache(下)
第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...
- AFNetworking 3.0 源码解读 总结(干货)(下)
承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...
- AFNetworking 3.0 源码解读 总结(干货)(上)
养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...
随机推荐
- CodeForces922E DP//多重背包的二进制优化
https://cn.vjudge.net/problem/1365218/origin 题意 一条直线上有n棵树 每棵树上有ci只鸟 在一棵树底下召唤一只鸟的魔法代价是costi 每召唤一只鸟,魔法 ...
- maven直接饮用jar包的写法
<dependency> <groupId>sample</groupId> <artifactId>com.sample</artifactId ...
- Hortonworks官网文档怎么找?
Hortonworks官网文档怎么找? 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 俗话说,授人予鱼不如授人予渔,网上部署HDP的部署方式的博客有很多,看得你是眼花缭乱的.其实万 ...
- Java中Sax解析XML
SAX基于事件的解析,解析器在一次读取XML文件中根据读取的数据产生相应的事件,由应用程序实现相应的事件处理逻辑,即它是一种“推”的解析方式:这种解析方法速度快.占用内存少,但是它需要应用程序自己处理 ...
- Memcache在.Net中的使用
一.Memcache基本概念(socket服务器) 本质:是一个在内存上存储的hash表,key的最大值是255字符,最长过期时间为30天 特点:惰性删除,没有监控数据过期的机制,实现最基本的key- ...
- .net导出Excel几种方式比较
数据原共400条数据,21列,我是双核cpu,4G内存1. Excel com组件要3秒左右,上千条30秒+这种方法比较慢,要引用Microsoft.Office.Interop.Excel #reg ...
- EL表达式遍历集合获取下标
如题,HTML页面很多时候需要循环遍历一个集合,并且获得集合元素得下标做判断,或者把下标传递给后台作为参数 那么我们就需要用到EL表达式的varStatus 代码一:<c:forEach var ...
- js中数值类型相加变成拼接字符串的问题
如题,弱类型计算需要先进行转型,例: savNum=parseInt(savNum)+parseInt(num);或者使用 number()转型
- centos nginx gerrit
gerrit官方地址:https://www.gerritcodereview.com/ 需先安装依赖 jdk mysql 并手动创建数据库 下载好war包后,初始化操作 java -jar ger ...
- HDU - 6311 Cover(无向图的最少路径边覆盖 欧拉路径)
题意 给个无向图,无重边和自环,问最少需要多少路径把边覆盖了.并输出相应路径 分析 首先联通块之间是独立的,对于一个联通块内,最少路径覆盖就是 max(1,度数为奇数点的个数/2).然后就是求欧拉路 ...