Python opencv 3.2中单词包可视化模型的聚类功能太慢,无法使用。猪的属性?
我正在尝试使用HOG描述符构建一个可视化的单词包模型。这是用于前景背景选择的面片级背景模型的一部分。跟着 我在windows和python 3.5上使用opencv 3.2二进制文件 我首先创建了一个字典大小为128的BOW类: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
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