行人检测(总结)

2024-05-15 07:32
文章标签 总结 检测 行人

本文主要是介绍行人检测(总结),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看了将近半年的行人检测的资料,最近开题了,我也趁着这个机会把脑袋里的东西总结一下:

先说下常用的数据库:最早的是MIT,这个库比较简单,行人图片背景简单,只有正面和背面。在2005年以前流行,2005年后随着HOG的提出,MIT库上的准确率已经达到100%,所以INRIA成为标准数据库中的大家通用的数据库。这个库背景复杂,人的姿势也比较多,还有些光照等环境的影响。另外一个关于车辆内行人的图像库是Daimler,不过我总下载不下来。。。

现在常用的方法分这么几类—
行人检测的目标是得到每个行人在视频中每帧的空间位置。根据对行人描述(表达)方法的不同,行人检测算法可以基本分为三类:基于形状模板匹配的方法和基于表观特征描述的方法,以及将形状和纹理结合的方法。根据对人体是以一个整体进行检测还是分部件进行检测,又可以将行人检测算法分为基于部件的检测方法和基于整体的检测方法。下面针对国际上常用的行人检测方法进行阐述。
(1)基于形状模板匹配的检测方法
形状是人体明显的一个特征,例如头肩部的“Ω”形、躯干部分的竖直边缘轮廓,可以利用形状之间的相似性来判断图像中是否有行人的存在。Gavrila[3-5]使用一系列人体形状来表示人体形状,然后在测试图像中提取边缘,基于Chamfer距离来评测图像与模板之间的相似性。LinZhe[6]等将人体分为头肩躯干、大腿和小腿三个部件,然后按照从上倒下使用Gavrila提出的方法分层次进行匹配,最后和基于背景建模得到的前景图像进行形状匹配,在检测行人的同时将其大致形状从背景中分割出来。
基于形状匹配方法的优点是直接描述人体的形状,比较直观,检测完成以后可以根据模板的形状和姿势,判断检测到行人的姿势并切割出行人的大致轮廓。但由于其在线检测时很难获得待匹配图像中目标的轮廓,且其利用样本来描述类别的形状,导致其一些显著的缺点:离线训练时的人体外围轮廓需手工标定,边缘提取受背景的影响,没有采取鉴别性学习等
(2)基于表观特征向量的检测方法
基于表观特征向量的检测方法使用能够描述目标表观特性的特征向量表示目标模式和非目标模式,然后使用基于统计学习得到的分类器根据特征向量做出判决。
特征提取将原始的图像灰度(彩色)信息映射到特征空间,其目的是减小待分类类别的类内变化和增大类间变化,理想的特征是不同类别的分布没有交叠,完全可分。特征提取的方法有两种:基于整体特征向量的方法和基于关键点提取的方法。
在基于整体特征向量的方法中,较早用于行人检测的是Haar小波,Papageorgiou[7]等使用Haar小波变化系数描述行人,然后使用线性SVM分类器进行判决,建立了一个基于统计学习和表观特征相结合的行人检测系统。之后,为了避免边缘提取误差,很多方法直接使用梯度信息来表示人体的形状,提高的鲁棒性。例如局部边缘方向直方图EOH[8](Local Edge Orientation Histograms)、Edgelet[9]和Shapelet[10]等,这其中以Dalal[1]等人提出的HOG(Histograms of Oriented Gradients)的工作影响最大。HOG特征成为最近一个主流使用的特征。在找寻更好描述行人特征的同时,另一个发展的趋势的特征融合。实验证明:融合多种能够描述人不同特点的特征,能够获得比仅利用单一特征类型时的检测性能。
基于感兴趣区域的人体描述方法,首先使用感兴趣点(或关键点)提取算法,提取关键区域,然后使用这些感兴趣区域内提取到的特征向量,描述相关的区域,然后使用关键区域的空间位置关系描述人体。由于衣服多样性和人体姿势变化等因素的影响,人体上的感兴趣区域提取不够稳定,限制了该方法的性能。
(3)基于部件检测的方法
Felzenszwalb[11]等人根据人体的关节特性,将人体的分为十个部件,每个部位都有自己的表观特征,部位之间的几何关系允许一定的变化,建立了一个运行形变的基于部件的检测模型。之后对部件的数量进行了改进,以及检测结果的一些特征融合。
基于部件检测的方法在一定程度上可以客服局部遮挡带来的问题,,但是由于这种方法都是人工将人体划分部件,而且要求训练数据中标定每一个部件的位置,造成了人力资源的消耗和性能的不确定性。因此,现在在使用这一方法时,经常与HOG等特征结合使用,以提高性能。

现在主要的检测方法还是以HOG特征为主,我把我看过的几篇论文放在这里,需要的朋友们可以点击下载:
最初提出HOG特征的论文:hog_cvpr2005_ 
这篇文章是研究行人检测的必看文章

Dalal(上面那篇文章的作者)的博士论文:Dalal-phd06(较大,链接在俺的机子上,可能不能下载) 对大家进一步了解HOG会有很大帮助

Fast Hog,对最初的HOG特征进行了改进:Zhu_Fast Human Detection Using a Cascade of Histograms of Oriented Gradients 
这篇论文在原文的基础上加入了积分图,cascade结构。我没有把这篇论文实现,因为cascade中的每一级所使用的弱分类器是svm,训练时间会很长——如文中所述的“a few days”

另外还有Edgelet特征貌似也不错。不过,我没研究过。不做评论。

再链接两篇中国人发的关于行人检测的cvpr:Granularity-tunable Gradients Partition (GGP) Descriptors for Human Detection(翻过,没细研究)

cvpr09-0515-Adaptive Contour Features in Oriented Granular Space for Human Detection(仔细研读了:提出一种新的特征,但是有些特别重要的地方没讲清楚)

现在在INRIA库上的最好结果是:Maji S., Berg A C, Malik J. Classification using Intersection Kernel Support Vector Machine is Efficient. 是对SVM进行了改进。

上面主要是针对图像库来检测的。不能达到实时,要做到实时是不可能的。下面是我草拟的一个行人检测的流程:

离线训练过程:
1.输入为标准图像库中的图像,对于正样本,直接提取特征;对于负样本,多尺度遍历整幅图像,进行特征提取。提取Harr,LBP,HOG三种特征并保存为积分图形式。
2.对于cascade的每一级进行如下操作:用Adaboost进行特征选择,选出最好的特征。
在前面的几级用Harr和LBP这两种计算较快的特征,后几级用HOG。
3.进行级数调整,直到达到要求的检测率和错误率。

检测过程: 1.输入图像,多尺度遍历整幅图像,进行特征提取:提取Harr,LBP,HOG三种特征并保存为积分图形式。 2.将所有子窗口输入训练得到的模型中,如下图,经cascade分类器后,根据检测结果即可标定行人区域,通过一些后处理(例如,合并临近的窗口),就可以对行人进行定位,达到检测的目的。

 

这篇关于行人检测(总结)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991191

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert