行人检测0-02:LFFD-白话给你讲论文-翻译无死角(1)

news/2024/7/24 6:51:29 标签: LFFD, 行人检测, 目标检测

以下链接是个人关于LFFD(行人检测)所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:17575010159 相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。 文 末 附 带 \color{blue}{文末附带} 公 众 号 − \color{blue}{公众号 -} 海 量 资 源 。 \color{blue}{ 海量资源}。

行人检测0-00:LFFD-史上最新无死角详细解读:https://blog.csdn.net/weixin_43013761/article/details/102592374

知识预备

随着能力的提升,我发现自己阅读论文的能力在逐步增强 ,那么这个逼,怎么装给大家看呢?思来想去啊,决定今后每个项目,都使用白话为大家翻译解释,让你深刻理解作者的核心思想,我始终觉得,只有把你自己学会的知识,能给别人讲明白,那么,你才是真的学会了!牛逼就到这里了哈。
在看这篇论文的时候,大家需要预备俩个知识点,一个为感受野,一个为 anchor(描点),其中前者感受野,十分的好理解,我就不讲解了,后者 anchor,说实话,真的不是那么好理解的,所以编写了一篇针对anchor讲解的博客,如下:
深度解剖(5):白话谈anchor(锚点),不懂来找我!
如果知道了anchor(锚点)大概是什么东西,那么我们就开始论文的翻译吧。

摘要

很多应用都会涉及到人脸检测,并且经常被部署到,计算能力和内存都比较差的边缘设备上(如嵌入式,或者移动端)。这篇论文主要提出了一种速度比较快,准确率也比较高的人脸检测算法。这种方法和传统的不一样,是没有anchor的,并且还是单个阶段完成检测。这里特别的说明一下,我们对目标检测的receptive field (RF:感受域)和 effective receptive field (ERF:有效感受域)做了深入的研究,如果不是很理解,没关系,继续往下看就了解了。

基于把某些层的RF(感受域)看做是自然的anchor,以及结合RF(自然的anchor=感受域)以及RF对应的步伐(就是当前feature map一个点,对应原图的多少个像素)这种思想,理论上可以检测一副图中大范围的人脸,哪怕那些人脸的尺寸都各不相同。受到ERF(有效感受域)和人脸缩放的启发,我们设计出了一个高效的,单阶段的人脸检测架网络。该网络的主要框架由一些公共的的网络层,以及8个分支组成,因此提高了检测速率。基于现在流行的人脸检测数据(WIDER FACE,FDDB)做了全面的实验对比,并且针对应用场景提出了一种新的评估方式。

这种新的测试方式把测试集分为3个类型:1.容易检测的(人脸比较大),2.中等难度的(人脸大小居中),3.比较难检测的(人脸比较小)。我们提出的这种网络模型,

在WIDER数据集上Val/Test的准确率分别是(针对各个难度):
(简单)0.910/0.896, (中等)0.881/0.865,(困难) 0.780/0.770;

我们的网络运行速度非常的快(NVIDIA TITAN Xp: 131.45FPS at 640×480; NVIDIA TX2: 136.99 PFS at 160×120;Raspberry Pi 3 Model B+: 8.44 FPS at 160×120),模型只有9M大小。

Table 1(基于和WIDER数据集和前五的检测方法进行对比):
在这里插入图片描述

1.介绍

人脸检测是计算机视觉一个重要的分支,很多应用场景都需要他的支持,如果人脸校正,人脸识别等。并且人脸检测经常被用在边缘设备上,比如手机或者嵌入式,甚至摄像头内部等等。这些设备的计算能力和内存大小都是有一定局限性的,但是在工业上,其对准确率和速度都有一定的要求。

