携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
行人监测的网络构建
行人特征是行人区别于其他对象的本质属性,是检测行人时的评判依据。人眼获取外界信息时主要关注目标物体关键特征,人类眼睛对图像特征的读取也是顺序进行的。行人检测的关键步骤就是提取出输入数据的行人特征,对行人特征进行识别,从而实现行人检测。深度学习利用那些拥有多个处理层的神经网络来学习具有多层次抽象的数据的表示。相比于人工设计的行人特征,卷积神经网络自动提取的行人特征的表达能力更强,可以更好的描述行人。
1 Faster R-CNN 网络总体设计
本系统采用了 Faster R-CNN 作为行人检测算法。
如下图所示为算法的总体流程图,对于每一张输入的图片,首先会将其输入到 CNN 网络中进行特征提取来生成卷积特征图。然后由区域建议网络(RPN)采用生成的卷积特征图在图像上生成区域建议,同时输出目标性得分(只关心建议出来的是不是目标,不关心其目标的类别;用来对不好的预测结果进行过滤,为下一步做准备),然后进行边框回归(调整锚点以更好的与目标进行拟合)。这里使用 RPN 的原因在于其只使用卷积层的网络,非常简单,所以生成预测的速度特别的快,同时和基础的网络相比,也会加快训练的时间,这也是 Faster R-CNN 和前几代目标检测算法的改进之处。
在前面的区域建议网络生成区域建议之后,剩下的工作就是分别对这些边框建立类别并将其进行类别匹配,把这些边框进一步分配到想要的类别之中。老方法是将其中每个建议一个一个地裁剪出来,使用预先训练的网络,将提取出来的特征输到图像分类器中,但是对于运行所有建议来说无疑会导致运算速率降低,大大浪费运算的时间,降低运算效率。为了对这种方法进行改进,Faster R-CNN 引入了兴趣区域池化。
在兴趣区域池化之后就到了 Faster R-CNN 算法工作流程的最后一步,即通过 Faster R-CNN 网络进行类别匹配,它的作用在于为之前生成的区域目标类别建立分数。将每个建议分配到一个类中并生成背景类(背景类的意义是将不好的区域建议进行删除)。同时根据预测的类别进一步调整建议的边框。
Faster R-CNN 和 RPN 计算目标的方法在本质上来说几乎是一样的,但是其计算的目标对象是不一样的。对于 Faster R-CNN 来说,将釆用之前生成的建议以及真实的边框情况,经过计算得出其之间的 Lou 值,简而言之,就是计算出来最终建议出来的目标对象是不是其对应的类别。而 RPN 计算得出得分数则用来衡量建议出来的是不是目标对象,并不关心其类别。
Lou 值以 0.5 分作为其分界点。对于真实边框与建议,当其分数大于 0.5 分时,将会把这些边框分别分配给相应的类别。分数在 0.1 到 0.5 之间的则会被标为背景。当边框与类别进行匹配之后,就是 Faster R-CNN 的最后一个职能了——边框回归。顾名思义,就是计算目标和真实边框之间的偏移量,最后将精校好的目标进行输出。至此,Faster R-CNN 算法的总体架构基本就介绍完毕了。
区域卷积神经网络(R-CNN)目标检测框架抛弃了十分耗时的滑动窗口方法,而是改用 Selective Search 选择性搜索算法来生成图像的候选区域。基于 R-CNN 进行改进,演化出了 Faster R-CNN,它解决了 R-CNN 在训练和测试过程中的速度较慢、训练时所需空间大的问题。Faster R-CNN 的结构图如下图所示。
将由 Selective Search 算法提取到的区域通过5层卷积层共享计算,然后使用感兴趣区域(ROI pooling layer ROL)池化层对前面得到的区域的特征进行池化以取代 AlexNet 的第五层池化层特征,再把输出的特征送入到全连接层,再分别使用 softmax 分类器来分类以及 Bounding Box 回归摸型来识别,对两者的损失函数的和进行统一优化。在梯度回传时,回归模型和分类器两个支路于 ROI 池化层处汇总,然后再回传到第一卷积层。Fast R-CNN 引入了共享卷积层,增加了 ROI 池化层,并使用了多任务损失函数将分类和回归两个任务的损失函数相加在一起从而实现了统一优化。
2 Fast R-CNN 检测网络的详细设计
如下图所示为 Faster R-CNN 的算法流程图,清晰地表示了图像在网络中的详细处理过程。
首先,对于输入网络的一幅任意大小 PXQ 的图像,先将其缩放至固定大小 MxN(长边不超过 1000,短边不超过 600),然后将缩放后的图像输入至 Conv Layer 层中进行特征提取,在 Conv Layer 中一共包含了 13 个 conv 层 + 13 个 relu 层 + 4 个 pooling 层。最后一个特征输出层为 conv5-3,特征数 (channels) 为 512。
3 区域建议网络(RPN)生成
经典的检测方法生成检测框都非常耗时,如 OpenCV adaboost 使用滑动窗口 + 图像金字塔生成检测框;或如 RCNN 使用 SS(Selective Search)方法生成检测框。而 Faster RCNN 则抛弃了传统的滑动窗口和 SS 方法,直接使用 RPN 生成检测框,这也是 Faster RCNN 的巨大优势,能极大提升检测框的生成速度。
如下图所示展示了 RPN 网络的具体结构可以看到 RPN 网络实际分为 2 条线,上面一条通过 softmax 分类锚获得前景(即目标)和背景(检测目标是否是背景),下面一条用于计算对于锚的边框回归偏移量,以获得精确的建议。
最后的建议层则负责综合前景锚和边框回归偏移量获取建议,同时剔除太小和超出边界的建议。其实整个网络到了建议层这里,就完成了相当于目标定位的功能。关于这一步的具体设计流程如下:
3.1 锚的生成
锚,实际上就是一组由 rpn/generate_anchors.py 生成的矩阵,主要代码结构是 [xl,yl,x2,y2]。其中括号内的 4 个值代表矩形左上和右下角点坐标。如下图,一共 生成了 9 个矩形,总共有 3 种形状,长宽比为大约为:宽: 高 = [1:1, 1:2, 2:1] 三种,实际上通过锚就引入了检测中常用到的多尺度方法。
关于上面的锚的尺度问题,其实是根据检测图像设置的。先把任意大小的输入图像设置成 800x600。再回头来看锚的大小,锚中长宽 1:2 中最大为 352x704,长 宽 2:1 中最大 736x384,基本是覆盖了 800x600 的各个尺度和形状。
如上图所示,生成的 9 个锚的主要用途在于遍历 Corw layers 计算获得的特 征,为每一个点都配备这种锚作为初始的检测框。虽然这样导致最后获得的检 测框很不准确,但是后面还有 2 次边框回归可以修正检测框位置。
3.2 softmax 判定前景与背景
—副 MxN 大小的矩阵送入 FasterRCNN 网络后,到 RPN 网络后变为 (M/16)x(N/16),设 W=M/16,H=N/16。在进入重塑层与 softmax 之前,先做了 1x1 卷积。经过该卷积的输出图像为 WxHx8 大小,这也就刚好对应了特征图每一个点都有 9 个锚,同时每个锚又有可能是前景和背景,所有这些信息都保存 WxHx(9x2) 大小的矩阵。这样做的原因在于后面接 softmax 分类获得前景锚,也就相当于初步提取了检测目标候选区域 box(—般认为目标在前景锚中)。
softmax 前后都接一个重塑层的原因则其实只是为了便于 softmax 分类,至于具体原因这就要从 caffe 的实现形式说起了。在 caffe 基本数据结构 blob 中以如下形式保存数据:
blob=[batch_size,channel, height, width]
对应至上面的保存 bg/fg anchors 的矩阵,其在 caffe blob 中的存储形式为 [1,2*9,H,W]。而在 softmax 分类时需要进行 fg/bg 二分类,所以重塑层会将其变为 [1,2,9*H,W] 大小,即单独“腾空”出来一个维度以便 softmax 分类,之后再回复原状。
综上所述,RPN 网络中利用描和 softmax 初步提取出了前景锚作为候选区域。
3.3 边框回归
在候选框生成之后,接下来就是边框回归,先简要介绍以下边框回归的具体原理,如下图所示,最终目的是对飞机进行目标提取。也就是理想中的目标提取候选框。但是红色为实际提取的前景锚,所以即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,那么这张图仍然相当于没有正确的检测出飞机。所以希望采用一种方法对红色的框进行微调,使得前景锚和 GT 更加接近。以此来进一步对边框进行校正与调整,以此来输出正确的标记结果,这时候就用到了边框回归。接下来将对边框回归的原理进行具体介绍,包括边框的平移,缩放以及线性回归,最后得出函数的优化目标以精校候选框。
3.4 RoI 池化原理
Rol 池负责收集建议,并计算出建议特征,送入后续网络。从图 3 中可以看到 Rol 池有 2 个输入:原始的特征图和 RPN 输出的 proposal boxes (大小各不相同)。
RoIPoolinglayerforward 过程:在之前有明确提到:proposal=[xl,yl,x2,y2] 是 对应 MxN 尺度的,所以首先使用 spatial_scale 参数将其映射回 MxN 大小的特征图 尺度; 之后将每个建议水平和竖直都分为 7 份,对每一份都进行 max pooling 处理。这样处理后,即使大小不同的建议,输出结果都是 7x7 大小,实现了 fixed-length output,如下图所示。
3.5 分类
分类部分利用己经获得的建议特征图,通过 foil connect 层与 softmax 计算每个建议具体属于那个类别(如人、车、电视等),输出概率向量;同时再次利用边框回归获得每个建议的位置偏移量,用于回归更加精确的目标检测框。分类部分网 络结构如下图。从 Pol 池获取到 7x7=49 大小的建议特征图后,送入后续网络进行训练。