在opencv 3.2中,对HOG特征进行聚类以创建词袋视觉模型的性能太慢,无法使用。HOG属性?

2024-10-01 00:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用HOG描述符建立一个可视化的单词包模型。这是用于前景背景选择的面片级背景模型的一部分。在here之后。在

我在windows上使用opencv3.2二进制文件,python3.5。在

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

self.BOW=cv2.BOWKMeansTrainer(128)

我将使用带有以下参数的HOG描述符(见下文)。在

^{pr2}$

我使用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)

这种经常被引用的策略的内存使用/性能似乎完全无法使用。这个弓形簇()方法,文档化的here是难以置信的内存密集型,基本上锁定了计算机。即使是在一些描述上也需要10到20秒。这尤其令人费解,因为上面的文章和许多类似的文章都规定背景模型是不断地更新的,即多次调用cluster()并生成新的词汇表。在

所以在我的示例文件中,我浏览了添加HOG特征的30帧

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

有很多描述词(这里有线索吗?)在

self.BOW.descriptorsCount()
576979200

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

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

我有什么不明白的猪特征是如何添加到词袋?在


Tags: 模型selfextract特征currentcv2描述符background