Python opencv 3.2中单词包可视化模型的聚类功能太慢,无法使用。猪的属性?

Python opencv 3.2中单词包可视化模型的聚类功能太慢,无法使用。猪的属性?,python,opencv,computer-vision,video-processing,Python,Opencv,Computer Vision,Video Processing,我正在尝试使用HOG描述符构建一个可视化的单词包模型。这是用于前景背景选择的面片级背景模型的一部分。跟着 我在windows和python 3.5上使用opencv 3.2二进制文件 我首先创建了一个字典大小为128的BOW类: self.BOW=cv2.BOWKMeansTrainer(128) 我将使用具有以下参数的HOG描述符(但请参见下文) 我正在使用MOG背景减法生成我的初始背景方案,然后将其输入到BOW模型中,以获得补丁级功能 图像具有以下形状 self.bg_image.shap

我正在尝试使用HOG描述符构建一个可视化的单词包模型。这是用于前景背景选择的面片级背景模型的一部分。跟着

我在windows和python 3.5上使用opencv 3.2二进制文件

我首先创建了一个字典大小为128的BOW类:

self.BOW=cv2.BOWKMeansTrainer(128)
我将使用具有以下参数的HOG描述符(但请参见下文)

我正在使用MOG背景减法生成我的初始背景方案,然后将其输入到BOW模型中,以获得补丁级功能

图像具有以下形状

self.bg_image.shape
(509, 905, 3)
因此,对于每一帧,如果它被MOG分类为背景,我会将HOG特征添加到弓模型中

self.BOW.add(self.calc_HOG.compute(self.bg_image)) 
我会一直这样做,直到需要检查一个潜在的前景物体

当一帧可能是前景时,我对描述符进行聚类

self.background_vocab=self.BOW.cluster()
生成提取器

 self.extract_bow = cv2.BOWImgDescriptorExtractor(self.calc_HOG, self.matcher)
创建词汇表

  self.extract_bow.setVocabulary(self.background_vocab)
并将当前裁剪与当前背景图像进行比较

  current_BOWhist=self.extract_bow.compute(current)

  print("Extract background HOG feature")
  background_BOWhist=self.extract_bow.compute(background)

  print("Compare Background and Foreground Masks")
  BOW_dist =cv2.compareHist(current_BOWhist, background_BOWhist, method=cv2.HISTCMP_CHISQR)
这种经常被引用的策略的内存使用/性能似乎完全无法使用。有文档记载的BOW.cluster()方法非常占用内存,基本上会锁定计算机。即使只使用几个描述符,也需要10到20秒。这尤其令人费解,因为上面的文章和许多类似的文章都规定后台模型是不断更新的,也就是说,对cluster()的多次调用并生成新的词汇表

所以在我的示例文件中,我经历了30帧添加猪特征的过程

a=self.BOW.getDescriptors()
len(a)
30
其中有很多描述词(这里有线索?)

我认为这就是问题所在,对于kmeans来说,这似乎太多了。我的属性有问题吗?从上面引用的论文

“弓形字典的大小是128。在验证步骤中,根据长宽比调整MSDP的大小,以确保所有面片包含大致相同数量的像素。为了解决分割过程中不可避免的各种纵横比问题,我们让沿x和y坐标的弓形网格的数量灵活,同时将总数量保持在600的固定数量。类似地,总共有25个块用于对HOG特征进行编码。弓形尺寸为32“

关于如何将HOG特性添加到单词包中,我还不了解什么

a=self.BOW.getDescriptors()
len(a)
30
self.BOW.descriptorsCount()
576979200