行人监测系统数据处理

561 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情 

1. 行人监测系统数据处理

随着大数据的到来,各个领域都在专注于从数据中找到有价值的东西,以便指导接下来的决策。而深度学习尤其具有代表性,是以数据为驱动的一个方向。数据对于算法的重要性不言而喻。实践中经常表明,一个很普通的算法搭配好的训练集,将会表现出非常好的结果,甚至好过一个非常好的算法搭配一个糟糕的数据集。所以,在开发本检测系统时,对于训练模型之前的数据准备模块,做了缜密的设计和实现。

1.1 行人监测系统数据处理

车辆与行人数据集往往背景复杂,并且一张图片上车辆与行人数目可能很多,因此数据集的标注工作量更大,成本更高。随着自动驾驶的关注度越来越高,出现了一些交通领域比较优秀的数据集,或者一些数据集采集于驾驶场景,稍加修改可以转变成车辆与行人数据集。常见的车辆或行人数据集有:

  • MIT:该数据集是公开较早的行人数据集,共 924 张分辨率为 64X128 行人图片,只包含正面和背面两个视角,未区分训练集和测试集。

  • INRIA:约 2500 张较复杂的多姿态行人数据集。其中 1832 张训练集:正样本 614 张,负样本 1218 张;641 张测试集:正样本 188 张,负样本 453 张。

  • KITTI:采集于城市白天驾驶场景,分辨率为 1242X375,包含车辆、行人、自行车的标注。训练集 7481 张,测试集 7518 张。

  • UIUC:通常用于验证侧面车辆检测器的效果,所有的图像都是灰度图,包含了训练集,单尺度和多尺度测试集。1050 张训练集:正样本 550 张,负样本 500 张。单尺度测试集:170 张灰度图像,总共包含了 200 个车辆;多尺度测试集:108 张灰度图像,包含多尺度车辆总共 139 个。

  • Caltech:Caltech 是一个规模很大的行人数据集,采集于城市白天路况驾驶场景,路况复杂,在城市道路中,采用车载摄像头拍摄了 10 小时,视频的分辨率为 640X480,帧率为 30Hz,并在其中提取了 250000 帧,时长大约 137 分钟的视频。提取视频被划分为 11 个视频段,其中 Set0-Set5 用于训练,Set6-Set10 用于测试。由于拍摄过程中,目标与摄像头距离的差别,数据集中的目标被分为三个尺度:

    • 大尺度目标,与摄像头距离较近,约占总数的 15%;
    • 中等尺度目标,与摄像头距离适中,约占总数的 69%;
    • 小尺度,与摄像头距离较远,约占总数的 16%。

1.2 数据的筛选

样本数据的质量好坏直接影响到网络的学习,同时也将影响到网络模型的识别及泛化性能的好坏。因此,在样本数量有限的条件下,需要选取与建立充分表达目标物体深层特征的学习样本数据库。在网络的学习过程中,网络需要数量充足、样本特征丰富的训练样本数据库;在训练迭代过程中,网络需要另一组不同的测试样本数据的输入,以测试网络识别性能效果,实时地测试网络的识别精确率。

样本文基于车载视频图像采集系统采集到大量的样本图像,采集的图像像素大小均为 640X480。为了减少不必要的场景区域( 例如,天空区域)。因此,首先对原始图像进行裁剪,将其裁剪为 640X260 的像素大小,该区域包含了训练样本所需要的感兴趣场景信息( 道路、边界、车辆、车道线等)。

为减小或消除待识别目标因距离摄像机远近不同而造成的分辨率的差异,本文采用了“倒金字塔”预处理算法获得网络需要的尺寸归一化输入样本,图像大小为 32X32。算法的具体做法如下:

1. 采集测量一系列连续帧的实景图像的两组数据:距摄像机距离远近不同的道路宽度值,以及连续帧图像中同一目标车辆在不同距离远近的纵向高度值。将两组数据用图像像素值来代替,不同的像素行用向量 x 表示。

2. 以像素高度为 0~32 的区域图像中目标的像素高度 ho 与宽度 wo 作为参照基准以参照基准值作除数分别除以其他像素行的目标高度值和宽度值,得到结果分别记为 y、z;对三组数据 x、y、z 分别进行拟合,求得两条拟合曲线,用以下公式表示为:

在这里插入图片描述

在这里插入图片描述

式中:y 代表目标的宽度比;z 代表目标的高度比;a1、a2 分别为两条曲线的斜率;b1、b2 分别为曲线截距。经计算得出,本文选取 a1=0.0312,a2=0.0360,b1=0.8339,b2=1.0590。 利用公式裁剪图像,如下图所示,高度均为 32 像素的矩形图像,呈倒金字塔状。这样的操作保证了相似的目标具有相似的像素高宽值。

在这里插入图片描述

1.3 数据的标注

检测系统对于训练集的要求是:标注每一帧图像上所有的目标物体所对应的位置和类别。经过调研,开源图像标注工具 LabelImg 是一个非常不错的选择。

LabelImg 是一个用 Python 和 Qt 开发的,全图形界面的图像标注工具,可以将检测所需要的标注信息直接转化成 XML 文件,并保存起来,保存的格式和 PASCAL VOC、ImageNet 的格式是相同的。基本流程如下图所示:

在这里插入图片描述

首先,Linux 下安装 PyQt,要求 Python 2.6 以上。以 Ubuntu14.04 为例,接下来采用编译源码的方式安装 LabelImg:

sudo apt-get install pyqt4-dev-tools

sudo pip install lxml

sudo git 
clone https://github.com/tzutation/labelImg.git

make all

./labelImg.py

界面如下:

在这里插入图片描述

2 行人监测的网络构建

行人特征是行人区别于其他对象的本质属性,是检测行人时的评判依据。人眼获取外界信息时主要关注目标物体关键特征,人类眼睛对图像特征的读取也是顺序进行的。行人检测的关键步骤就是提取出输入数据的行人特征,对行人特征进行识别,从而实现行人检测。深度学习利用那些拥有多个处理层的神经网络来学习具有多层次抽象的数据的表示。相比于人工设计的行人特征,卷积神经网络自动提取的行人特征的表达能力更强,可以更好的描述行人。