局部特征与图像检索

2024-08-22 11:38
文章标签 图像 检索 特征 局部

本文主要是介绍局部特征与图像检索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Exploiting Local Features from Deep Networks for Image Retrieval 阅读笔记

摘要

这篇⽂章发表在CVPR 2015 workshop上,是来⾃于马⾥兰⼤学帕克学院Joe Yue-Hei Ng等⼈的⼯作。近期的很多研究⼯作表明,相⽐于全相连层的输出,卷积层的特征图谱(feature map)更适⽤于实例搜索。本篇⽂章介绍了如何将卷积层的特征图谱转化为“局部特征”,并使⽤VLAD将其编码为图像特征。另外,作者还进⾏了⼀系列的相关试验去观察不同卷积层的特征图谱对实例搜索准确率的影响。(摘自深度学习大讲坛)

两个问题

1、默认的,CNN一般用于分类任务,使用最后一层(或者说高层)的特征作为分类依据,主要原因是高层捕获了更多语义特征(整体特征),但是实例的局部特征(比如说纹理,颜色等)没有很好的保留。对于图像检索而言就有这样的问题:同一类别的两个外观不同的实例不能被区分。
这里写图片描述
2、一般的我们都会假设测试时输入图片和训练时的图片大小相同。但是每个卷积层的特征会一定程度地随输入图片尺度的不同而变化。

具体想法

1、卷积网络
实验是基于GoogLenet和OxfordNet(VGG-16),使用ImageNet上预训练的权值。CNN在这里的作用只是为了提取特征,且这里需要验证输入图片尺寸对卷积特征的影响,因此不需要全连接层。GoogLenet本就是全卷积网络,而Oxford需要将最后的全连接层去掉。
2、提取特征
输入图片 I ,首先缩放成n×n,进行前向传播,第 l 层的特征图Ml的维度为 nl×nl×dl 。为了简单表示,令 nls=nl×nl 。在特征图 Ml 的每个位置 (i,j) 1i,jnl ,可以获得 dl 维的特征向量 fli,jRdl 。这样第 l 层可以获得nls个特征向量,表示为 Fl={fl1,1,fl1,2,...,flnl,nl}Rdl×nls
3、VLAD编码
这里写图片描述
通过VLAD编码将第 l 层的卷积特征Fl转化成 dl×k 维的特征向量 vl (k为k-means聚类中心的数目,实验中k为100)。但是这样得到的VLAD描述子维度和相关性依然很高,因此需要进一步使用PCA降维(实验中降为128维)和白化操作(解相关)。

实验结果

这里写图片描述
1、不同卷积层特征对检索结果的影响:
可以看到,mAP先随着层深度的增加而提升,达到顶峰,在更高的层中,mAP又开始下降,说明了并不是越高层的特征对图像检索而言越好,反而是中间偏上层达到最佳效果。这也说明了图像检索与图像分类的不同之处!图像检索需要局部特征(低层特征),在如今网络结构越来越深的情况下,尤其需要注意,太高层的特征丢失了很多实例特征。
2、输入图片的尺寸对检索结果的影响:
根据前人的经验,应用多尺度(Multi-Scale)显著提高检索效果(如:MOP-CNN)。这里使用了两个尺度:scale1( n×n ),scale2( 2n×2n )。
实验结果表明,对于高分辨率图片,高层特征依然可以保留局部特征,直观上可以理解为是感受野的原因。同样一个局部细节,高分辨率图片需要更大的感受野来提取特征。

Correspondence visualization

这部分我是参考《Do Convnets Learn Correspondence?》这篇论文来理解的,通过特征非参数化重构图片。具体做法是将第 l 层的特征图Ml中每个特征向量 fli,jRdl 与原始图像块关联起来,图像块位于感受野的中央,大小为感受野的步长。
对于AlexNet(具体怎么算参考感受野的计算):
这里写图片描述
将原始图片中每个图像块用数据库中k近邻(图像块对应的特征向量得到的k近邻)的图像块像素的平均值进行替换。

这篇关于局部特征与图像检索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096169

相关文章

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将