目前一些最先进的人脸检测,在WIDER FACE数据集上已经达到了很高的准确率,但是其中大部方法,都是使用了模型大,参数多的网络框架,比如VGG,Resnet50/152,and Densenet121。这前五种方法的准确率展示在上图的Table 1中,可以看到他们的差距都会很微小,甚至实际应用都很难察觉到他们之间的差距。很显然,想通过更加复杂的模型去提高准确率,是没有必要的,因为即使提升了,速度也跟不上,并且很难落地。所以我们认为,为了在实在场景中更好的去使用人脸检测,应该是去平衡准确率和速度之间的关系。

最近的十年间,人脸检测的发展是非常快的,最早的是 Viola-Jones提出,使用手工提取特征,然后利用级联分类器(不理解也没有关系)。其中聚合通道的特点,是众所周知的。通过这种方法,很明显的提高了速度。但是他们依赖于手工提取特征,不是端到端的进行训练,导致检测的准确率不是很高。

但是近些年的CNN在WIDER FACE数据集上取得了很高的准确率,完胜传统模式。这些方法可以粗略的分成两个类别,分别为一个阶段和两个阶段。其中两个阶段的方法,包括了候选框的提取,以及局部回归,其中R-CNN就是比较一个经典的代表。一个阶段的方法,分类和box的回归是同步的,一般会结合anchor和多尺寸图像变换(图像金字塔)一起使用。在很多单阶段的检测中,anchor是网络中必不可少的部分。以往为了提高准确率,提出了很多复杂的网络模型,但是他们的速度是很慢的。

这这篇论文中,我们提出了一种不仅快,而且准确率也比较高的模型(Light and Fast Face Detec-LFFD),可以在边缘设备上部署。改模型的构建主要受到SSD(单阶段,多尺寸)以及其他网络的启发。其中SSD的特点是,为每一个检测的分支都设定预想设定了anchor,为了能覆盖各种不同尺寸和形状的物体,anchor的大小以及长宽比例都是不一样的,所以在单阶段的目标检测中,anchor榜样着重要的角色。

目前通过anchor的检测方法,主要面临着以下问题:
1、基于anchor的匹配,是没有办法覆盖各种尺寸的人脸的,看能前面anchor讲解的文章大家可以很明显的知道,anchor仅仅粗略覆盖或者匹配那些人脸。
2、对于anchor的匹配,是通过与真实图片上的目标框计算出IOU,其需要设定一个阈值,这个阈值经常根据不同实际应用场景,或者数据集变化,也就是说很难固定下来,做一个统一。
3、anchor数量的设定,也同样需要根据实际情况做调整,并且会伴随着一些没有必要的计算。

在这篇论文中,我们认为RF(感受野)可以当做一个自然的anchor,这些的话,就能够很简单的解决上面的问题了。
1、在整个网络中,不同尺寸的人脸总会被某一层中某个对应的RF预测,或者匹配到。
2、( 重 点 : 明 白 是 哪 个 落 在 哪 个 \color{red}{重点:明白是哪个落在哪个} )只要感受野的中心落在groundtruth bbox(标签=真实目标box)上,则该感受野负责预测。
3、输入图片大小确定之后,分布在原图上的RFs数量是固定的

另外,我们通过ERF(有效感受野)对RF做了定性的分析,然后构建了LFFD模型,他的框架是一些公共的卷积层,与八个分支。整个网络都是使用3x3或者1x1的卷积核,以及一些残差模块和ReLU激活函数。所以他是轻量级的网络,比起VGG16 , Resnet50与Densenet121速度是要快很多的。所以我们的模型只有2.1M(VGG16-138.3M,Resnet50-25.5M )。他的准确率和速度非常的令人惊讶,适用于边缘设备。

总结,这边论文主要有如下贡献:

1、我们研究了RF,ERF,与人脸检测的关系,这是LFFD网络设计灵感的源泉
2、克服了基于anchor设计网络的缺点,LFFD是没有anchor的网络
3、我们提出的框架,检测速度和精度都是比较可观的
4、大量基于WIDER FACE和FDDB的实验,证明了在边缘设备上,我们的网络是有很大的优势的

2.相关工作

