电商图像检索系统(CBIR)系统

来源:互联网 发布:ipad能刷windows系统吗 编辑:程序博客网 时间:2024/05/21 18:35


一.CBIR系统

1. 基于内容的图像检索

CBIR主要由下列组件构成

2. CBIR系统需要解决的几个核心问题:

(1用什么样的特征去表征图像内容?
HOG, SIFT, GIST…
基于具体场景目标训练卷积神经网络,提取神经网络深层输出作为特征
(2如何定义“相近”
各种距离准则
(3)高维空间里如何高效查找最近邻?
近似最近邻(ANN)算法大有帮助
卷积神经网络训练的同时学习分桶桶号

 

二.    图像特征

1.传统图像特征

(1)方向梯度直方图( HOG) 是一种在CV常用特征描述子。 通过计算和统计
图像局部区域的梯度方向直方图来构成特征。

 

(2)SIFT是一种检测局部特征的算法,该算法通过求一幅图中的特征点及其
有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配。

 

(3)GIST通过自然度、开放度、 粗糙度、 膨胀度、 险峻度对图片进⾏描述
MATLAB的实现参见
http://people.csail.mit.edu/torralba/code/spatialenvelope/LMgist.m
C的版本可参见http://lear.inrialpes.fr/src/lear_gist-1.2.tgz

 

2.卷积神经网络图像特征

由不同功能的层次组成的神经网络, 挖掘深层次信息。卷积层的神经元分工,看到不同的“信息”。

 

三.    最近邻问题

1. (NN)下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类?

=>选择最“近” 的类别作为自己的判定结果

 

2.K最近邻算法(NN=>KNN

图中绿色的圆点X是什么形状?
=>依据周边最“近” K个点的类别共同判定

 

3.局部敏感度哈希

在⾼维空间, 线性比对效率太太太低…我们需要近似最近邻(ANN)

传统Hash与Local SensitiveHash区别

 

LSH把原始的样本点映射成长度为N的一个2进制串,其中每个位次可以理解为在空间取了一个超平面去做划分

 

3. 其余近似最近邻算法

不管何种算法,都是尽量预先对数据做⼀些划分和索引。损失了一点点准确率,换取搜索速度的极大提升。
  工程上常用算法:
  LSH(Local Sensitive Hash / 局部敏感度哈希)
  K-Means Tree
  K-D Tree
  说明:ANN的算法帮助我们缩小范围和提速, 严格的距离排序依旧需要依托于前面的距离准则。这句话可以理解为:ANN算法是进行初步筛选,排序还是通过距离准则实现。

 

四.    距离准则

相似度/距离定义
(1) 欧氏距离
(2)Jaccard相似度
(3)余弦相似度
(4)Pearson相似度

 

五.    工程经验之ANN

1. ANNOY

建索引与最近邻查找, 可以直接⽤list作为向量输⼊

 

2. FLANN(推荐)
Ø  实现多种最近邻检索方式,可以指定准确率
Ø  可以选择自动模式,自动选最合适的模型和方式
    数据量大的时候载入模型稍微有点慢

 

3. Kgrapth
Ø  可并行化地建索引和检索近似最近邻
Ø  建完的索引文件大小稍微小些

 

4. Nearpy
Ø  构建在Numpy, Scipy和redis之上
Ø  因为cache在redis之上, 可以增量式补充数据,增加索引

 

5. Lshash
Ø  超级精简!!
Ø  也支持redis存储索引

 

六.    康奈尔学图像检索系统

(1)用VisualSearchServer和CIFAR-10构建一个简易图像检索系统
  1) https://github.com/AKSHAYUBHAT/VisualSearchServer
  2) http://www.cs.toronto.edu/~kriz/cifar.html

(2)核心代码:

(3)基本思路

1)训练神经网络模型。

2)采用训练好的神经网络模型抽取图像特征。保存某池化层后的图像特征。

3)计算距离、排序

 

七.外文文献

(1)Deep Learning of Binary Hash Codes for Fast Image Retrieval 2015

博客:http://blog.csdn.net/han_xiaoyang/article/details/50856583
代码:https://github.com/HanXiaoyang/image_retrieval

github: https://github.com/kevinlin311tw/caffe-cvprw15

思路:1)训练神经网络进行图像分桶。

2)把图像输入训练好的神经网络模型拿到分桶编号,并取出桶中图像计算与收入图像的距离。

3)根据距离进行排序。

实现:在全连接层与输出层之间插入一个LatentLayer,该层具有128个神经元实现LSM功能。

 

(2)Where to Buy It: Matching Street ClothingPhotos in Online Shops, ICCV2015

(3)Cross-domain Image Retrieval with a DualAttribute-aware Ranking Network, ICCV 2015

(4)DeepFashion: PoweringRobust Clothes Recognition and Retrieval with Rich Annotations, CVPR2016

(5)Deep Image Retrieval: Learning global representations for imagesearch. In ECCV, 2016.

(6)Supervised Learning ofSemantics-Preserving Hashing via Deep Neural Networks for Large-Scale ImageSearch 2016

github:https://github.com/kevinlin311tw/Caffe-DeepBinaryCode

(7)Faster R-CNN Features for Instance Search 2016

github:https://github.com/imatge-upc/retrieval-2016-deepvision

(8)Learning Compact BinaryDescriptors with Unsupervised Deep Neural Networks 2016

github:https://github.com/kevinlin311tw/cvpr16-deepbit

(9)CNN Image RetrievalLearns from BoW: Unsupervised Fine-Tuning with Hard Examples

code(Matlab): http://ptak.felk.cvut.cz/personal/radenfil/siamac/siaMAC_code.tar.gz

 

七.参考任何⼀个电商图像搜索的⽅法
⽐如https://github.com/bobbens/cvpr2016_stylenet
利⽤以下数据集构建图像检索系统 http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion.html