社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

基于深度学习的特征提取和匹配方法介绍

小白学视觉 • 3 年前 • 243 次点击  

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作者:黄浴

https://zhuanlan.zhihu.com/p/78053406

本文已由作者授权,未经允许,不得二次转载


计算机视觉需要图像预处理,比如特征提取,包括特征点,边缘和轮廓之类。以前做跟踪和3-D重建,首先就得提取特征。特征点以前成功的就是SIFT/SURF/FAST之类,现在完全可以通过CNN模型形成的特征图来定义。 

特征提取

• Discriminative learning of deep convolutional feature point descriptors【1】

该方法通过卷积神经网络(CNN)学习鉴别式补丁表示,特别是训练具有成对(非)相应补丁的Siamese网络。在训练和测试期间它使用L2距离,提出了一种128-D描述符,其欧几里德距离反映了补丁相似性,并且可作任何涉及SIFT的替代。

如图所示,用一个Siamese网络来学习这样的描述符,其中非线性映射由CNN表示,它对对应或非对应补丁对优化。补丁通过模型提取描述符然后计算其L2范数,作为图像描述符的标准相似性度量。而目标是学习一个描述符,在其空间中让非对应的补丁相隔甚远,而在对应的补丁紧密相连。

考虑每个图像块xi具有索引pi,该索引pi唯一地标识从给定视点大致投影到2D图像块的3D点,而目标函数定义如下:

其中p1,p2分别是投影到x1,x2的3D点索引。

这里下表给出的是三层网络架构:64×64输入在第3层中产生128维输出。每个卷积层由四个子层组成:滤波器层,非线性层,池化层和归一化层。

非线性层,使用双曲线切线单元(Tanh)池化层使用L2池化,归一化很重要,这里使用减法归一化,在第一和二层之后用高斯核减去5×5邻域的加权平均值。


• Learned Invariant Feature Transform【2】

LIFT是一种深度网络架构,实现了完整的特征点检测、朝向估计和特征描述,如图所示。

下图是以Siamese架构为基础的整个特征检测和描述流水线。为了训练网络,采用图中的四分支Siamese结构。每个分支包含三个不同CNN,一个检测器、一个朝向估计器和一个描述子。使用四联(quadruplets)图像补丁。每个包括:图像块P1和P2对应于同样3D点的不同视图,图像块P3包含不同3D点的投影,图像块P4不包含任何显着特征点。在训练期间,每个四联第i个补丁Pi将通过第i个分支。

为了实现端到端可微分,每个分支的组件连接如下:

  • 1) 给定输入图像块P,检测器提供得分图S;

  • 2) 在得分图S上执行soft argmax 并返回单个潜在特征点位置x。

  • 3) 用空间变换器层裁剪(Spatial Transformer layer Crop)提取一个以x为中心的较小的补丁p(如图5-3), 作为朝向估计器的输入。

  • 4) 朝向估计器预测补丁方向θ。

  • 5) 根据该方向第二个空间变换器层(图中的Rot)旋转p产生pθ。

  • 6) pθ送到描述子网络计算特征向量d。

最后的运行结构如图所示。由于朝向估计器和描述子只在局部最大值进行评估,将检测器解耦并在传统NMS的尺度空间中运行,以获得其他两个组件的建议。

最后看LIFT和SIFT结果比较的例子,如图所示。

 

特征匹配

 


  • MatchNet【3】

MatchNet由一个深度卷积网络组成,该网络从补丁中提取特征,并由三个全连接层组成网络计算所提取特征之间的相似性。

如图是MatchNet训练时的网络架构(图C),联合学习将补丁映射到特征表示的特征网络(图 A)和将特征对映射到相似性的测度网络(图 B)。输出尺寸由(高×宽×深)给出。PS是卷积和池化层的补丁大小; S是步幅。层类型:C=卷积,MP=最大池化,FC=全连接。因为填充卷积层和池化层,故输出高度和宽度是输入除以步幅的值。对FC层,大小B,F选自:B∈{64,128,256,512},F∈{128,256,512,1024}。除FC3外,所有卷积层和FC层用ReLU激活,输出用Softmax归一化。

下图是MatchNet预测的流水线图,网络拆解为并行的特征网络和测度网络。分两个阶段使用特征网络和测度网络:首先为所有补丁生成特征编码,然后将这些特征配对并推送它们通过测度网络获得分数。


  • UCN【4】

通用对应网络(Universal Correspondence Network,UCN)用于几何和语义匹配的视觉对应,包括从刚性运动到类内形状或外观变化等不同场景。深度测度学习过程,直接学习来保留几何或语义相似性的特征空间。一种卷积空间变换器(convolutional spatial transformer,CST)模拟传统特征(如SIFT)的补丁归一化,可显著提高类内形状变化语义对应(semantic correspondences)的准确性。