十年以前,人脸检测就吸引了大批人。
早期相关的人脸检测方法 :早期的人脸检测,是通过手工提取特征,然后利用滑动窗口以级联分类器。直到一些快速的特征提取,以及高速分类器的出现之前 ,都是使用Viola-Jones人脸检测就是使用Haar特征去训练Adaboost人脸鉴别器。但是这些方法都不是端到端的学习和训练,特征的提取和分类都是分开的。虽然他们的速度或许很快,但是准确率是比较低的。
CNN端到端的人脸检测方法:目前基于CNN的人脸检测方法,主要分为一阶段和两个阶段。其中两个阶段的方法,如faster R-CNN。目前的状况来看,占优势的主要是单阶段的检测,如基于图像金字塔的MTCNN,以及其升级版本RF。但是图像金字塔的缺点是,其速度比较慢,并且内存的占用比较大。后面的S3FD网络利用RF(感受野),以及anchor这种方法,对其进行了改善。再入Zhu等人,使用很多的anchor增加了网络对小人脸的检测。从这里可以看出anchor是目标检测重要的东西。随后S3FD,PyramidBox,为了检测小物体,提出了特征金字塔。SSH通过3个检测模型共同合作,提出了尺寸不变性模型。 DSFD的特点是特征增强模型,前面的网络层监督改善anchor的匹配方法。S3FD,PyramidBox, SSH 和DSFD都是基于VGG16框架的,所以模型比较大,参数比较多。FaceBoxes为了能够实时的运行,减少了输入图片的尺寸,详细的说,他使用了步伐为32的缩放(两个卷积,两个池化)。尽管他的速度提高了,但是很难去检测比较小的人脸,在WIDER FACE数据集上的准确率非常的低。

但是我们的网络,不仅快,准确率又高(又开始吹逼了,忍不住吐槽下,都不知道说多少次了),那些使用很大的计算量带来准确率微弱的提升,或者大量降低准确率,去提高速度的方法都是不可取的。

3.快准的人脸检测

在这个这个段落中
3.1 我们主要重诉一下RF和人脸之间的关系:
3.2 描述RF当做自然anchor的相关信息
3.3 是整个网络详细的描述
3.4 给出了整个网络训练的规范

3.1 重诉人脸检测的RF

首先,我们对RF和他的本质,做一个简单的概括:RF是输入图像确定的一个范围,影响着神经元的激活,RF决定了一个神经元在输入原图中能看到的范围。如果被检测的物体,能被RF包括,或者刚好结合,那么这个物体能被很好的检测出来。

普遍认为,浅层的网络RFs是比较小的,深层网络的RFs比较大,RF的一个重要属性是,其每个像素对神经元的激活所做的贡献都是不一样的,总的来说,RF中心周围的像素,做的贡献是比较大的,离开中心越远,则贡献越小。这种现象的成为ERF(有效感受野)。ERF在网络中的存在类似于高斯分布,因此RF中心的物体也是非常重要的。LFFD的设计主要就是来自上述的观察。

人脸检测是目标检测的一个分支,他有一些特点:
1、大的脸,是比较容易检测出来的,因为能很清楚的看到鼻子,嘴巴眼睛这些特征。这些特征,随着表情的变化,会发生一些改变,但是并不会对我们识别他是一个人脸造成影响。
2、小或者特别小的人脸,必须和比较大的脸区分来对待,一张比较小的脸,很难直接通过脸部的外貌识别出来了(如下图Fig. 1这个例子),如果只看第一张小的人脸,人都很难区分其到底是不是一张人脸,机器模型也是一样,他也是很难去区分的。但是,我们结合他周边的背景,比如他的脖子和肩膀,如下图(上面部分),慢慢扩大,加入环境背景,我们就能比较容易 的识别出来,该是一个人脸。
Fig. 1
在这里插入图片描述
Figure 1图注解:及小人脸检测,左上角的图片只包含了人脸,右上角的图片包含了更多的环境,以及背景信息。可以知道,带有环境信息的时候,对小人脸的识别是有帮助的。下面的部分图,描述的是在检测小人脸时,RF和ERF之间的关系。

