图像分类&图像检索

图像检索
基于深度学习的图片检索
图像检索(指基于内容的图像检索,即以图搜图)则是给定一幅查询图像,搜索与之相似(视觉或语义上)的图像。图像检索一般是提取图像特征后直接基于相似性(距离)度量标准计算查询图特征和数据库中图像特征之间的相似性,然后根据相似性大小排序输出结果。
就是以图找图
图像识别包含图像分类,当图像检索中数据库图像带类别标签且查询时只取top1结果的话,也可实现图像分类和识别。
图像相似度是指人类对图像内容认识上(即语义)的差异,导致通过计算查询样图和候选图像之间在视觉特征上存在距离。如果这个距离满足一定条件,我们则可以说这两图像相似度匹配。
经过卷积提取到的特征向量之间的距离,距离越小证明它们之间越相似
图片检索的的大体框架大致可以分成两步,抽取某种特征,计算相似度,,而计算相似度,则常使用欧式距离/汉明距离/Triplet 等方法。

通常想到直接用卷积层来进行特征提取,然后把特征进行对比,但是这样涉及到一个问题,首先一个是数据精度问题,因为直接取特征输出多是浮点数,且维度高,这会导致储存这些图像的特征值会耗费大量空间,第二个因为纬度高,所以用欧式距离这种方式计算相似度,可能会触发维度灾难,令使用欧式距离代表相似度这种方法失效。

一个解决方法就是 使用 Triplet 函数构造一个能够学习如何计算相似度的神经网络,人工构建一个三元集合,该三元集合包括(图片 A,与 A 相似的图片 B,与 A 不相似的图片 C),期望该神经网络接受两个图片输入,若为相似,则输出一个较高的分数,若不相似则输出一个较低的分数。

另一个解决方法是 基于哈希的三种方法 ,最为简单的方式是使用神经网络特征层的输出用于计算空间距离来判断相似度,但这样会导致浮点型数据储存消耗和维度灾难。针对这两个问题,这篇文章提出的方法较为直接。浮点数据怎么办?将他离散成二值型数据,也就是一串 0 和 1 的哈希,这样只需要几个 byte 就能储存一个数据了。维度高怎么办?把他压缩成低维呗。

你可能感兴趣的:(学习)