特定场景下的行人检测方法
技术领域
本发明涉及特定场景行人检测的方法,主要基于深度学习的行人检测方法。
背景技术
计算机视觉涉及了图像处理、机器学习、模式识别等多个学科,最终目的是模拟人的视觉能力,可以完成各种识别任务。在计算机视觉这个大的研究领域下,又有一个备受学术界和工业界关注的一个子方向——行人检测。行人检测就是计算机对于给定的图像和视频,判断出其中是否有行人,如果有还需要给出行人的具体位置。行人检测是行人跟踪,行为分析,步态分析,行人身份识别等研究的基础和前提,一个好的行人检测算法能够为后者提供有力的支持和保障。行人检测有视频监控、车辆辅助驾驶、智能机器人等应用场景。
现有的传统行人检测方法大致有三种,第一种为基于全局特征的方法,例如:Harr小波特征、HOG特征、Edgelet特征、Shapelet特征、轮廓模板特征、运动特征等;第二种为基于人体部件的方法;第三种为立体视觉的方法。
以上所述方法都需要手动提取特征,尽管有些特征已经取得不错的效果,但是整体从精度和速度来衡量,效果还是没有深度学习做的行人检测效果好。本发明和传统方法有很大的差异,不需要手动提取特征,而是用深度卷积神经网络来提取特征,在这基础上再做回归和分类。对比传统方法,本发明在速度和精度上有了很大的提高,鲁棒性更强,泛化能力更强。
发明内容
本发明提供特定场景行人检测的方法,用于视频监控环境的行人检测,减少财产损失,适用范围更广,稳定性更高,使用更加方便。
为了达到上述目的,本发明提供一种行人检测方法,该行人检测方法包含以下步骤:
步骤1:选择数据集。
传统的机器学习假设训练数据与测试数据服从相同的数据分布。然而,这种同分布假设不容易满足。训练数据可能会过期,这往往需要我们去重新标注大量的训练数据以满足我们训练的需要,但标注新数据是非常昂贵的,需要大量的人力与物力。从另外一个角度上看,如果我们有了大量的、在不同分布下的训练数据,完全丢弃这些数据也是非常浪费的。
选择数据集非常重要,对之后检测的结果有很大的影响。根据测试集的行人大小,光线强度,摄像机角度等信息来选择训练集。使训练集(源域)尽量“靠近”测试集(目标域),以这种方式选择训练集有以下两点原因,根据我们后期的检测方法,以上做法可以减少重复计算,同时可以提高检测模型的精度。这种选择数据的方法的本质就是基于实例的迁移学习,基于实例的迁移学习只能发生在源数据与辅助数据非常相近的情况下。但是,当源数据和辅助数据差别比较大的时候,基于实例的迁移学习算法往往很难找到可以迁移的知识。
步骤2:构建生成对抗网络。
生成对抗网络启发自博弈论,包含一个生成模型和一个判别模型。生成模型捕捉样本数据的分布,判别模型是一个二分类器,判别输入是真实数据还是生成的样本。
步骤2.1:训练生成对抗模型的判别模型。
此时的判别模型只是一个粗分类,所以此时的效果并不会很好,需要人工的检查,这步是必须的,因为整个步骤2提供的样本标定信息要准确无误,否则会影响后面的检测网络的精度。用fasterrcnn在imagenet基础上微调一个通用的行人检测模型,基础网络用ZF网络,根据测试集的行人尺寸调整fasterrcnn里anchor的尺寸和宽长比,本来fasterrcnn做的多尺度的多目标检测,直接应用的到行人检测上,会有很多的无用计算,首先在特定场景下的行人检测,例如在监控摄像头下拍的行人的尺寸是个固定的范围,并不会有跳跃性的变化,此处就把基于fasterrcnn的多尺度搜索的尺度大小适当地变化,再结合行人自身的特点,行人的宽长比,行人的姿势等,调整搜索框的宽长比。当然这一步也涉及数据集的选择,方法和步骤1中的相似。训练出来的模型作为生成对抗模型的D(判别)模型。
步骤2.2:对图片样本做标定。
给生成对抗网络的生成式模型的输入给个噪声信号,生成模型回归出的boundingbox给判别模型来判别,也就是说生成模型回归出的行人坐标是经过判别模型认可的行人坐标,训练也是通过两个模型回归的差异只更新生成模型的参数。
步骤3:转换数据集格式。
通过步骤2已经有了正确的行人框了,标定好的数据集还不能直接放入R-FCN里训练,必须转换为相应的格式。
步骤4:训练R-FCN。
这里考虑到显存的问题,把原先R-FCN的resnet网络替换成VGG网络(不带全连接层),显存减少的同时,精度也有所下降,所以在VGG网络结构上做了一些修改,把一些ReLU函数替换成C.ReLU函数,加入了残差训练。具体步骤如下:
步骤4.1:修改VGG网络(附图)。
在CNN前期提取特征的时候,有对称(成对)的神经元,也就说有做同样计算的神经元,多余计算,C.ReLU减少多余计算,同时前期提取特征的速度是原来的2倍,且不影响精度。
深度卷积网络训练一直是个问题,对VGG的修改也引进了Batch Normalization,也就是“批规范化”,大量论文和实验证明用不用这个BN,简直就是两个世界,在每次SGD时,通过mini-batch来对相应的激励做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1.而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入,从而保证整个网络的容纳能力。
步骤4.2:预训练VGG网络。
使用imagenet训练VGG网络,使之有个初步分类的能力。
步骤4.3:用步骤3做出来的数据集微调r-fcn(VGG),微调的时候anchor的参数需要修改。训练出来一个初步可用的行人检测模型。
步骤4.4:对模型进行权值更新。对新获取的数据集也做步骤2和步骤3的工作,然后再微调网络,更新模型。
步骤5:特定场景的行人检测测试。输入图片,放入R-FCN中,做前向传输,得出检测结果。
附图说明
图1是本发明的流程图。
图2是生成对抗网络标注示意图。
图3是C.ReLU结构示意图。
图4是部分VGG改进网络(BN未画出)。
具体实施方式
提供一种行人检测方法,该行人检测方法包含以下步骤:
步骤1:选择数据集。
步骤2:构建生成对抗网络。
生成对抗网络启发自博弈论,包含一个生成模型和一个判别模型。生成模型捕捉样本数据的分布,判别模型是一个二分类器,判别输入是真实数据还是生成的样本。
步骤2.1:训练生成对抗模型的判别模型。
此时的判别模型只是一个粗分类,所以此时的效果并不会很好,需要人工的检查,这步是必须的,因为整个步骤2提供的样本标定信息要准确无误,否则会影响后面的检测网络的精度。用fasterrcnn在imagenet基础上微调一个通用的行人检测模型,基础网络用ZF网络,根据测试集的行人尺寸调整fasterrcnn里anchor的尺寸和宽长比,本来fasterrcnn做的多尺度的多目标检测,直接应用的到行人检测上,会有很多的无用计算,首先在特定场景下的行人检测,例如在监控摄像头下拍的行人的尺寸是个固定的范围,并不会有跳跃性的变化,此处就把基于fasterrcnn的多尺度搜索的尺度大小适当地变化,再结合行人自身的特点,行人的宽长比,行人的姿势等,调整搜索框的宽长比。当然这一步也涉及数据集的选择,方法和步骤1中的相似。训练出来的模型作为生成对抗模型的D(判别)模型。
步骤2.2:对图片样本做标定。
给生成对抗网络的生成式模型的输入给个噪声信号,生成模型回归出的boundingbox给判别模型来判别,也就是说生成模型回归出的行人坐标是经过判别模型认可的行人坐标,训练也是通过两个模型回归的差异只更新生成模型的参数。
步骤3:转换数据集格式。
通过步骤2已经有了正确的行人框了,标定好的数据集还不能直接放入R-FCN里训练,必须转换为相应的格式。
步骤4:训练R-FCN。
这里考虑到显存的问题,把原先R-FCN的resnet网络替换成VGG网络(不带全连接层),显存减少的同时,精度也有所下降,所以在VGG网络结构上做了一些修改,把一些ReLU函数替换成C.ReLU函数,加入了残差训练。具体步骤如下:
步骤4.1:修改VGG网络(附图)。
在CNN前期提取特征的时候,有对称(成对)的神经元,也就说有做同样计算的神经元,多余计算,C.ReLU减少多余计算,同时前期提取特征的速度是原来的2倍,且不影响精度。
深度卷积网络训练一直是个问题,对VGG的修改也引进了Batch Normalization,也就是“批规范化”,大量论文和实验证明用不用这个BN,简直就是两个世界,在每次SGD时,通过mini-batch来对相应的激励做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1.而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入,从而保证整个网络的容纳能力。
步骤4.2:预训练VGG网络。
使用imagenet训练VGG网络,使之有个初步分类的能力。
步骤4.3:用步骤3做出来的数据集微调r-fcn(VGG),微调的时候anchor的参数需要修改。训练出来一个初步可用的行人检测模型。
步骤4.4:对模型进行权值更新。对新获取的数据集也做步骤2和步骤3的工作,然后再微调网络,更新模型。
步骤5:特定场景的行人检测测试。输入图片,放入R-FCN中,做前向传输,得出检测结果。