基于上面的理解,对待不同大小的人脸,其选择的RF也是不同的
1、对于小的,或者特别小的人脸,ERF必须覆盖这些脸,以及足够的环境和背景信息。
2、对于中等程度的脸,ERFs只要包含这张脸,和少量的环境背景信息即可
3、对于比较大的人脸,只需要保持他们在RF之内就行了
通过上述几点,我们设计了一个高效的网络框架

3.2 RFs当做自然的Anchor

一阶段的目标的检测,最大的特点就是预先设定好anchor,为了检测到不同大小和形状的物体,所有anchor也是多种多样的。这些anchor经常被多余的设定出来,在人脸检测的时候,一般是使用长宽1:1的anchor(正方形),如果卷积核的长宽是正方向,那么RF也是正方形(这个还是比价好理解的吧)。LFFD把RF当做一种自然的anchor,在一些层的神经元,他们映射到原图的RF,是很有规律的平放的,所以,在网络搭建好的时候,RF的数目已经被固定下来了。

RF和目标的匹配策略是很简单的:只要RF的中心落到了groundtruth bbox上,然后这个RF和groundtruth bbox就进行匹配,计算IOU。这种方法是基于S3FD的anchor匹配。Zhang 等人解释的ERF的影响以及设计合适的anchor去加强小人脸的检测,尽量的去提高了anchor的命中率。但是S3FD引入了一个麻烦的问题(针对小人脸,存在很多的anchor),为了解决这些问题,不得不采用一些额外的手段。但是理论上LFFD,只要控制合适的步伐,RF能够百分百比较合适的去覆盖这些人脸,并且,我们的RF匹配方法,能够很匹配连续的,不同尺寸的人脸。比如,100像素的RF是有能力去预测20~40像素之间的人脸的。这样,他会相同的去对待多个不同尺寸的人脸。

基于上面的解说,LFFD没有创建任何的anchor去和groundtruth bboxes进行匹配,因此我们提出的LFFD是没有anchor的。

3.3. 网络结构

通过前面解释,我们设计了一种特殊的人脸检测网络,有两个因素决定了branches放置的位置。分别是stride(步伐=缩放速率)和 RFs(感受野)的大小。合适的RF大小能保证学习特征和鉴别的能力,所以RFs必须百分百的覆盖人脸。LFFD网络全部的节后如下图Fig. 2:
在这里插入图片描述
Fig. 2图解:整个网络结构有为25层,分为4个部分,tiny part, small part, medium part,large part。可以看到一起有8个branch,其是为了检测不同尺寸的人脸。这八个branch都是有3x3的卷积核,1x1的卷积核以及残差模块组成。

LFFD能检测10个像素以上的人脸,因此在WIDER FACE数据集上,大于10个像素的人脸,都需要被检测。我们可以很明确的看到,该网络是一个分成十个部分的一阶段检测方法,关于branch具体的信息,请看Table 2:
在这里插入图片描述
这个tiny part部分有十个卷积层,前面两个卷积都是使用stride =2进行下采样,加起来共stride =2,在tiny part部分,之后的每个卷积stride=4。一个比较重要的原理:尽快的进行下采样,是为了人脸能够百分百的被RF覆盖。在tiny part有两个branchs,首先loss branch1在从c8(看图,第八层卷积)开始的,此处的RF大小为55,对应连续的人脸尺寸为10-15,同理,loss branch 2是从c10开始的,此处的RF大小为71,对应连续人脸连续缩放尺寸为15-20。很明显的,我们能够保证RFs的中心落在smallest face box上,达到百分百的覆盖。

好 好 理 解 下 : \color{red}{好好理解下:} 一种特殊的情况是,一个RF的中心,可能同时落在多个face box上面,在这种情况下,RF直接被忽略。

