[人体图像相关技术] -(三)行人检测传统方案介绍

我公司的科室开始在公众号上规划一些对外的技术文章了,包括实战项目、模型优化、端侧部署和一些深度学习任务基础知识,而我负责人体图象相关技术这一系列文章。
文章在同步发布至公众号和博客,顺带做一波宣传。有兴趣的还可以扫码加入我们的群。
(文章有写的不好的地方请见谅,另外有啥错误的地方也请大家帮忙指出。)

微信公众号:AI炼丹术

行人检测传统方案介绍

一、基于运动检测的算法

背景差分法

背景差分法的基本原理就是先对视频做背景建模,利用获取到的背景参考与当前图像序列的当前帧做差分。计算出背景图像像素差异,设定阈值将运动目标和背景进行分割。

而利用这种方法做目标检测的主要流程:通过背景建模在视频中提取运动目标,再通过分类器判断目标是否为人。

背景建模经典方法有:单高斯、帧间差、混合高斯、VIBE、CodeBook……由于是传统方法,因此各种方法都有各自的特点,即有各自的优势。

背景建模的主要优势:

  • 算法简单,性能较好,能达到实时检测的效果。
  • 对视频图像敏感,目标检出率高。

主要问题:

  • 需要摄像头固定,且易受环境影响,出现较多噪声干扰。
  • 只能检测运动目标。

常用方法源码合集 Bgslibrary:https://github.com/andrewssobral/bgslibrary

下图为背景差分法的效果,图源参考:https://zhuanlan.zhihu.com/p/42944850
在这里插入图片描述

(1)单高斯模型 - 算法介绍
引用自:https://zhuanlan.zhihu.com/p/30483076

单高斯模型

当样本数据 X 是一维数据(Univariate)时,高斯分布遵从下方概率密度函数(Probability Density Function):
P ( x ∣ θ ) = 1 2 π σ 2 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) P(x|\theta) = \frac{1}{\sqrt{2\pi\sigma^{2}}}\exp(-\frac{(x-\mu)^{2}}{2\sigma^{2}}) P(xθ)=2πσ2 1exp(2σ2(xμ)2)
其中 为数据均值 μ(期望),σ 为数据标准差(Standard deviation)。

当样本数据 X 是多维数据(Multivariate)时,高斯分布遵从下方概率密度函数:
P ( x ∣ θ ) = 1 ( 2 π ) D 2 ∣ Σ ∣ 1 2 exp ⁡ ( − ( x − μ ) T Σ − 1 ( x − μ ) 2 ) P(x|\theta) = \frac{1}{(2\pi)^{\frac{D}{2}}|\Sigma|^{\frac{1}{2}}}\exp(-\frac{(x-\mu)^{T}\Sigma^{-1}(x-\mu)}{2}) P(xθ)=2π2DΣ211exp(2(xμ)TΣ1(xμ))
其中,μ 为数据均值(期望), Σ 为协方差(Covariance),D 为数据维度。

(2)混合高斯模型 - 算法介绍
引用自:https://zhuanlan.zhihu.com/p/30483076

高斯混合模型

高斯混合模型可以看作是由 K 个单高斯模型组合而成的模型,这 K 个子模型是混合模型的隐变量(Hidden variable)。一般来说,一个混合模型可以使用任何概率分布,这里使用高斯混合模型是因为高斯分布具备很好的数学性质以及良好的计算性能。

举个不是特别稳妥的例子,比如我们现在有一组狗的样本数据,不同种类的狗,体型、颜色、长相各不相同,但都属于狗这个种类,此时单高斯模型可能不能很好的来描述这个分布,因为样本数据分布并不是一个单一的椭圆,所以用混合高斯分布可以更好的描述这个问题,如下图所示:

img
图中每个点都由 K 个子模型中的某一个生成

首先定义如下信息:

  • x 1 x_1 x1​ 表示第 j j j个观测数据, j = 1 , 2 , … , N j=1,2,…,N j=1,2,,N
  • K K K​是混合模型中子高斯模型的数量, k = 1 , 2 , … , K k=1,2,…,K k=1,2,,K
  • α k α_k αk是观测数据属于第 个 k k k子模型的概率, α k ≤ 0 α_k\le 0 αk0
  • ϕ ( x ∣ θ k ) \phi(x|\theta_k) ϕ(xθk)​是第 k k k​ 个子模型的高斯分布密度函数, θ k = ( μ k , σ k 2 ) \theta_k = (\mu_k,\sigma^2_k) θk=(μk,σk2) 。其展开形式与上面介绍的单高斯模型相同
  • γ j k \gamma_{jk} γjk​​表示第 j j j个观测数据属于第 k k k个子模型的概率

