DPM模型

article/2025/9/16 23:13:39

今天带来的主题——1000000类的快速精确检测。比Base Line快了将近2000倍。但是任何一个好的东西都会有美中不足之处,之后我们在讨论其缺陷。

今天说的这个模型主要优势在于速度快,具体就是对于多类检测问题,检测速度可以做到和类别数目无关。

对于包含C类的物体检测而言,一个基本的框架是,训练C个分类器,对于每个候选位置,用每个分类器都判定一遍,然后做后处理融合。这样的坏处就是速度太慢,处理速度和物体类别成反比。

今天说讲的内容参考的Base Line算法是DPM模型,就是每个物体的模型由多个part(假定P个)的模型组成,每个part的模型可以看作是一个filter和该位置特征的点积(整体上可以看作是一个convolution过程),然后根据可能的part候选的位置约束确定物体的位置。在实际中,最耗时的是convolution过程,每个物体分类器的filter(对应weight)都需要和候选位置的特征进行一次点积处理,假定候选窗口数目为W个,候选窗口的feature dimension是M维,则运算复杂度为W*C*P*M。

今天讲的内容工作者利用了之前的一个工作结果,可以将两个向量的点积(其实点积和cos距离有非常强的关联,如果预先对参与cos距离运算的两个向量进行模的归一化处理,则归一化后两向量的cos距离和点积是相同的)相似度转化为两个hash值的hamming距离。

距离将feature转换为lsh hash的过程如下(得到的hash是LSH hash,也是WTA hash):假定共M维feature,设K为保留的中间元素数目设定一个重排数组(随机得到,个数为M,元素为0-M-1,每个元素的序号表示临时feature对应原始feature中的序号),从而将原始feature转变为一个临时feature,取临时featue的前K维,组成最终的新feature,则新feature中最大元素序号(新feature中)为k,将k表示为一个log(K)位的二进制数字串继续设定共N个重排数组(随机得到),则得到共N*log(K)位的二进制串,按照最前面的重排数组对应的串放在最低位的原则,得到一个hash值(N*log(K)位整数)。

对应的,两个feature之间的点积转化为两个对应hash之间的hamming距离。

直观上看,由于如此得到的数字只和数字之间的相互大小有关,且每次保留最大的序号的信息,因此,对于数字的扰动非常鲁棒。因此,得到的两个hash值之间的hamming距离所对应的相似度对于特征值的变化更加鲁棒,是更有效的表示。

(到底是否是这样,无从得知,其他信息请参考J. Yagnik, D. Strelow, D. A. Ross, and R.-s. Lin. The powe of comparative reasoning. In IEEE International Conference on Computer Vision, 2011.)

由于计算两个hash之间的hamming距离非常快速(还可以查表),因此最耗时的部分在计算每个窗口的feature以及计算hash值上,这个运算和类别数目无关。

上述可以用于点积衡量相似度的特征,可以是各种各样的特征,在物体检测里面最常用的要数HOG特征了。

下面以HOG特征为例,说明Base Line 算法和本文提出的改进之间计算时间的对比:

Base Line算法的计算过程如下:

  1. 计算多尺度的边缘强度和边缘方向图像;

  2. 对所有窗口进行遍历,对于每个窗口,计算其高斯加权HOG直方图特征,分别计算HOG特征和C类P个filter的点积;

  3. 将具有局部最大响应的窗口作为候选,得到可能的物体中心的分布累积,综合得到最终的物体检测结果。

改进算法计算过程如下:

事先计算得到C*P个filter对应的hash值

  1. 计算多尺度的边缘强度和边缘方向图像;

  2. 对所有窗口进行遍历,对于每个窗口,计算其高斯加权HOG直方图特征,计算特征对应的hash值,分别计算HOG特征hash值和C类P个filter的hash值的hamming距离;

  3. 将具有局部最大响应的窗口作为候选,得到可能的物体中心的分布累积,综合得到最终的物体检测结果。