如前面3.1所说,tiny face需要较多的上下文,或者说环境背景信息,ERF是要比RF小的。到最后,我们使用了一个比平均人脸尺寸要大的RFs,这个RFs和平均人脸尺寸的比例分别为4.4(branch 1),4.0(branch 2)。在Table 2中,他们的比例是在逐步减少的,从4.4减少到了1.3。因为比较大的人脸,需要的上下文信息(背景,环境)比较少。

对于每个branch,他有两个sub buranch,一个做分类,判断是否为人脸,一个对box做回归。

small part负责的是对20-40和40-70之间的人脸检测,首先在c11 处经过了步伐为2的下采样,随后是使用卷积完成相同的功能(tiny part),相对于tiny part的RF为8,在small part的RF快速的增加到到16,所以他需要更多卷积层,才能实现RF大小的增加。相比于small part,small part只有一个branch。

LFFD网络结构的最后,是 large part的卷积。因为这里的特征图比较小,不需要太多的计算,就能检测到较大尺寸的人脸。这里开始了三个branch,因为大的人脸容易比检测到,所以RFs和平均脸尺寸的比例也比较小。

LFFD这种网络结构,能够检测到10-560之间像素的人脸,并且还是单阶段的。因为快速的推理速度,可以在cuDNN,ncnn,mace等框架上广泛的使用。我们的网络中没有BN,因为他降低了速度,原本对于640×480的图片是7.6ms,使用BN之后变成了8.9 ms,降低了17%。因为没有使用BN,所以需要更多次数的迭代。我们并排的使用残差网络,为了增加网络的深度。在前两个part所有卷积我们没有增加filters的数目,其filters都为64,因为前面两个部分的特征图比较大,如果增加filters,会增加许多的计算量。但是最后的两个part,我们增加到了128。如Table 2:
在这里插入图片描述

累到我了,这篇就到这里吧,不然太臃肿了,欢迎大家看下片博客!我会把剩下的翻译完。


http://www.niftyadmin.cn/n/915886.html

相关文章

of_iomap

void __iomem *of_iomap(struct device_node *node, int index); 通过设备结点直接进行设备内存区间的 ioremap(),index是内存段的索引。若设备结点的reg属性有多段,可通过index标示要ioremap的是哪一段,只有1段的情况, index为…

BZOJ-1026: [SCOI2009]windy数 (数位DP)

1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5665 Solved: 2534[Submit][Status][Discuss]Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包…

深度解剖(5):白话谈anchor(锚点),不懂来找我!

以下是我个人关于深度学习的所有见解,其后会对深度学习思想,正反向传播,损失函数,正则惩罚,梯度下降,矩阵求导,网络搭建,等等都进行详细的讲解!只有你想不到的&#xff0…

ION 概念

ION是Google的下一代内存管理器,用来支持不同的内存分配机制,如CARVOUT,物理连续内存(kmalloc), 虚拟地址连续但物理不连续内存(vmalloc), IOMMU等。用户空间和内核空间都可以使用ION,用户空间是通过/dev/ion来创建cli…

史上最全的AJAX

概述 对于web应用程序:用户浏览器发送请求.服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML),渲染并显示浏览器上 Ajax和Form表单提交数据的的好处有以下两种: Form表单提交数据的时候,呈现在页面上是刷新整个页面 Ajax提交数据的…

VA、MVA、PA

VA(虚地址),MVA(修正后虚地址),PA(物理地址) 1)VA,是程序中的逻辑地址,0x00000000~0xFFFFFFFF。 2)MVA,由于多个进程执行&…

行人检测0-03:LFFD-白话给你讲论文-翻译无死角(2)

以下链接是个人关于LFFD(行人检测)所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:17575010159 相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。文末附带\color…

昨天又是急急忙忙晚上把日志给投了

今天是微软1周年更新的日子,其实对于两个人的生活情况而言,本来是打算一起起火,可是已经有两周的时间脱了同一个地点吃饭,然后也还是不错的。 转载于:https://www.cnblogs.com/bkchengzheng/p/5727894.html