MatchNet: Unifying Feature and Metric Learning for Patch-Based Matching

CVPR  2015

  本来都写到一半了,突然笔记本死机了,泪崩!好吧,重新写!本文提出了一种联合的学习patch表示的一个深度网络鲁棒的特征比较的网络结构。与传统的像SIFT特征点利用欧氏距离进行距离计算的方式不同,本文是利用全连接层,通过学习到的距离度量来表示两个描述符的相似性。

  本文的贡献点如下:

  1. 提出了一个新的利用深度网络架构基于patch的匹配来明显的改善了效果;

  2. 利用更少的描述符,得到了比state-of-the-art更好的结果;

  3. 实验研究了该系统的各个成分的有效作用,表明,MatchNet改善了手工设计 和 学习到的描述符加上对比函数;

  4. 最后,作者 release 了训练的 MatchNet模型。


  首先来看本文的网络架构:

  

  主要有如下几个成分:

  A. Feature Network.

  主要用于提取输入patch的特征,主要根据AlexNet改变而来,有些许变化。主要的卷积和pool层的两段分别有 preprocess layer bottlebeck layer,各自起到归一化数据和降维,防止过拟合的作用。

  B: Metric Network.

  主要用于feature Comparison,3层fc 加上 softmax。

  C: 在训练阶段,特征网络用作“双塔”,共享参数。双塔的输出串联在一起作为度量网络的输入。The entire network is trained on labeled patch-pairs generated from the sampler to minimize the cross-entropy loss. 在预测的时候,这两个子网络A 和 B 方便的用在 two-stage pipeline. 如下图所示:

  


  MatchNet 的具体参数如下表所示,注意Bottleneck 和 FC 中参数的选择。

  


  接下来看看“网络的训练和测试”,即:

  特征和度量网络联合的训练,利用随机梯度下降的方法,可以最小化下面的交叉熵损失函数:

  其中,yi 是输入pair xi 的0/1标签。1代表匹配。带箭头的 yi 和 1-yi 分别表示 softmax activations,是在FC3 上的两个点v0(xi) 和 v1(xi)计算得来的。计算公式如下:

  上面公式中,带箭头的 yi 用来表示公式1中预测标签为1的概率。

  

  由于数据正负样本的不平衡性,会导致实验精度的降低,本文采用采样的训练方法,在一个batchsize中,选择一半正样本,一半负样本进行训练。分别将patch输入给特征塔 和 度量网络,单独的进行训练,分为两个阶段进行。首先,对所有的patch进行特征编码,然后,我们将feature进行成对处理,输入给度量矩阵然后得到其scores。


  算法总结:

    

  实验结果贴图:

  

     我的感受:

  看完这篇文章,总体来说,有点懵逼!奇怪的是,作者竟然讲的津津有味!还记得开篇,作者说这文章的主要贡献点是提出了一种训练网络提取feature 和 度量feature之间的相似性。Well,提取feature主要体现在“双峰”上,哦,我错了,是“双塔”。这个无可厚非,到了全连接层,就是要得到的feature了。那么,度量feature之间的相似性,体现在哪里呢?哦,对,体现在最后最后的 全连接层上。那么,与传统方法的不同在于,本文的度量方式,并非简单的欧氏距离,而是学出来的。

    怎么体现学出来的呢???

    先从两张图像中提patch,将两种patch分别采样,输给两个提取特征的网络,然后将pool4 的输出降维(通过Bottleneck layer),将“双塔”的输出串联起来,输入到 fc 层,两层fc之后,输入给softmax,此时输出 0 或者 1,分别代表匹配或者不匹配,然后将此结果输出到 交叉熵计算loss,通过这样的方式,完成整个网络的训练,只是此处,提取特征的网络层 和 度量网络 是单独训练的,“双塔”的参数也是共享的。

  讲到这里,也许就是这个文章的主要内容了。Ok,该怎么借鉴,就看自己的了。

  附一张美照,哈哈,明天实验室整体出动去happy,玩真人 CS 和 烧烤,突然感觉好开心啊。。哈哈。。。

  

  