对比可以看到,由于改进算法中,计算hamming距离的部分非常快,可以忽略,因此,最终得到的多类检测器的运算量和类别数目无关。

进一步,为了快速运算,可以将上述的hamming距离计算转换为查表运算,为了当累积相似度高于阈值时无需继续计算,将hash值划分为多个不同部分(这样每个表也比较小)。

将N*log(K) bit的hash分为N/M组(band),每组是一个M*log(K) bit的整数,对于每个类别每个part的filter(训练模型),对应N/M组查找表(查找表的序号为当前窗口feature在该band上的hash值,查找表记录的值为该featurehash值和模型hash值的相似度),从而避免了hamming距离计算过程。每个filter取到的N/M组查找表的值的累积和为对应的点积值(相似度)。对N/M组累积和计算,当计算发现相似度大于阈值时,则放弃后面的运算,直接对预估物体位置分布进行累积。

则最终得到物体位置分布累积最大的位置为检测得到的物体位置。

提出的框架中还有一点值得讨论的地方在于,100000类数据都是搜索引擎爬取的,没有经过人工标定,所以结果存在一定不准确的地方。但是定性上看,这样做确实快了很多。

当然,相对Base Line算法,提出的算法在精度上还是降低一些的(见论文voc 2007的对比结果,mAP由0.26->0.24)。而耗费的20G内存,推测主要应该是查找表对应的内存。

实验

表1 hash-based算法与Base Line算法准确率比较

 从表中可以看出,只有3个表现的比较好,其余的都表现一般甚至比Base Line更差。 

mAP随hash数量变化的情况

可以看出:

  • 随着hash数量增加,mAP随之提高,但是到某一数量的时候趋于饱和,该实验证明了达到了16的时候,效果最好;

  • 当K=16时,在5KB/filter,mAP到达饱和,所有当有1000000类时,每类10个filters,则需要5G内存;

  • 在5秒每张图像的条件下,与Base Linr相比,加速将近增加了20倍。

         表2 相同内存情况下,执行速度与准确率的关系  

三种不同执行时间下,检测目标数量和mAP的关系               whaosoft aiot  http://143ai.com

从图中可以看出:

  • 关系曲线呈指数变化趋势;

  • 大概三分之一的样本集的准确率为0.20;

  • 大概五分之一的样本集的准确率为0.30。

   t=8时,检测准确率最高的6中物体

在PASCAL VOC2007数据集中,内存给定,不同执行时间下,增加目标类,准确率的变化情况。

从上图可以看出:执行速度越快,准确率越低。随着类数增加,准确率迅速下降,这是由于哈希冲突或者哈希表的信息量达到饱和,值得注意的是红色曲线,mAP下降最少,说明当增加计算时间后,hashing-base检测器检测大数据量级的目标类是可行的。


之前有提及框架的缺点,现在说说其缺点所在:

因为是在单机上进行类别检测,所以速度不是很理想,单机处理一张图像的速度需要20s,而且1000000类的mAP是0.16,从数据上看是很理想,但是距离实用性还有很长的距离。

  • 这个思路,对于基本操作为点积(x*y)运算的,都可以加速,这个操作非常常见,比如线性SVM,COS距离,以及神经网络和LR里面的WX等等,都可以使用。一个比较容易想到的是可以应用于multi-model检测框架中(比如多类别物体检测,多姿态人脸/汽车检测等等);

  • 对于多模型检测,速度是一个非常重要的方面,一般的思路就是在提高单个模型速度(feature和分类器计算速度)的情况下,增加特征共用(LAB feature image, vector boosting),其实,最理想的特征共用是deep learning模型(只在最后一层不同,其它层都是共用的,每个隐节点可以看作是feature,所有类别共用feature,只在输出层时,计算一个wh+b项,是非常理想的特征共用),只可惜单个deep learning模型太慢,当遍历多个检测候选窗口时,最终的速度现在看太慢了。

