FCHD是2018年提出来的人头检测模型,在处理小目标检测的问题上效果很好。
论文链接:FCHD: A fast and accurate head detector
Abstract 摘要
在本文中,我们提出了fchd - full Convolutional Head Detector,这是一种端到端可训练的头部检测模型,在一个非常普通的GPU上以5 fps的速度运行,平均精度为0.70 (AP)。最近的头部检测技术避免了一开始就使用锚框进行检测,特别是在复杂的环境中。原因是在对象大小较小的情况下,基于锚的技术的性能很差。(especially in the cases where the detection has to happen in the wild)(这个思想参考了Fast RCNN,不再对整个图片直接提取候选区域,而是先做卷积,然后在特征图上做region proposal)
我们认为,精心设计的锚框可以获得一个好的AP,锚框的设计是根据隐藏层的接受域大小来选择的。我们的贡献有两点:
1)使用anchor的全卷积简单模型,端到端训练,检测时间很短。
2)精心选择anchor尺寸,anchor尺寸对获得良好的平均精度至关重要。在BRAINWASH等数据集上,我们的模型和其他头部检测方法可以相提并论。除了准确性,我们的模型在所有baselines中运行时间最少,硬件要求适中,这使得它适合部署在监控领域。(代码已经开源)
索引术语-头部检测,人群计数,目标检测,快速- rcnn。
一、Introduction 介绍
人头检测在监控领域有着重要的应用,是计算机视觉中的一个重要问题。监控视频中的人群计数可以看作是头部检测的重要应用之一。之前已经提出了几种人群计数算法,这些算法在[1]、[2]、[3]等极具挑战性的数据集上取得了很好的效果。一种非常常见的人群计数方法是训练一个回归模型来预测基于输入图像的密度图。然而,这些基于密度图的技术有一些缺点。
1)通过对整个密度图逐像素求和来预测最终的人群数量。在这样做的同时,它不考虑密度地图上的位置,从哪里贡献的计数。因此,在预测中出现的false positives(FP)将导致最终的人群计数出错误的结果。
2)密度图的精度对输入图像分辨率敏感,当密度图分辨率[4]较小时,得到的结果较好。另一种可以解决这个人群计数问题的方法是人的检测方法,我们可以将输入的图像直接输入到一个预先训练过的模型中,比如Faster-RCNN[5],然后计算“person类”中边界框的数量,从而得到最终的人群计数。然而,由于fast - rcnn在高遮挡场景下的表现是一个众所周知的问题,因此最终的人群统计的准确性存在问题,因为在大多数拥挤的场景中,人都会被遮挡。此外,像Faster-RCNN这样的模型有非常大的计算和内存需求,这使得它不可能用于嵌入式设备[6]。因此,部署这样的模型实际上是不可行的,特别是在监视应用程序中,“基于边缘设备的应用程序”比基于云的应用程序更受欢迎。综上所述,两种方法的优缺点如下:1)基于密度图的回归技术的优点是能够建模高遮挡场景,但产生FP的比率较高,对输入图像分辨率敏感。2)基于检测的以人检测为目标的方法,FP较少,但在遮挡的场景中表现不佳,并且有很大的计算和内存需求。因此,考虑到上述技术的所有优点和缺点,一种更健壮的人群计数方法是急需的。
在本文中,我们尝试结合人群计数中两种方法的优点来实现头部检测方法。具体来说,我们使用检测方法而不是回归方法在场景中建模头部,这将有助于消除前两种方法的缺点,即较少的FP和在遮挡场景下更好的表现(因为头部是场景中最可见的部分)。此外,我们的模型是完全卷积的,这使得它的运行时间更短。这是因为,全连接层理想情况下会消耗大部分内存和运行时间。这使得我们的模型适合在嵌入式设备上运行,而这对于监视应用程序来说是非常理想的。与之前的方法[8]不同,[9]我们提出了一个基于全卷积的锚框和端到端训练的头部检测模型。我们的模型基于Faster-RCNN[5],但与Faster-RCNN (Region Proposal Network + Classification)中的two-stage pipeline不同,我们有一个single stage pipeline可以直接进行头部检测。此外,与随机选择锚框尺度不同的是,我们根据网络[10]的有效感受野大小仔细选择锚框。我们的消融实验表明,这在最终的平均精度上提供了一个主要的性能提升。我们的贡献如下:
–基于锚框的、完全卷积的、端到端可训练的头检测模型,其中基于接受域大小设计锚框尺度在获得显著性能提升中起着至关重要的作用。
–提出了一种头部检测模型,该模型运行时间短,内存需求低。
–在BRAINWASH等数据集上,我们的模型和其他头部检测方法可以相提并论。
二、Related work 以往研究
下面简要回顾一下以前解决人群计数和头部检测的尝试。人群计数方法主要基于回归技术,其中一些深度学习以及基于特征工程的技术在过去已经被提出[11],[12],[13],[14]。Chan等人[1]提出了一种基于回归的技术,从视频中的运动分割区域中提取手工制作的特征,如边缘和纹理。特征提取后,为了将提取的特征映射到实际的人群数量,需要训练一个线性回归模型。然而,该技术使用的特征对分割区域高度敏感,使用回归模型学习到的映射会随着相机位置的不同而变化。由于这个原因,这种技术不能推广到看不见的场景。张等人[3]尝试使用深度学习的方法来解决这个问题,他们训练一个CNN来预测密度图和人群数量。他们用数据驱动的方法,消除了以往人群计数技术在归纳上的缺点。然而,该方法需要一个透视图来规格化图像中头部的比例。因为在大多数实际场景中,透视图是不容易得到的,这限制了它的适用性。这个问题被一个3列架构的CNN解决,并且convolutional kernel的大小是固定的,能够建模不同尺度的heads。这有助于摆脱透视规范化映射,使得算法更适合于实际情况。然而,因为它预测的是密度图,所以它的缺点正如前一节所讨论的。
很多发表的人群计数方法是通过头部检测实现的,它们结合了之前所有头部检测方法的优点[15]。[16]提出了一种用于人群计数的头部检测方法,该方法使用最先进的增强整体特征级联训练检测器。然而,由于使用了手工制作的特性,在高场景和尺度变化下,它的性能会受到严重影响。Vu等人[9]提出了一种头部检测技术,使用两种CNN模型进行头部检测,第一种模型直接从图像中预测头部的尺度和位置。而第二个模型用于建模对象之间的成对关系。[8]也提出了一些免费方法。在这种方法中,头部检测是由CNN编码器使用一个回归模块产生。这种回归一般由LSTM组成,因此可以对变长输出进行预测
三、METHOD
A Model architecture 模型结构
像[17]、[18]、[19]、[20]这样的深层架构能够学习“广义特征”,这对于各种任务都很有用。我们首先利用已经存在的预先训练过的模型VGG16[19]作为架构的基础模型。我们删除了conv5层之后的所有层,并使用剩余的权重作为我们新训练的起点。其架构如图1所示。还增加了3个新的卷积层:(1)第一卷积层和其他卷积层一样,其目的是对前一层获取的信息进行编码。(2)第二层卷积层是负责预测定位坐标的回归头。(3)第三个卷积层是分类头,用来预测一个头的概率分数。第二和第三卷积层使用1×1卷积核来实现。回归头的输出经过边界盒变换,其中预测被转换为空间坐标。分类头和回归头的核数都取决于每个像素位置上锚框的数量(N),如图1所示。
Fig 1 头部检测模型的架构。在生成一组预定义的锚框之后,我们的模型使用一个完全卷积的网络来估计锚框的坐标以及概率分数。模型有两个头,1)回归,40×30×(N×4)。2)分类,40×30×(N×2),每个1×1×(N×4)回归头的输出表示feature map中该位置的N个锚框的比例尺和位移。这里,N=2是anchor的数量。
B Design of Anchor Scales 锚框的设计
锚框是一组预定义的边界框,在目标识别系统[5]中,根据这些边界框预测尺度和位移。这些锚框最初是在Faster-RCNN中引入的。然而,与Faster-RCNN在每个像素位置使用9个锚框,高宽比为0.5、1和2,锚框尺寸为128×128、256×256和512×512不同,我们使用的锚框只有一个高宽比,即1:1;锚框尺寸有2个,即32×32和64×64。锚的高宽比选择为正方形,因为它将匹配头的高宽比。
锚框尺度的选择是基于“有效感受域”,而不是基于“理论感受域”。[10]中指出,,CNN中的一个单元有两种接受域,一种是理论接受域,另一种是有效接受域。并不是理论接受域的所有像素都对最终输出有贡献。与接受域的外部像素相比,少数中心像素对最终输出的影响相对较大。这个中心区域被称为有效感受区。在VGG16的conv5层中,理论接受野大小为228像素。考虑到这个感受野,我们更喜欢第2和第4尺度的锚框,这导致锚框大小分别为32×32和64×64。锚的大小被计算为feat stride × aspect ratio × anchor scale,其中conv5层的feat stride步幅为16。锚框的大小大约是理论感受野按比例缩小了3.5倍,所以它有很好的机会匹配有效感受野。另一个选择锚尺度为2和4的直观原因可以从图2中得到。红色为conv5层的感受野大小,绿色是anchor scales为8,16,32的(in Faster-RCNN)感受野大小,蓝色为我们使用的锚定尺度2,4。Faster-RCNN主要处理场景中大型物体的定位,因此大型锚定尺度将是网络进行预测的一个很好的起点。然而,在我们的场景中,头部在图像中通常是非常小的,因此选择大尺度的锚框没有意义,因为在这种情况下,网络必须预测非常大的尺度和位移来精确定位。因此,通过确保锚尺度较小,我们可以确保网络有良好的概率从预先定义的锚框位置精确定位头部。这可以从图2中看出。设计锚尺度被证明是获得良好平均精度的最重要的一步,这将在我们的实验中看到。
Fig 2 faster rcnn与我们模型的Anchor scales对比。红盒:输入图像经过conv5层之后的感受野大小。绿盒:Faster-RCNN中使用的锚框尺寸,分别为128×128、256×256和512×512。蓝框:我们模型中使用的锚框尺寸,即32×32和64×64。可以看出,与绿色框相比,蓝色框更有可能给出头部位置的准确预测。
C 训练
数据集
我们的模型在来自BRAINWASH数据集[8]的10461张训练图像上进行训练。每张图片大小640×480。每幅图像都要经过预处理,在预处理过程中除了对图像进行中心化和归一化(mean subtraction and normalization)之外,还要进行缩放。如果尺寸超过600像素,则图像的较小一侧被缩放为600像素(这里既然规定输入大小为640x480,不知道为什么要缩放到600,后续看代码之后再解释)。在每一个epoch之后用包含493张图片的测试集进行测试。
方法
使用我们设计的锚框尺度,我们在原始图像上生成一组预定义的锚框。锚框的stride大小为16,因为conv5层中的每个像素点对应原始图像中16个点(有4个池化层)。我们选择两种锚框,其像素大小为32×32和64×64。图像的输入分辨率为640×480,在conv5层得到的feature map大小为40×30。因此,对于每幅图像,我们得到2400个锚框(40×30×2)。对于每个锚框,网络将预测4个回归坐标,并对锚框进行准确定位头部所需的位移,2个softmax之后的输出来计算头部检测得分。这一功能可以通过使用1×1卷积层自然实现,从图1中的回归和分类头可以看出。我们在训练时不考虑锚框超出图像的边界。为了给锚框分配二值标签进行训练,我们采用以下两种策略:(1)当groundtruth的IoU≥0.7时锚框被标记为正。(2)与真实值的IOU最大的锚框被标记为正。我们采用两种策略,因为在某些情况下,第一个条件可能不能给任何锚框分配一个正的标签。IoU≤0.3的锚框,给予负标签。不满足这两个条件的锚框是不关心的,不包括在训练过中。在训练过程中,我们一次只处理一张图像。从标着指定标签的锚框中,我们以1:1的比例选出了32个正锚框和负锚框。
损失函数
用于模型训练的损失函数是一个多任务损失函数,类似于[5]中RPN训练中定义的损失函数。如公式1所示。
其中i表示被选择的32个框的索引,pi是预测的第i个框有头的概率,pi是真实标签(取值范围0或1)。ti是预测框的参数化坐标,ti是真实框的参数化坐标。(框的定义和文献17(faster rcnn)中的定义相同)
Lcls贡献了分类损失,Lreg贡献了回归损失。Lcls计算了所有框而Lreg只计算了正样本框,Lreg还乘上了pi*。Lcls是交叉熵损失(cross entropy loss),而Lreg是smooth L1 loss(faster RCNN和SSD都使用了此损失),这两个损失项都进行了标准化(即前面的系数1/Ncls和1/Nreg)。
超参数
使用预先训练好的VGG16初始化基本模型,其中VGG16使用ImageNet数据集[21]进行训练。对预训练模型的所有层和新层进行再训练。新层使用均值为0,方差为0.01的正态分布进行初始化,训练期间的权重衰减为0.0005。我们用SGD对整个模型进行微调。训练学习率设置为0.001,模型训练15个epoch,接近160k次迭代(设置不同的batch size,迭代次数不同)。在完成8个epoch后,我们以0.1的尺度衰减学习速率。我们的方法是用PyTorch[22]实现的。
四、Experiments
我们在包含484张图像的BRAINWASH 数据集的上测试我们的模型。以下设置在整个实验中保持不变。 Anchor scales被设置为2和4。进行了改变Anchor scales的烧蚀研究。非最大抑制(NMS)是在测试阶段执行的,而不是在训练阶段。NMS的阈值设置为0.3。NMS是一种滤除高度重叠检测的后处理技术。在这种技术中,如果其中IoU大于一个阈值,则任何两个检测被抑制为一个。使用以下评价指标,即当预测的具有ground truth的边界盒的IoU≥0.5[23]时,认为head检测正确。为了量化我们的系统的性能,我们绘制了精确度-召回曲线。
Baselines 基准线
与[8]中用来对比的基准线相同。第一个基准线是使用AlexNet架构的OverFeat[24]。第二个基线是称为ReInspect[8]的最新技术的当前状态。我们更喜欢这些基线,因为它们都是以最近的和具有挑战性的BRAINWASH数据集为基准的。有三种不同的复检,使用各种类型的损失,即Lf ix, Lf irst, Lhungarian。我们将我们的技术与所有这些基准线进行比较。
Performance evaluation 测试表现
我们将我们技术的精确度-召回曲线与其他基线进行比较。结果如图3所示。从图中可以看出,我们所获得的准确率-召回率优于Overfeat-AlexNet、ReInspect、Lf ix和ReInspect、Lf irstk这3条基线。尽管precision-recall曲线低于第四基线,第四条基线在EER表现最好。我们的模型在召回率为0.92时表现最佳,其准确率在0.92。在召回率为0.65时表现最佳,这可以从曲线中观察到。我们获得较低召回率的一个原因是,图像中出现的许多头的大小非常小,由于接收野的大小为228,网络有时无法检测到这些头。如果我们考虑在前一层使用锚点来检测接收域大小较小的地方,这一点可以得到改善。我们的技术与基线的平均精度比较如表一所示。从表中可以看出,我们的模型获得的AP为0.70,与三个基线相比较好,而与性能最好的模型也可相提并论。
Timings 时间
我们将对我们的技术与基线进行时间比较。我们模型的时间是在两个平台上进行基准测试的。第一个是通用GPU平台,我们使用NVidia Quadro M1000M GPU,它有512个CUDA核心。第二个平台是拥有256个CUDA核心的NVidia Jetson TX2。因为Jetson是最适合边缘部署的GPU设备,我们也喜欢在这个平台上进行计时基准测试。计算所有测试图像(即484幅图像)的预测时间,并使用所有测试图像预测时间的平均值计算最终的时间。表中显示了时间。从表2中可以看出,我们的模型运行速度为5fps,在同一平台上比ReInspect快5倍。此外,我们的模型在Jetson TX2嵌入式平台上以1.6fps的速度运行,而其他基线模型由于内存需求而无法加载。这是我们的模型的一个主要优势,除了精确之外,它也适用于边缘部署。
Ablation Experiments 消融实验
为了测量锚框尺寸对最终精度(AP)的影响,我们进行了消融实验,训练了3种不同锚定尺寸的模型,即(1)32×32、64×64(默认设置)、(2)64×64、128×128、(3)128×128、256×256。所有的模型都使用相同的超参数设置进行训练。我们从表3中看到。当锚点大小为32×32、64×64(等于有效接受域)时,我们的性能最佳,这证明了我们在前几节中所做的断言是正确的。
五、结论
在这项工作中,我们提出了一个基于锚点的全卷积端到端可训练模型,用于在复杂场景中检测头部。我们的模型在像BRAINWASH这样具有挑战性的头部检测数据集上达到了0.70的平均精度,这与之前的技术相当。除了精度,它有非常少的运行时间,即5fps在Quadro和1.6fps在Jetson TX2。在未来,我们计划扩展这项工作,使用不同卷积层的不同尺度的锚点,并结合检测结果,以获得更好的整体精度,特别是在头部尺寸较小的情况下。
六、Write in the end
以上是对论文《FCHD: A fast and accurate head detector》较为完整的中文翻译内容,采取的方法是机翻+人工修正。考虑到博主的英语水平有限,大家在阅读的时候如果有不理解或者发现明显错误的地方,请一定要去阅读原文,同时也欢迎你们在底下评论区留言,编者看到了一定会进行回复。