如图是UCN和传统方法的比较:各种类型的视觉对应问题需要不同的方法,例如用于稀疏结构的SIFT或SURF,用于密集匹配的DAISY或DSP,用于语义匹配的SIFT flow或FlowWeb。UCN准确有效地学习几何对应、致密轨迹或语义对应的度量空间。

下图是UCN系统概述:网络是全卷积的,由一系列卷积、池化、非线性和卷积空间变换器组成,还有通道L2归一化和对应对比损失函数。作为输入,网络采用图像对应点的一对图像和坐标(蓝色:正,红色:负)。对应于正样本点(来自两个图像)的特征被训练为彼此更接近,而对应于负样本点的特征被训练为相隔一定距离。在最后L2归一化之前和FCNN之后,设置一个卷积空间变换器来归一化补丁或考虑更大的上下文信息。

下图是视觉对应的对比损失函数示意图:需要三个输入,从图像中提取的两个密集特征及其坐标,和用于正负对应对的表。损失函数计算公式如下

其中s=1位正对应对,而s=0为负对应对。

如图比较卷积空间变换器和其他方法的比较:(a)SIFT标准化旋转和缩放;(b)空间变换器将整个图像作为输入来估计变换;(c)卷积空间变换器对特征进行独立变换。

DGC-Net(Dense Geometric Correspondence Network)【14】是一种基于CNN实现从粗到细致密像素对应图(pixel correspondence map)的框架,它利用光流法的优势,并扩展到大变换,提供密集和亚像素精确的估计。训练数据来自合成的变换,也应用于相机姿态估计的问题。

如图所示,一对输入图像被馈入由两个预训练的CNN分支组成的模块,这些分支构成一个特征金字塔。相关层从金字塔的粗层(顶)获取源图像和目标图像的特征图,并估计它们之间的成对相似性。然后,对应图(correspondence map)解码器获取相关层(correlation layer)的输出并直接预测该金字塔在特定层的像素对应关系。最后,以迭代方式细化估计。

为了在特征空间中创建输入图像对的表示,构造了一个有两个共享权重分支的Siamese神经网络。分支用在ImageNet训练的VGG-16架构,并在最后的池化层截断,然后进行L2归一化。在每个分支的不同部分提取特征fs,ft创建具有5-层特征金字塔(从顶部到底部),其分辨率是[15×15, 30×30, 60×60, 120×120, 240×240],在网络训练过程的其余时间固定CNN分支的权重。

为估计两个图像之间的相似性,计算源图像和目标图像的标准化特征图之间的相关体积。不同于光流法,直接计算全局相关性并在相关层前后做L2标准化以强烈减少模糊匹配(见图所示)。

将相关层输出送到5个卷积块(Conv-BN-ReLU)组成的对应图解码器,估计特征金字塔特定层l 的2D致密对应域ω(l)est。这是参数化估计,图中每个预测像素位置属于宽度和高度归一化的图像坐标区间[-1,1]。也就是说,上采样在(l-1)层的预测对应域,让第l层源图像的特征图变形到目标特征。最后,在上采样域,变形源fs(ω(l)est)和目标ft(l)的特征沿着通道维度拼接在一起,并相应地作为输入提供给第l级的对应图解码器。

解码器中每个卷积层被填充以保持特征图的空间分辨率不变。此外,为了能够在金字塔的底层捕获更多空间上下文信息,从l = 3开始,将不同的空洞(dilation)因子添加到卷积块以增加感受野。特征金字塔创建者、相关层和对应图解码器的分层链一起组成CNN架构,称为DGC-Net。

给定图像对和地面实况像素相关映射ωgt,定义分层目标损失函数如下:

其中||.||1是估计的对应图和GT对应图之间的L1距离,M(l)gt 是GT二值掩码(匹配掩码),表示源图像的每个像素在目标是否具有对应关系。

除了DGC-Net生成的像素对应图之外,还直接预测每个对应的置信度。具体来说,通过添加匹配(matchability)分支来修改DGC-Net结构。它包含四个卷积层,输出了概率图(参数化为sigmoid函数),标记预测对应图每个像素的置信度,这样架构称为DGC + M-Net。把此问题作为像素分类任务,优化一个二值交叉熵(BCE),其中逻辑损失(logits loss)定义为:

最终的损失为:

更多的DGC-Net网络细节见图所示。

而DGC+M-Net的一些网络细节见图所示。

好消息! 

小白学视觉知识星球

开始面向外开放啦👇👇👇




下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV 实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/135464
 
243 次点击