补充:其实这个方法可能用于加速神经网络模型(当然包括deep learning),难点在于点积变为hash距离的近似比较大,未必会有好的结果。


http://chatgpt.dhexx.cn/article/NVOm6Z4P.shtml

相关文章

DPM原理

转自:DPM(Deformable Parts Model)--原理(一) DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased models. IEEE Trans. PAMI, 32(9):1627–1645, 2010. "Support Vector Machines for Multiple-Instance …

十六、DPM模型-颗粒流动

颗粒流动问题是很多同学目前正在研究的问题,这类问题一般来说都比较复杂,Fluent提供了多种模型对这类问题进行模拟,包括DPM、DDPM、DEM、PBM等,上述的每种模型都有其适用的工况,并不通用,这次我们介绍一下D…

十八、DPM模型案例(二)

关于DPM模型的设置,文章十六给出了一个简单的案例,文章十七介绍了DPM离散相界面的设置,本文通过一个案例来介绍DPM模型中Injection界面的设置,主要是颗粒粒径分布的设置。 1 概念介绍 DPM适用条件:DPM模型只适用于颗…

CV精选知识点:DPM(Deformable Parts Model)算法流程详解

解析1: 将原图与已经准备好的每个类别的“模板”做卷积操作,生成一中类似热力图(hot map)的图像,将不同尺度上的图合成一张,图中较量点就是与最相关“模板”相似的点。 拓展: SGD(stochastic…

目标检测(四)传统目标检测与识别的特征提取——基于部件的可变形模型(DPM)的目标检测原理

目录 简介 基于部件的可变形模型(DPM) DPM检测算法原理 DPM特征提取 检测步骤 简介 DPM(Deformable Part Model),正如其名称所述,可变形的组件模型,是一种基于组件的检测算法,这…

分布式电源管理 (DPM)一图搞懂

分布式电源管理 (DPM) 概述 DPM 是 DRS 的"扩展",有助于节省电力。建议在 CPU资源利用率降低或增加时关闭电源或在 HC 主机上供电。DPM 还涉及了 HA 设置或用户指定的限制。这意味着,例如,如果我们的 HA 容忍…

十七、DPM模型参数设置详解

上篇文章只是给出了DPM模型的一个案例,本篇文章就来详细介绍一下DPM模型参数设置的意义。 当打开Discrete Phase模型时,会弹出下图的窗口,我们来逐项分析选项的设置意义。 1.Interaction 表示双向耦合…

Matlab中abs函数的使用

目录 语法 说明 示例 标量的绝对值 向量的绝对值 复数的模 绝对值 复数的模 abs函数的功能是绝对值和复数的模 语法 Y abs(X) 说明 Y abs(X) 返回数组 X 中每个元素的绝对值。如果 X 是复数,则 abs(X) 返回复数的模。 示例 标量的绝对值 y abs(-5) …

ABS函数怎么用?

Excel的ABS函数主要作用是计算数字的绝对值 本文介绍Microsoft Excel中ABS函数的公式语法和使用实例。 ABS函数的功能 ABS函数用于返回数字的绝对值,正数和0返回数字本身,负数返回数字的相反数。 ABS函数语法 ABS(number) ABS函数参数说明 number(必…

c语言/abs()函数和fabs ()函数

c语言中存在两个函数表示一个数的绝对值abs()和fabs(); 要想引用这两个函数则需要引用头文件 #include<math.h> abs函数是对整数进行取绝对值 fabs函数是对浮点型进行取绝对值 cplusplus对abs和fabs()函数的理解如下&#xff1a; #include <math.h> int aabs(-1);…

某策略游戏(SLG)数据分析:新增、付费和活动效果评估

之前DC发起过一个关于游戏玩家付费预测的算法大赛&#xff0c;比赛所提供的玩家七日内游戏行为数据不仅可以用于算法比赛&#xff0c;也可以让我们利用数据进行一些分析&#xff0c;从而了解游戏的运营状况和数值状况。 本数据共包含有109个字段&#xff0c;一眼看上去有点蒙&a…

python数据分析可视化项目——游戏销售量

python数据分析可视化项目——video游戏销售量 数据来源可视化数据准备游戏出版年份和销量统计——折线图游戏类型、出版商、游玩平台销量统计——柱形图游戏类型比例——饼图 数据来源 本项目数据来源于kaggle数据集&#xff0c;地址https://www.kaggle.com/datasets/gregoru…

【每周一本书】之《游戏数据分析实战》:盛大游戏数据分析专家亲历16年的实战经验分享

【数据猿导读】《游戏数据分析实战》贯穿整个游戏生命周期&#xff0c;提供了丰富的数据分析案例&#xff0c;从预热到封测&#xff0c;再到公测&#xff0c; 均为作者在实际工作中经历的真实案例。案例分析包含数据来源、分析方法、分析过程、分析结论及小结。通过学习本书不但…

大数据开发:基于Hadoop的数据分析平台

互联网的发展&#xff0c;带来了各种数据的爆发式增长&#xff0c;所以接入互联网的相关操作行为&#xff0c;都化为虚拟的数据被记录了下来。大数据时代的带来&#xff0c;一个明显的变化就是全样本数据分析&#xff0c;面对TB/PB级及以上的数据规模&#xff0c;Hadoop始终占据…

移动游戏数据分析(入门篇)

作者&#xff1a;GRG专栏作家 刘异 网龙公司 产品分析经理&#xff0c;专注移动互联网数据分析 前言&#xff1a; 最近一段时间在做部门网游业务的分析沉淀和框架培训&#xff0c;刚好应网大的需求在公司内开设游戏产品数据分析师认证的课程&#xff0c;因此开始尝试把这几年…

从零开始的游戏运营数据分析生活?如何构建数据分析的逻辑框架?

5月30日,数数课堂特邀盛趣游戏数据分析专家黎湘艳老师坐镇第五期直播。 黎湘艳老师向学员们分享了历经超50多款产品沉淀下来的数据分析思维,让大家对数据分析的岗位理解从一个日常节点,展开成为可以预测产品、行业走向的方向标。 /以下为直播当天文字实录/ 我在《游戏数据…

数据分析岗之游戏业务类面试整理学习

⌚️200506 面试某游戏公司数据分析岗的准备 碎碎念 ⚠️部分文字是整理了其他前辈的文章&#xff08;具体见最后&#xff09;&#xff0c;仅用来学习&#xff0c;这样复习更有体系&#xff0c;也希望能帮助到其他同学&#xff0c;遵纪守法好青年&#xff5e; 如果哪篇漏了也…

宝可梦数据分析

pokemon_analysis 一、分析背景二、分析步骤三、其他分析特别说明 一、分析背景 宝可梦数据分析-平民最强宝可梦选择方案 二、分析步骤 下载数据集数据预处理数据分析及数据可视化结论 阿里云 导入库 #导入库 import pandas as pd import seaborn as sns import matplotli…

4000字干货 | 如何搭建游戏数据分析平台?

本文作者为数数科技某游戏客户的运营总监,在使用数数科技的产品之前,他们在内部尝试自建数据分析平台,“从入门到放弃”。上线数数科技的大数据分析平台后,该公司一款全球下载量5000W+的休闲游戏每天所有的数据都在平台上流转。 1 为什么需要数据分析 移动游戏已经进入…

电子游戏销售数据分析(基于Python+Tableau)

1 项目简介 1.1 数据描述 &#xff08;1&#xff09;数据来源 本次分析所采用的数据来源于kaggle上的Video Game Sales数据集 &#xff0c;该数据集通过爬虫从vgchartzwangz网站上获取&#xff0c;主要描述了全球市场上电子游戏的一个销售情况。电子游戏&#xff08;Video G…