高斯混合模型的概率分布为:
P ( x ∣ θ ) = ∑ k = 1 K α k ϕ ( x ∣ θ k ) P(x|\theta) = \sum^{K}_{k=1}{\alpha_k\phi(x|\theta_k)} P(xθ)=k=1Kαkϕ(xθk)
对于这个模型而言,参数 θ = ( μ k   , σ k   , σ k   ) \theta = (\mu^{~}_k,\sigma^{~}_k,\sigma^{~}_k) θ=(μk ,σk ,σk )​​​ ,也就是每个子模型的期望、方差(或协方差)、在混合模型中发生的概率。

二、基于机器学习的算法

基于HOG特征提取 + SVM分类器的行人检测

HOG(Histogram of Oriented Gradient)特征是基于本地像素块进行特征直方图提取的一种算法,全称为方向梯度直方图。在2005年CVPR会议上发表,并在当时行人检测领域上取得了极大的成功。

SVM(支持向量机)的原理是找到一个超平面使得超平面离最近的样本点距离最大化。以此将所有样本点划分为不同类别。也就是起到一个分类作用。

训练流程:
  • 准备行人和无行人的样本集合(即正样本集和负样本集);这些数据要作为分类器的训练样本。
  • 将数据集进行预处理(归一化、缩放至同样尺寸),并利用HOG算法提取所有数据(正负样本)的特征。
  • 设计一个SVM分类器,对所有数据的特征进行二分类训练,使分类器对HOG特征具备判断是行人和非行人的能力。
检测流程:
  • 通过图像金字塔和滑动窗口对整张图像进行遍历, 得到候选目标。
  • 在遍历的过程中,提取图像的HOG特征,并进入SVM分类器判断是否是人。
  • 由于滑动窗口会出现许多重复目标,通过NMS对重复的目标进行过滤。

(下图引用自由python实现的HOG+SVM行人检测源码仓库:https://github.com/vinay0410/Pedestrian_Detection
在这里插入图片描述

HOG特征提取 - 算法介绍

在这里插入图片描述

引用原文链接:https://blog.csdn.net/carson2005/article/details/7782726

Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。例如,对于64128的图像而言,每22的单元(1616的像素)构成一个块,每个块内有49=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64128的图片,总共有367*15=3780个特征。

在行人检测过程中,除了上面提到的HOG特征提取过程,还包括彩图转灰度,亮度校正等步骤。总结一下,在行人检测中,HOG特征计算的步骤:

(1)将输入的彩图转换为灰度图;

(2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化); 目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

(3)计算梯度;主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。

(4)将梯度投影到单元的梯度方向;目的是为局部图像区域提供一个编码,

(5)将所有单元格在块上进行归一化;归一化能够更进一步对光照、阴影和边缘进行压缩,通常,每个单元格由多个不同的块共享,但它的归一化是基于不同块的,所以计算结果也不一样。因此,一个单元格的特征会以不同的结果多次出现在最后的向量中。我们将归一化之后的块描述符就称之为HOG描述符。

(6)收集得到检测空间所有块的HOG特征;该步骤就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用。

三、传统方案相关问题分析

由上述两个小节介绍,我们了解到了传统方案主要由基于运动检测的算法和基于机器学习的方法,通过学习了解,我们可以看出这两个方法有它们的弊端。

1. 基于运动检测算法的问题

上述讲述到的背景差分法,是通过背景建模的方法提取视频中的运动目标,所以我们不难看出,这里需要固定住视频视角,才能得到一个较好的背景;同时,要保证视频质量完好、视频环境&质量变化小(光线、颜色变化)。所以这就对我们的环境和设备有很大的要求和不确定因素。

2. 基于机器学习算法的问题

  • 计算量大/速度慢;通过hog+svm的实现流程,我们可以看出需要对整张图像进行图像金字塔和滑动窗口,这里会因为滑动的步伐小和图像的太大,使得整体算法计算量很大;

  • 手工特征的不足;手工特征会有自己提取特征的特点,如边缘检测提取的就是边缘信息;端点检测提取的就是图像中端点信息;如果我们要判断一个人的特征,可能会根据这个人的肤色、身体轮廓、姿态等等多种特征进行结合。这是手工特征做不到的。

  • 行人数据的多样性;和第二点一样,机器学习的方法可能可以提取到大部分人的相同特征,但是无法覆盖所有人的特征。例如每个人的穿着、外观、视角、姿态在图像上的呈现是可能不一样的,手工设计的特征可能需要根据不同人的特点设计特征,会更大程度增加计算量,而且很难全面覆盖。

四、 小结

上面列举的是行人检测的传统方案,基于运动检测和基于机器学习两种方案中一些具有代表性的算法。当然还有很多其他的传统算法,例如基于运动检测的方案中,还有一些比较经典的算法,如光流法、帧间差分法;基于机器学习的方案中,也有通过其他手工特征和分类器进行的行人检测,如sifi特征或者haar特征&adaboost分类器。这些都是许许多多研究者不断钻研积累的知识。由于相关内容还有很多,这里就不一一列举了,有兴趣的读者可以自行查阅相关知识。

下一篇文章,小编也会介绍目前比较流行且成熟的基于深度学习的行人检测方案,也会解决传统方案所带来的那些问题。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值