Bag-Of-Words中K-Means聚类的效率优化

最初的Bag of words,也叫做“词袋”,在信息检索中,Bag of words model假定对于一个文本,忽略其词序和语法,句法,将其仅仅看做是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词 是否出现,或者说当这篇文章的作者在任意一个位置选择一个词汇都不受前面句子的影响而独立选择的。

现在Computer Vision中的Bag of words来表示图像的特征描述也是很流行的。大体思想是这样的,假设有5类图像,每一类中有10幅图像,这样首先对每一幅图像划分成patch(可以是刚性分割也可以是像SIFT基于关键点检测的),这样,每一个图像就由很多个patch表示,每一个patch用一个特征向量来表示,咱就假设用Sift表示的,一幅图像可能会有成百上千个patch,每一个patch特征向量的维数128。

接下来就要进行构建Bag of words模型了,假设Dictionary词典的Size为100,即有100个词。那么咱们可以用K-means算法对所有的patch进行聚类,k=100,我们知道,等k-means收敛时,我们也得到了每一个cluster最后的质心,那么这100个质心(维数128)就是词典里的100个词了,词典构建完毕。

词典构建完了怎么用呢?是这样的,先初始化一个100个bin的初始值为0的直方图h。每一幅图像不是有很多patch么?我们就再次计算这些patch和和每一个质心的距离,看看每一个patch离哪一个质心最近,那么直方图h中相对应的bin就加1,然后计算完这幅图像所有的patches之后,就得到了一个bin=100的直方图,然后进行归一化,用这个100维的向量来表示这幅图像。对所有图像计算完成之后,就可以进行分类聚类训练预测之类的了。

那么,这里影响效率的一个方面是构建词典时的K-means聚类,我在用的时候遇到了两个问题:1、内存溢出。这是由于一般的K-means函数的输入是待聚类的完整的矩阵,在这里就是所有patches的特征向量f合成的一个大矩阵,由于这个矩阵太大,内存不顶了。我内存为4G。2、效率低。因为需要计算每一个patch和每一个质心的欧拉距离,还有比较大小,那么要是循环下来这个效率是很低的。

为了解决这个问题,我采用一下策略,不使用整一个数据矩阵X作为输入的k-means,而是自己写循环,每次处理一幅图像的所有patches,对于效率的问题,因为matlab强大的矩阵处理能力,可以有效避免耗时费力的自己编写的循环迭代。

我自己的代码下载:

PG_SPBOW.zip: Matlab code for computing the bag of visual words at different levels of spatial pyramid of images.

李菲菲 bag of words相关推荐

  1. [转帖]李菲菲 bag of words

    Bag-Of-Words中K-Means聚类的效率优化 最初的Bag of words,也叫做"词袋",在信息检索中,Bag of words model假定对于一个文本,忽略其词 ...

  2. 计算机视觉:Bag of words算法实现过程中出现错误及解决方案

    Bag of words算法实现过程中出现错误及解决方案 出现的问题 IndexError: list index out of range OSError:x.sift not found sqli ...

  3. 计算机视觉:Bag of words算法实现图像识别与搜索

    计算机视觉:bag of words算法实现图像识别与搜索 原理 综述 基础流程 结果与解析 数据集 结果与解析 总结 源代码 出现的错误及解决方案 原理 综述 Bag of words,顾名思义,就 ...

  4. java bag集合_集合基于数组的实现:ArrayBag.java

    /** * @Author 陈伟兵 * @MSN:cwbnig1982@hotmail.com * @E-mail:chenweibing1982@sohu.com * @CreateTime 200 ...

  5. matlab ros 手势识别,使用MATLAB读取分析ros记录的.bag文件

    /一定要关闭所有的防火墙 设置主机IP setenv('ROS_MASTER_URI','http://192.168.43.241;11311') 设置本机节点ip setenv('ROS_IP', ...

  6. Bag标签之中的一个行代码实行中文分词实例2

    例1: 分词(返回以逗号隔开每一个词带上引號的词组.gap=",",quotes="'"或quotes='"') 单引號 <bag id=pPa ...

  7. Bag of Tricks for Efficient Text Classification论文阅读及实战

    本文目录 一.Fasttext算法综述 二.原理介绍及优化策略 三.Fasttext算法实战(注:以下代码仅在Linux系统下使用!) 四.参考资料 本文目录(仅做浏览用,暂时不支持页面内跳转) 一. ...

  8. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  9. R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数、交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能

    R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数.交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能 ...

最新文章

  1. C# 获取指定目录下所有文件信息、移动目录、拷贝目录
  2. RT/Metro商店应用如何如何获取图片的宽高
  3. python3 线程间通讯(借助queue)
  4. 我对XCode Objective-c Cocoa的简单理解
  5. android 北斗定位代码_iPhone 11 确认支持北斗导航,真相来了!
  6. UnicodeDecodeError: 'utf8' codec can't decode byte 0xd1 in position 0: invalid continuation byte问题
  7. [FZYZOJ 1002] 雨天
  8. JavaScript高级实战教程,带你深入学习JS高级应用
  9. 微信小程序401unauthorized授权问题解决方法
  10. python3实现灰度图的双三次插值算法缩放
  11. python locale.setlocale_语言环境.setlocale(LC_NUMERIC):如何使其在Windows上运行
  12. 贴吧无耻霸屏技术! 几万阅读量的微信公众号都偷偷的使用它
  13. win10 任务栏全透明一步直达
  14. ALtera DE2开发板学习
  15. 帮朋友 解决一道 LeetCode QJ上问题
  16. mysql aarch64_aarch64华为鲲鹏服务器安装Mysql5.7
  17. 百度离线地图添加右键菜单
  18. Elastic-job 启动阻塞“假死”的问题
  19. 全球最美Top100女神出炉,国内六人上榜,我Python发现了这些秘密...
  20. Log4net的用法

热门文章

  1. 各大世界名牌大学课件下载地址
  2. cs231n assignment1 环境搭建+实践操作
  3. HTML5期末大作业:汽车销售网站模板设计(7个页面) HTML+CSS+JavaScript 企业网页设计源码
  4. 自动驾驶——软件和云服务介绍
  5. 纽交所钟声与左晖的贝壳找房新征程
  6. linux系统识别刻录机,如何使用Linux命令行检测DVD刻录机的名字和读写速度
  7. 虚拟鼓音源拓展包-Toontrack Duality I EZX
  8. 向日葵使用方法与解决一些问题
  9. laravel Excel3.0的使用
  10. 【论文阅读-HGP-SL】Hierarchical Graph Pooling with Structure Learning