1.bag
最初的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维德向量来表示这幅图像.对所有图像计算完成之后,就可以进行分 类聚类训练预测之类的了.。
2.如何设计好词袋模型的类类型
如何设计好词袋模型的类类型回顾过去自己写过的一些词袋模型,比如 BoW图像检索Python实战 、图像检索(CBIR)三剑客之BoF、VLAD、FV 以及Bag of Words cpp实现,这些写出来的要么只是助于自己理解词袋模型的有关理论,要么也只是面向实验的一些验证,或者更直接点可以说只是些小玩具摆了。
在我2016年的计划列表里,存放着一条由2015年拖过来的目标,就是写出一个可以面向商业级别的词袋模型,这条计划伴随着成功将VLfeat的一些c接口打通而变成了可能,并且在过去的大半年里,自己也一直留意在具体编写的时候选用哪些库比较合适的问题。机缘巧合,这一段时间又重新开始造起了轮子,并有了初步的成功,所以在此梳理总结一下。
在谈怎样设计一个词袋模型的类类型之前,先谈谈库的选用问题。选取合适的库在具体编写一个面向应用级别的词袋模型的时候,大概会经历这么几个步骤:SIFT特征抽取,特征采样,聚类,构建KD树,统计词频,计算词频权重,计算词频直方图,保存数据。
这8个步骤在具体实现的时候,会设计到一些库的选取问题,下面对其进行细谈。1) SIFT特征抽取提取选用哪个库?提取SIFT的库有很多,主要有以下几个大家用得比较多:Lowe的 SIFT ,效果只提供SIFT的二进制可执行文件,弃用;Robwhess的 OpenSIFT ,开源,效果也还不错,需要一些别的依赖库,不再更新,弃用;OpenCV的SIFT,这个当然在使用上是最方便的,文档全,不依赖别的库,但SIFT的实现效果并不是很好,弃用;VLfeat里的 SIFT ,SIFT的实现效果是比较好的,缺点是c接口文档不怎么全,网上提供的资料也比较少,但多读读它的C源码,还是可以搞定的,而且在不用依赖其他的库,所以选择这个库来提取SIFT还是很好的,在实际提取的时候,我选用的是 covdet 函数来提取SIFT,它是一个功能更强大的提取co-variant特征提取器。
在去年的时候,基本弄清了VLfeat中的一些函数的C接口调用方式,covdet这个函数通过阅读写给matlab的接口源码转成的C,对比matlab提取的结果和自己转成C之后提取的结果,两者完全一致。2) 矩阵运算库的选取虽然使用矩阵操作并不是必须的,除了OpenCV的矩阵,还有可能引入其他的矩阵运算库,这些矩阵的引入会给后面的实现带来巨大的方便,比如聚类,KD树的构建以及后面词频统计等。
作为运算的基础库,在矩阵库的选择上主要有下面几个用得比较多:Eigen ,使用的只需要把头文件包含进工程里即可,提供了多个平台的版本,比如可以运行于安卓上,矩阵运算操作还是比较方便的,更新得比较快,不过在PC平台上开发,我比较倾向于使用下面要说的Armadillo。Armadillo ,这个库是我非常喜欢的矩阵运算库,此矩阵库在使用语法上Matlabjie借鉴了Matlab的语法使用习惯,所以熟悉Matlab的开发者在使用此库的时候会觉得非常的舒服,并且有名的MLPack是建立在它的基础之上,另外它的矩阵运算效率也是非常高的,使用的时候同Eigen一样只需要包含头文件目录即可,最新版本中添加了KMeans聚类。
因而,基于以上这些优点,在实现词袋模型的时候,对于矩阵运算库的选取,选择这个无疑是最优的。选用矩阵库虽然能极大的方便我们的程序编写,但是会涉及到数据类型的转换,比如STL的vector存储的数据要转成Armadillo的矩阵进行运算,如果数据频繁的进行类型的转换,必然会降低程序的运行效率,因而在程序的编写中,不必要转换的尽量避免转换。
3) 多线程并行处理为了使程序的SIFT特征提取、KMeans聚类、统计词频等过程支持并行处理,在选择并行计算库的时候,有两种选择,一种是采用OpenMP,另一种是选择MPI。OpenMP是采用的是内存共享的方式,只需要对原程序进行小幅调整即可实现并行处理,并且语法易读已写;MPI需要对原来的程序进行大幅重构,写出来的代码也不是很好读。
所以,在多线程并处计算库选择这块,选择OpenMP是比较好的。词袋模型的类类型设计终于可以讲核心的了,这一部分讲讲在编写程序的时候自己对词袋模型的类类型设计的一点心得。
先上自己写的词袋模型的类类型,设计了两个类,一个是 SIFT特征提取的类类型 ,另一个是 词袋模型的类类型 。先谈谈 SIFT特征提取的类类型 :class siftDesctor{public:siftDesctor(){};std::string imageName;std::vector> frame;std::vector> desctor;void covdet_keypoints_and_descriptors(cv::Mat &img, std::vector> &frames, std::vector> &desctor, bool rooSIFT, bool verbose);std::vector rootsift(std::vector &dst);void Serialize(std::ofstream &outfile) const {std::string tmpImageName = imageName;int strSize = (int)imageName.size();outfile.write((char *)&strSize, sizeof(int));outfile.write((char *)&tmpImageName[0], sizeof(char)*strSize); // 写入文件名int descSize = (int)desctor.size();outfile.write((char *)&descSize, sizeof(int));// 写入sift特征for(int i = 0; i tmpDesc(128);ifs.read((char *)&(tmpDesc[0]), sizeof(float) * 128);siftDesc.desctor.push_back(tmpDesc);std::vector tmpFrame(6);ifs.read((char *)&(tmpFrame[0]), sizeof(float) * 6);siftDesc。
3.词袋模型是什么意思
Bag of words,也叫做“词袋”,在信息检索中,Bag of words model假定对于一个文本,忽略其词序和语法,句法,将其仅仅看做是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现,或者说当这篇文章的作者在任意一个位置选择一个词汇都不受前面句子的影响而独立选择的。
这种假设虽然对自然语言进行了简化,便于模型化,但是其假定在有些情况下是不合理的,例如在新闻个性化推荐中,采用Bag of words的模型就会出现问题。例如用户甲对“南京醉酒驾车事故”这个短语很感兴趣,采用bag of words忽略了顺序和句法,则认为用户甲对“南京”、“醉酒”、“驾车”和“事故”感兴趣,因此可能推荐出和“南京”,“公交车”,“事故”相关的新闻,这显然是不合理的。
4.《极限特工2》插曲
/topics/42025/,
01. J-Kwon Feat. Petey Pablo &
Ebony Eyez - Get XXX'd
02. Ice Cube - Anybody seen The PoPo's?!
03. KoRn Feat. Xzibit - Fight The Power
04. Dead Celebrity Status - Messiah
05. Big Boi Feat. Killer Mike & Bubba Sparxxx - Oh No
06. P.O.D. - The Payback
07. Velvet Revolver - Dirty Little Thing
08. Bone Crusher - Wyle Out
09. Dirtbag - Here We Go
10. YoungBloodZ - Dis Dat Block
11. Chingy Feat. G.I.B. - Lookin' For U
12. Hush - The March
13. Moby & Public Enemy - MKLVFKWR
14. Bone Crusher & Three Days
Grace - Just Like Wylin'
15. Labba - Did It Again
16. Tonex - The Good Song
5.InAmericanschoolsthereissomethingcalledHomecomingDay.我想要这
In American schools there is something called Home-coming Day. Many high schools and colleges with a football team have a homecoming game. This can be the most important event of the year except graduation(毕业) or commencement(授奖典礼) day. Students plan homecoming day for many weeks in advance(预先).Several days before Homecoming, students start to decorate(装饰) the school. There are signs to wish luck to the team, and many other signs to welcome all the graduates. Many people still come to Homecoming twenty or thirty years after their graduation.The members of school clubs build booths(摊位) and sell lemonade, apples and sandwiches. Some clubs help to welcome visitors.During the day people like to look for teachers that they remember from long ago. Often they see old friends and they talk together about those happy years in school.Everyone soon comes to watch the football game. When the game is half over, the band comes onto the field and plays school songs. Another important moment is when the Home-corning Queen or King appears. All the students vote a most popular student Homecoming Queen or King. It is a great honor to be chosen.Homecoming is a happy day, but it is not perfect unless the football team wins the game. Even if the team loses, the students still enjoy Homecoming. Some stay at the school to dance, and others go to a party. For everyone it is a day worth remembering.The most important event of the year in high schools and colleges is ________. A. homecoming B. the football game C. graduation D. winning the gameWhen do students begin to arrange everything for Homecoming? A. The day before Homecoming. B. Many weeks before the day. C. when the guests arrive. D. In the days before Homecoming.Which of the following is NOT done on Homecoming? A. To see old friends. B. To call on teachers they remember. C. To watch the football game. D. To go home to see their family.The underline words “vote” in the fifth paragraph means ________. A. attend a meeting B. elect or choose C. hold a celebration(庆祝) D. have a football matchWho can probably become Homecoming Queen or King? A. The students who is liked most by the others. B. The guest who is most popular with the students. C. The students who is most liked by the guests. D. The player who plays best in the football game. 答案【小题1】C【小题1】B【小题1】D【小题1】B【小题1】A望采纳.。
6.fisher准则函数和lda有什么区别
Fisher判别的基本思路就是投影,针对P维空间中的某点x=(x1,x2,x3,…,xp)寻找一个能使它降为一维数值的线性函数y(x):
y(x)= ∑Cjxj
然后应用这个线性函数把P维空间中的已知类别总体以及求知类别归属的样本都变换为一维数据,再根据其间的亲疏程度把未知归属的样本点判定其归属。这个线性函数应该能够在把P维空间中的所有点转化为一维数值之后,既能最大限度地缩小同类中各个样本点之间的差异,又能最大限度地扩大不同类别中各个样本点之间的差异,这样才可能获得较高的判别效率。在这里借用了一元方差分析的思想,即依据组间均方差与组内均方差之比最大的原则。
LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。[1] LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。
转载请注明出处51数据库 » bagofwordsvlfeat
灰愛