一种用于拥挤场景下的多个行人检测方法 技术领域 本发明涉及一种检测方法, 尤其是一种用于拥挤场景下的多个行人检测方法, 属 于图像处理与模式识别的技术领域。
背景技术 真实场景中的行人检测问题在诸多计算机视觉应用中占有重要的地位, 例如视频 监控和辅助驾驶系统等, 同时鲁棒的行人检测也是提高其它智能视频分析技术的先决条件 之一。
传统的行人检测方法大体可分为两类 : 第一类是基于模板匹配的方法, 首先训练 一个分类器, 然后在待检测的图像中使用不同尺度的搜索窗口对整个图像进行滑框检测, 判断滑框内是否包含了一个行人 ; 第二类采用霍夫投票方法, 使用隐形状模型 (Implicit Shape Model, ISM) , 利用表象特征以及与目标中心的空间关系来训练一个视觉字典, 将图 像通过霍夫变换获取其在霍夫空间上的分布, 并在霍夫空间上进行投票, 从而对行人进行 检测。 以上两种传统方法在普通场景下表现良好, 但是在拥挤场景下, 由于人与人之间的严 重遮挡和复杂的空间关系, 不能达到令人满意的效果。
发明内容
本发明的目的是克服现有技术中存在的不足, 提供一种用于拥挤场景下的多个行 人检测方法, 其提高检测精度, 适应范围广。
按照本发明提供的技术方案, 一种用于拥挤场景下的多个行人检测方法, 所述多 个行人检测方法包括如下步骤 :
a、 输入含有多个训练样本图像的训练集, 自动将训练样本图像中行人分成若干子 类, 每个子类对应一种行人变化 ;
b、 基于分块模型, 每一个分块有相应的表象分数, 并对每一子类设置对应的权重 向量, 以建立训练集上的行人表象特征模型,
c、 利用二次核函数表征图像的行人之间的空间关系模型 ;
d、 根据上述行人表象特征模型及行人空间相互关系模型, 建立概率模型来描述拥 挤场景下的多个行人, 并将所述概率模型转换为能量目标函数 ;
e、 利用基于隐变量排序 SVM 的参数学习方法在训练集上寻找上述能量目标函数 的最优参数, 以得到确定的能量目标函数 ;
f、 输入待检测的行人图像, 利用基于扩展移动的模型推断方法求解上述确定的能 量目标函数, 得到待检测拥挤场景中行人的检测结果。
所述步骤 d 中, 转换得到的能量目标函数为
其中, N 为检测框个数, L = {l1,…,lN}, bi 指中心为 (xi,yi), 大小为 si 的第 i 个检测框 ; 为位于检测框 bi 的图像区域, li 为第 i 个检测框的子类标签 ; 是 的分块分数向量, 为 量, 为 的转置, 是表象特征模型中第 li 个子类标签的参数向 的转置, 表示第 i 个子类标签 li 和第 j 个子类标签 lj之间的相互关系模型参数, f(bi,bj) 用来检测框 bi 和检测框 bj 之间的空间相互关系。
所述分块模型使用的特征包括 HOG 特征、 SIFT 特征或 LBP 特征。
本发明的优点 : 利用隐变量排序 SVM 从弱标记的行人数据训练集中训练出一个包 含一些子类的混合模型, 每一个行人都被假定存在于其中的一个特殊的子类中并由子模型 描述 ; 其中, 行人表象特征模型基于分块模型, 并且对于每一个分块都有相应的分数, 同时 每一个子类都有个权重向量来表明不同分块的重要性, 用来作为第二级的特征描述 ; 行人 空间相互关系模型用于描述不同行人之间的空间关系, 在本发明中, 利用一个二次方程的 内核来建立此模型 ; 使用类似于图割当中的扩展移动方法的估计算法, 来近似推断问题的 最优解, 提高检测精度, 适应范围广。 附图说明
图 1 为本发明的检测流程图。 具体实施方式
下面结合具体附图和实施例对本发明作进一步说明。
如图 1 所示 : 本发明用于拥挤场景下的多个行人检测方法包括如下步骤 :
a、 输入含有多个训练样本图像的训练集合, 利用 K 均值聚类将训练样本图像中行 人分成若干子类, 每个子类对应一种行人变化 ;
b、 利用分块模型表征行人的表象, 使用可形变的部件模型讲行人自动的分块, 每 一个分块有相应的分数, 并对每一子类设置对应的权重向量, 以建立行人表象特征模型,
c、 利用二次核函数建立训练样本集上的行人空间相互关系模型 ;
d、 根据上述行人表象特征模型及行人空间相互关系模型, 建立概率模型来描述拥 挤场景下的多个行人, 并将所述概率模型转换为能量目标函数 ;
e、 利用基于隐变量排序支持向量机的参数学习方法寻找上述能量目标函数的最 优参数, 以得到确定的能量目标函数 ;
f、 输入待检测的拥挤场景行人图像, 利用基于扩展移动的模型推断方法及上述确 定的能量目标函数检测得到待检测拥挤场景行人图像的结果。
下面介绍如何具体建立能量目标函数, 确定能量目标函数以及对拥挤场景行人图 像进行检测。具体为 :
对于行人检测问题, 传统方法为对于一个给定待检测图像 I 和一种搜索策略, 在其中找到 N 个可能的检测框 B = {b1,b2,… ,bN}, 其中 bi 指第 i 个检测框, 且其中心为 (xi,yi), 大小为 si。而检测框 bi 的标签写为 ti, 其中 ti = 1 表示检测框 bi 对应一个行人否 则 ti = 0。将模型设定为 Fθ, 其中参数 θ = (θa,θs), 其中 θa 和 θs 分别用于建立行人 表象特征模型和行人空间相互关系模型。最后得到的行人检测结果就是对于 B 中的每一个 bi 都进行一个相应的预测 T = {t1,t2,…,tN}。则行人检测任务就等效为寻找一个预测 T 使得概率 P(T|I,θ) 最大。根据贝叶斯理论, 可以得到 :
其中 P(I|T,θ) 描述表象特征模型, 并且当给定一个图片的估计 T 和模型 Fθ 之 后, 给出其似然 ; P(T|θ) 是先验部分, 这里使用先验部分在估计 T 中对不同行人之间的空 间相互关系进行建模。
在本发明中实施例中提出用行人表象特征模型和行人空间相互关系模型来建立 一个统一的概率模型。具体为 :
在行人表象特征模型中, 表象特征的似然被认为是独立同分布的, 所以似然部分 P(I|T,θ) 可以被写为 :
其中 为位于 bi 的图像区域, 方程的右边成立是因为仅与标签 ti 有关,与标签 tj(j ≠ i) 无关。
对于行人空间相互关系模型, 出于简单考虑, 我们将成对的相互关系作为基本的 元素, 其它复杂的关系网络都是直接由这种成对的简单关系组成建立的。这种成对的相互 关系 p(ti,tj|θs) 指的是检测框 bi 的标签 ti 并且检测框 bj 的标签 tj 的联合概率, 其中这个 概率分布的参数为 θs。对一个有 N 个框的检测预测 T, 其空间相互关系模型可以描述为 :
将公式 (2) 和公式 (3) 代入公式 (1) 中并取对数, 则最大后验估计等效于下面这个 最大能量问题 :
其中且 同时把 作 定义成任意一个小于检测阈值的常数。 由于基于滑窗遍历的检很明显, 传统的基于滑窗遍历检测的方法就是设置为表象特征的分数,测方法经常会在同一个位置检测出许多互相交叠的检测结果框, 所以经常使用非极大值抑 制 (non-maxima suppression, NMS) 作为后处理方法, 这种方法可以用是上面这个式子的一 种特殊情况来说明, 即当 bi, bj 互相交叠的框, 交叠部分超过一个设定的阈值, 并且 ti = tj = 1 的时候设置
否则 和 的具体表现形式, 同时将两者结合为一下面将给出之前定义的个混合模型, 从而简化其复杂度。
首先简单介绍一下混合模型以及其中的自动分成子类的动机。基于效率的考虑, 本发明提出用一种简单的线性模型描述拥挤场景下的行人, 但是在很多情况下线性模型本 身不足以描述行人的复杂的表象特征和空间相互关系。为了更好地描述这些复杂场景, 本 发明提出一个由 K 个子类组成的混合模型, 其中每一个行人都由其子类来表示。对于检测 框 bi 的标签从 ti ∈ {0,1} 扩展为 li ∈ {0,1,… ,K}, 其中 li = 0 表示背景, li = k 表示第 k 个子类, K 表示扩展后的第 K 个子类。由于实际应用中, 只有标签 ti 是可以给定的, 所以将子类标签 li 作为一个隐变量。 至于在训练阶段如何估计 li 将在之后的部分讲到, 这里假 设训练集中的子类的标签已经被给定, 这样我们就可以先使用它们去学习子类的模型。在 使用混合模型之后, 我们就可以将检测任务转换为找到一个最优估计 L = {l1…,lN} 使得下 面这个能量函数 E(L) 获得最大值 :
下面具体介绍行人表象特征模型和行人空间相互关系模型。
首先介绍行人表象特征模型 : 基于表象特征的行人检测经常是使用一些底层视觉 的描述子, 例如 HOG(梯度直方图特征) , SIFT(尺度无关特征) , LBP(局部二元模式) 等, 然 后将这些特征放入一个分类器中训练出一个模型。当行人之间有严重遮挡的时候, 这种方 法就不足够鲁棒。 为了解决这种遮挡问题, 本发明使用了两层的特征描述方法。 第一部分是 可形变的部件模型分块模型, 它是用来一个可变形的模板去表示部分和整体的表象特征, 每一部分的检测结果汇总为最终的分数, 这种方法对一般的行人检测任务很合适, 但是当 一个行人只有部分可见的时候会存在很多问题, 因为行人被遮挡的部分分数会很低并最终 导致最终分数也会比较低, 造成漏检。为了克服这种缺点, 本发明又使用了第二层描述, 即 每个部件的分数作为表象的第二级描述, 表象特征参数 θa 则用来表示每个组件的权重。 例如当一个子类中行人只有上半身的时候, 那么相应的上半身的权重也会很大, 而其它部 分权重很降低。利用混合模型和对每一个子类的分块权重, 本发明可以在不同的存在遮挡 的情况下对行人进行建模。 这种对行人的描述方式的另外一个优势就是它的向量的维数要 比那些底层的描述子低, 从而参数的学习时候更有效率。
对于一个给定的子类标签 li, 我们可以将行人表象特征模型简化为下面这个线性 的方程 :
其中是 的分块分数向量, 是表象特征模型中第 li 个子类标签的参数向 被直接设置为 0量, 同时在本发明中它表示不同分块的权重。背景被看做特殊的一类, 即 向量。
行人空间相互关系模型 : 相互关系模型是用来描述不同行人之间的空间共生关系 的。给定一个子类标签 li 和子类标签 lj, 相互关系模型可以简化为如下的一个线性方程 :
其中表示子类标签 li 和子类标签 lj 之间的相互关系模型参数, f(bi,bj) 用来描述检测框 bi 和检测框 bj 之间的空间相互关系, f(bi,bj) 应该足够灵活使得根据空间相互 关系模型对那些错误的检测进行抑制, 同时提高那些表象特征分数不高但却是正确的检测 结果的分数。定义 (xi,yi), (xj,yj) 为检测框 bi 和检测框 bj 的中心, 同时 si 和 sj 为 bi 和 bj 的范围大小, 则定义 :
f(bi,bj) = [1,dx,dy,ds,dx2,dy2,ds2]T (8)
其中 1 被用来作为一个偏差项, 方程的左边为二次项核。 dx, dy, dz 分别表示 xi-xj, yi-yj 和 si-sj。同表象特征模型一样, 在模型的中涉及到背景的相互关系都设置为 0。把公 式 (6) 、 公式 (7) 和公式 (8) 带入到公式 (5) 就可以得到能量目标函数的具体形式。下面能量目标函数介绍优化过程。 优化分为两个部分 : 对于模型的学习, 需要利用 弱标记数据对行人表象特征模型 θa 和行人空间相互关系模型 θs 进行最佳参数估计 ; 对于 模型的推断, 需要最大化能量函数以找到最佳的估计。
对于一个实际图像检测系统, 首先需要根据训练样本来训练模型的参数 ; 然后对 于新输入的待检测图像, 根据公式 (5) 中的目标函数及其训练出来的参数, 最大化该目标函 数, 推断出最终的检测结果。但是由于训练参数的过程需要依赖推断算法, 因此我们接下 来, 首先给出推断部分的扩展移动算法 (Expansion Move algorithm) , 然后叙述本发明用 于判别参数学习的隐变量排序支持向量机 (Latent Rank-SVM) 算法, 以能够训练得到公式 (5) 中的模型参数。在训练得到公式 (5) 的模型参数后, 再结合扩展移动算法对新输入的待 检测图像进行多个行人检测, 输出多个行人检测结果。
对于推断部分, 给定一个图像 I, 则在图像中对行人的可能位置估计是指数级的。 5 例如, 我们可能会利用 10 个检测框对一个给定图像进行检测, 最终得到的可能的估计位置 是 由于不可能对每一个估计都去进行评估从而得到一个大概的结果, 于是本发明改进 图割算法中的扩展移动算法, 我们给出了一种推断过程如算法 1 :
①、 输入 : 图像 I, 模型 Fθ, 初始估计 L = {l1,l2,… ,lN}, 初始能量值 E(L) = 0 ;
②、 令 ③、 如果 则其中 L′是 L 的 κ- 扩展, κ ∈ [1,Ψ] ; 并返回步骤②, 否则输出 L。在上述算法中 κ- 扩展用于选择一个检测框 bj(lj ≠ κ), 设置其标签为 κ 且不 改变其它检测框的标签 ; Ψ 是扩展后的子类标签数量。在每一次循环中, 都会有新的行人 检测结果被加进来或者已经检测到的行人改变了它的子类标签。由于 E(L) 有上限且每一 次循环当中都会增加, 所以这个算法最终一定会结束, 而不会陷入死循环。 步骤②即为在每 一次扩展运动中通过评估每一个可能的检测框从而得到最佳的估计。非极大值抑制算法 (NMS) 可以看作这个算法过程当中的一个特殊情况, 因为非极大值抑制算法 (NMS) 也是在序 列地选择新的行人, 只不过一旦选定一个行人检测结果就不会对其再进行改变。但是在上 述算法当中, 对于每一个已经选定的检测框, 其标签仍然可以被改变。
为了加速推断过程, 设置表象纹理和相互关系中背景的类分数都为 0。因为很多 的 bi 都为背景, 这样可以省下非常多的计算时间。另外一项加速办法是对于那些表象纹理 分数很低的检测框一律不考虑在内, 其分数的阈值的选定是根据 probably approximately admissible(PAA) 计算得到。
为了表示每一个检测框的可信度, 给每一个检测框 bi 的定义一个分数为 :
其中 是和 L 除了设置其他都和 L 一样的检测结果, r(bi) 用来衡量每个 bi对于整体能量函数问题结果的贡献 , 模型中我们就把这个贡献大小当做检测框的置信度。
下面介绍参数学习过程。我们利用标定有行人框的正样本图像, 和一部分不含有 人的负样本组成的训练样本图像组成的训练集来得到优化模型的参数。 模型中的参数包括 三个部分 : 表象特征模型参数 θa = {θai|i = 1,2,… ,K}, 空间相互关系模型参数 θs = {θsij|i,j = 1,2,…,K} 和对于一个标定好的行人训练数据集 {I1,i2,…,IM} 的隐变量类型 的子类标签 Lm = {li| = 1,…,Nm}。 不同于其它的普通问题, 在训练当中有两个需要注意的问题 : (1) 、 需要训练的数据非常庞大 ; (2) 、 不能直接得到子类标签 L, 只能获取到二值化的 标签 TM。
为了将公式 (5) 代入线性方程, 需要对特征描述中加入一些附加维度, 原始的表象 特征
被扩展为
其中为 的第 j 个部分的分数, F 是表象特征的长度, 在本发明中也是分块的个数。原始的空间相互关系特征 f(bi,bj) 被扩展为 :
这 里 使 用 D 来 表 示 原 始 空 间 相 互 关 系 特 征 的 长 度, 则 将表象特征参数整合为一个向量 同样空间特征参数整合为一个向量
则公式 (5) 所示的能量目标函数改写为 :
这里使用 ω 来表示Φ(I,L) 表示特征分布假设已经知道子类标签 L, 至于根据二值化的标签 TM 对子类标签 L 的估计方法稍后就讲到。 对于一个给定的训练集 I 以及其标定好的子类标签 L, 需要得到的目标就是寻找到 ω 使得 T T E(L) = w Φ(I,L) 比任何其它估计的能量 E(Hi) = w Φ(I,Hi) 更大。假设训练集中训练集 合中训练图片的个数是 M, 则目标方程可以被定义为 :
wTΦ(Im,Lm)-wTΦ(Im,Hmi) ≥ l(Lm,Hmi)-ξmi (15) T
其中 ω ω 为正则化正则项, ξmi 用来对错误的估计进行惩罚, C 是惩罚因子, Im 是 训练集的第 m 个图像, Lm 是训练集第 m 个图像的标签, Nm 是第 m 个图像的所有可能的结果, Hmi 是第 m 个图像的所有可能结果的第 i 个。l(Lm,Hmi) 是衡量 Lm 和 Hmi 之间的损失函数。其 中 l(Lm,Hmi) = 1 表示有一个负样本而非正样本, 否则 l(Lm,Hmi) = 0。
上述的这些优化问题是一个 learning to rank (学习排列) 问题, 且可以转化成一 个线性的 SVM (支持向量机) , 因为我们可以当将 Δ(Im,Lm,Hmi) = Φ(Im,Lm)-Φ(Im,Hmi) 作为 正样本, 而当 l(Lm,Hmi) = 1 将 -Δ(Im,Lm,Hmi) 作为负样本。这里真正面对的困难是由于 Hmi
是指数级的, 所以有大量的数据需要处理。 为了减小这些数据的规模, 这里使用一种困难数 据挖掘的方法来进行优化, 细节如下所示 :
①、 输入 : 训练集合 IM 和标定好的子类标签 LM。
②、 对所有的图片, 对 LM 使用随机标签操作获得新的负样本估计 HM 计算初始缓存 集 P = {Δ(Im,Lm,Hm),m = 1,… ,M}
③、 以 ω 为参数利用线性 SVM 训练模型 Q, 使用缓存集 P 为正样本, -P 为负样本。
④、 根据模型 Q 在缓存集 P 中找到一个简单的样本集 A, 然后将 A 从 P 中去除 P:P = P\A
⑤、 对于 m ∈ [1,M], 从 m = 1 依次循环至 m = M, 依照算法 1, 根据模型 Q 计算新的 估计 H′ m, 然后当 Δ(Im,Lm,H′ m) 为一个困难样本时, 计算 P = P ∪ Δ(Im,Lm,H′ m)
⑥、 如果不收敛, 则重复步骤③
⑦、 输出模型 F 以及其参数 ω
在上述算法当中, 只是用了数据集的一部分并保存在了缓存集 P 中。这里样本被 分为困难样本和简单样本, 如果 Δ(Im,Lm,Hmi) > l(Lm,Hmi), 则 Δ(Im,Lm,Hm) 为简单样本, 否 则为困难样本。如果所有的困难样本都被包含在了 P 当中, 则运算结束。这个算法实际上 就是在一个数量较少的困难样本上进行训练。
在实际应用当中, 我们只能获取是否是行人的标签 ti 而非子类标签 li, 所以我们 需要根据参数模型同时估计子类的隐变量。原始的优化问题扩展为以下问题 :
wTΦ(Im,Lm)-wTΦ(Im,Hmi) ≥ l(Lm,Hmi)-ξmi (17)
对比公式 (14) , 上面的方程多了隐变量 li, 为了能够根据参数模型同时学习隐变 量, 本发明是使用了一个类似于隐变量支持向量机的, 叫做 “坐标下降” 的方法, 其算法细节 如下所示 :
①、 输入训练集 IM 和已经标定好的二值化标签 TM, 子类数量 K(一般 K 定义为 3) 。
②、 将训练集中的标定行人放入 K 个子类中, 并产生初始的估计 LM。
③、 利用困难数据挖掘算法, 图像数据集 IM 和估计 LM 训练一个 Rank-SVM, 得到一 个模型 Q ;
④、 利用扩展移动算法, 模型 Q 在训练集中估计新的子类标签和标定好的行人, 获 得新的估计 LM ;
⑤、 如果程序不收敛, 则返回步骤③
⑥、 输出模型 Q 和参数 ω
我们利用 K 均值的方法在初始的标定好的行人中产生一个初始的估计, 然后通过 困难数据挖掘, 利用这个估计在 Rank-SVM(排序支持向量机) 中训练出一个模型 Q。模型训 练好之后, 在训练集中新的子类标签也会被估计出来从而更新这个模型。