论文笔记之:MatchNet: Unifying Feature and Metric Learning for Patch-Based Matching的更多相关文章

  1. 配置和运行 MatchNet CVPR 2015 MatchNet: Unifying Feature and Metric Learning for Patch-Based Matching

    配置和运行 MatchNet CVPR 2015 GitHub: https://github.com/hanxf/matchnet 最近一个同学在配置,测试这个网络,但是总是遇到各种问题. 我也尝试 ...

  2. 论文笔记 — MatchNet: Unifying Feature and Metric Learning for Patch-Based Matching

    论文:https://github.com/ei1994/my_reference_library/tree/master/papers 本文的贡献点如下: 1. 提出了一个新的利用深度网络架构基于p ...

  3. 论文笔记之:Multiple Feature Fusion via Weighted Entropy for Visual Tracking

    Multiple Feature Fusion via Weighted Entropy for Visual Tracking ICCV 2015 本文主要考虑的是一个多特征融合的问题.如何有效的进 ...

  4. 论文笔记系列-Neural Architecture Search With Reinforcement Learning

    摘要 神经网络在多个领域都取得了不错的成绩,但是神经网络的合理设计却是比较困难的.在本篇论文中,作者使用 递归网络去省城神经网络的模型描述,并且使用 增强学习训练RNN,以使得生成得到的模型在验证集上 ...

  5. 论文笔记:Deep Attentive Tracking via Reciprocative Learning

    Deep Attentive Tracking via Reciprocative Learning NIPS18_tracking Type:Tracking-By-Detection 本篇论文地主 ...

  6. 论文笔记:(CVPR2017)PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

    目录 一. 存在的问题 二. 解决的方案 1.点云特征 2.解决方法 三. 网络结构 四. 理论证明 五.实验效果 1.应用 (1)分类: ModelNet40数据集 (2)部件分割:ShapeNet ...

  7. 论文笔记之:Large Scale Distributed Semi-Supervised Learning Using Streaming Approximation

    Large Scale Distributed Semi-Supervised Learning Using Streaming Approximation Google  2016.10.06 官方 ...

  8. 论文笔记(6):Weakly-and Semi-Supervised Learning of a Deep Convolutional Network for Semantic Image Segmentation

    这篇文章的主要贡献点在于: 1.实验证明仅仅利用图像整体的弱标签很难训练出很好的分割模型: 2.可以利用bounding box来进行训练,并且得到了较好的结果,这样可以代替用pixel-level训 ...

  9. 论文笔记之: Deep Metric Learning via Lifted Structured Feature Embedding

    Deep Metric Learning via Lifted Structured Feature Embedding CVPR 2016 摘要:本文提出一种距离度量的方法,充分的发挥 traini ...

随机推荐

  1. ARC以及MRC中setter方法

    ARC以及MRC中setter方法的差异 有时候,你会需要重写setter或者getter方法,你知道么,ARC与MRC的setter方法是有着差异的呢. 先看下MRC下的setter方法: 在看下A ...

  2. $.noop()和$.map()函数

    最近在项目中发现$.noop()函数,因以前没使用过故查询下,现整理如下: jQuery.noop()函数是一个空函数,它什么也不做. 当某些时候你需要传入函数参数,而且希望它什么也不做的时候,你可以 ...

  3. sublime3笔记

    选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数名 ...

  4. Python的交互式界面 编写 .

    from tkinter import * # 导入tkinter模块的所有内容 root = Tk() # 创建一个文本Label对象 textLabel = Label(root, # 将内容绑定 ...

  5. PB常用日期

    用一条语句写成的有关日期函数 //1.生肖(年份参数:int ls_year  返回参数:string): mid(fill('鼠牛虎兔龙蛇马羊猴鸡狗猪',48),(mod(ls_year -1900 ...

  6. Could not launch "app_name"

    真机测试 不报错 编译通过后 Xcode总出这个错 process launch faild:NotFound-------解决办法 :重启设备

  7. 分享25个CSS前端网页设计常用技巧

    1.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值.2.同一个的class选择符可以在一个文档中重复出现,而id选择符却只能出现一次;对一个标签同时使用class ...

  8. C语言----变量及作用域 、 指针 、 指针和数组 、 进程空间 、 字符串

    1 使用程序来模拟放球.取球的问题 1.1 问题 栈是一种特殊的线性表,它的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称为运算受限的线性表. 栈的定义是限制仅在表的一端进行插入和删 ...

  9. LeetCode Implement Stack using Queues (数据结构)

    题意: 用队列来实现栈. 思路: 没有什么捷径,纯粹模拟.但是用一个队列就够了. class Stack { /* // Push element x onto stack. void push(in ...

  10. postgresql基本操作:查看数据库、索引、表、表空间大小

    一.简介 PostgreSQL 提供了多个系统管理函数来查看表,索引,表空间及数据库的大小,下面详细介绍一下. 二.数据库对象尺寸函数 函数名 返回类型 描述 pg_column_size(any) ...