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

news/2024/7/10 1:55:45 标签: 行人检测, 目标检测, LFFD

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

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

前言

大家看到其实这里不容易吧,剩下的我都有点不想翻译了,都是些杂七杂八的东西,不过做事情就应该有头有尾,兄弟们给个赞啊!那我们接着继续吧。

3.4. 训练的细节

在这里,主要给大家讲解一下几个训练过程中的几个细节。
数据集和数据增强LFFD是基于WIDER FACE数据集进行训练的,其中包含了12880赞图片,超过了150000个人脸,其中小于十个像素的人脸,被直接抛出了,数据增强是为了增加网络的鲁棒性。
1、颜色扭曲,比如随机增加亮度,对比度,光照等等噪音
2、对每个样本进行随机缩放,在LFFD中有八个branch,他们分别都是预测不同尺寸的的人脸,所以必须保证以下几点,这个人脸的数目对于每个分支,都必须差不过是相同的。每个样本被每个分支随机抽取到),就是说,每个样本都要缩放真每个分支都适宜的人脸大小。
注 意 下 : \color{red}{注意下:} 最后,我们随机选取一张图片,并且再从该图片随机选择一张人脸,然后围绕该人脸的中心,剪切640x640的如的图片送入网络。如果原图不够640x640,则对其像素进行0填充。
3、随机进行水平翻转。

损失函数 重 点 奥 , 多 读 读 \color{red}{重点奥,多读读} 。和RF相匹配的是正样本,其余的都是负样本。如果RF匹配到了多个人脸,则RF被忽略。除此之外,对于每个连续变化的尺寸,我们设定了灰色区域(gray
scale )。如果 { S L i } i = 1 8 {\{SL_i\}_{i=1}^8} {SLi}i=18表示连续尺寸的下限, { S U i } i = 1 8 {\{SU_i\}_{i=1}^8} {SUi}i=18表示连续尺寸的上限,那么灰色尺寸的下限和上限分别为 { S L i ∗ 0.9 } i = 1 8 {\{SL_i*0.9\}_{i=1}^8} {SLi0.9}i=18 { S U ∗ 1.1 } i = 1 8 {\{SU_*1.1\}_{i=1}^8} {SU1.1}i=18,对于每个连续的尺寸i,其对应的灰色尺寸为 [ [ S L i ∗ 0.9 ] , S L i ] [{[SL_i*0.9],SL_i]} [[SLi0.9],SLi] [ S U i , [ S U i ∗ 0.1 ] ] {[SU_i,[SU_i*0.1]]} [SUi,[SUi0.1]],比如下面这个例子,branch3检测的人脸尺寸主要为20~40之间,那么他对应的灰色尺寸就是[18,20]和[40,44],如果人脸落在灰色尺寸之间,其也会被对应branch忽略掉,对于box的回归,我们直接使用了L2 loss,回归的groundtruth定义如下:
R F x − b x t l R F s / 2 , R F y − b y t l R F s / 2 , R F x − b x b r R F s / 2 , R F y − b y b r R F s / 2 \frac{RF_x-b_x^{tl}}{RF_s/2},\frac{RF_y-b_y^{tl}}{RF_s/2},\frac{RF_x-b_x^{br}}{RF_s/2},\frac{RF_y-b_y^{br}}{RF_s/2} RFs/2RFxbxtlRFs/2RFybytlRFs/2RFxbxbrRFs/2RFybybr
其上的 R F x RF_x RFx R F y RF_y RFy是RF的中心坐标, b x t l b_x^{tl} bxtl b y t l b_y^{tl} bytl是box左上角的坐标, b x b r b_x^{br} bxbr b y b r b_y^{br} bybr是box右下角的坐标。对他们全都初除以 R F s / 2 {RF_s/2} RFs/2是为了正则化,其中 R F s RF_s RFs表示RF的大小。只要RF与正样本的box进行匹配的时候才能被激活,不被忽略。在计算loss的时候,他们是具有相同的权重的。

这家很奇怪是吧,为什么是和中心求损失,有什么作用。注意的是,他们的权重是相同的,就是说他们会一起被优化,他们就类似于在相互竞争,但是实力又差不多,这样的话,就能保证两边平衡。即左上角和右下角的坐标到 groundtruth box中心的距离是相等的。

困难负样本采集:一般来说,为了稳定和更好的训练,对于每个branch负样本是要比正样本多的,但是只有部分负样本计算损失进行反向传播。其中这部分损失比较多的,是排在前几的样本。正样本和负样本的的比例为1:10,实际经验告诉我们,困难样本的挖掘,能够更快的训练网络,和然网络稳定。

训练参数:首先对于输入图片,首先通过减去127.5,然后再除以127.5(正则化处理)。优化是使用动能为0.9的SGD。权重衰减为0,batch_size为32。不适用权重衰减的原因是,比起VGG16或者其他模型,我们的LFFD的参数特别的少,因此是没有必要进行dorput。初始的学习率为0.1,一共迭代了1,500,000次,分别在 600000,1000000,1200000和1400000降低了学习率(每次乘以0.1),在两个NVIDIA GTX1080TI上面训练了5天。我们的代码已经开源,使用的是MXnet框架。

4.实验

在这个片段,主要是介绍我们大量实验的分析结果。首先是提出了一种对检测模型新的评估方法,并且和多个先进的网络,在多个平台上进行速度对比。然后进一步调查了计算量和内存的联系,提出了计算效率的概念。

4.1评估标准:

我们想介绍一下一种新的评估标准,这种评估叫做Single Inference on the Original(SIO-只进行一次推断),这种评估的标准,是为了保证网络的实际应用场景的实时性能。我们主要到,在一些应用场景,模型的速度和准确率都是至关重要的。平常的评估方法都会带有一些小技巧,比如为了达到更高的准确率,使用图像金字塔。到时这样做是十分消耗时间。

通过下面的方法,可以很快的实现SIO相关标准:
1.保持图片原来的大小进行输入
2.网络对原图只推理一次
3.网络输出结果直接进行度量(就是使用数据-数字,进行结果分析)

在我们的实验中,都是符合SIO的标准的,并且和当前一些先进开源的网路进行了对比,如:DSFD ( Resnet152 backbone ), PyramidBox ( VGG16 backbone ), S3FD( VGG16 backbone ), SSH( VGG16 backbone ),FaceBoxes,DSFD,PyramidBox。我们的网络叫做LFFDLFFD与FaceBoxes都没有使用预训练模型,都是从头开始训练的。所有的网络都是在WDIER FACE和FDDB数据集上进行评估的。

**FDDB数据集:**一共有2845张图片,其中5171张是没有人脸的。有两种评分方式,分别是离散的评分方式与连续的评分方式。离散的评分方式就是设定一个IOU的阈值(过了这个阈值,才算预测准确),第二个就是直接使用IOU,不设定阈值。我们采用的是后面的这种方式,下面 Fig. 3是LFFD在FDDB数据集上,和其他几个网络对比的结果:
Fig. 3
在这里插入图片描述
在这里插入图片描述
可以看到,几乎所有网络得分的趋势都是相近的。其中DSFD, PyramidBox, S3FD,SSH达到了最高的准确率,他们的差距差距是非常小的。LFFD以比他们低一点点的准确率,位居第四名。但是很明显的超过了FaceBoxes的准确率,实验结果表明吗,LFFD对无约束人脸的检测效果是比较好的。

**WIDER FACE 数据集:**在该数据集中包含了32203张图片,共393703个面孔,这些人脸的表情和尺寸差异非常大,知道目前为止,WIDER FACE数据集经常作为人脸检测评估的标准。我们把所有的图片随机分成了3个子集:training set (40%), validation set (10%),testing set(50%)。更近一步,我们会把每个子集再分割成3个部分:Easy(大人脸),Medium(中等人脸),Hard(小人脸)。下面是LFFD与其他网络结构在训练集的表现Table 3:
在这里插入图片描述
下面是LFFD与其他网络结构在测试集集的表现Table 3:
在这里插入图片描述
我们可以观察到:首先,可以看到上面DSFD,PyramidBox,S3FD,SSH结果与论文原始结果是有所下降的,还有就是,如果想仅仅通过一次预测就到达一个高的准确率,是比较困难的。第二,PyramidBox在hard样本取得了最好的结果,SSH取得的结果是最差的,其基本忽略的小人脸的检测。第三,FaceBoxes在Medium,Hard都没有取得满意的结果。因为 FaceBoxes有很大的步伐stride=32,也就是异味着比32像素还有小的人脸时很难被检测到的。很明显,我们对FaceBoxes做了额外的实验,重新命名为FaceBoxes3.2×,我们把输入的图片扩大可32倍,可以明显的看到其测试结果在Medium,Hard得到了很大的改善,但是Easy的结果变差了,其主要的原因是,有的人脸被放得太大,而导致不能被检测到。实验结果表明,FaceBoxes3.2×与FaceBoxes都不能大范围的去覆盖人脸。第四,尽管LFFD和最先进的一些方法有一些差距,但是完胜了FaceBoxes。LFFD比起SSH在hard人脸检测上,更加的有优势。

好了。各位老铁,其他的是速度上的一些对比,就补翻译了,也比较容易看懂。总得来说,就是LFFD不仅速度快,而且准确率也比较高,适合项目的落实。

在这里插入图片描述


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

相关文章

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

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

行人检测0-09:LFFD-源码无死角解析(4)-预测代码解析

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

c语言二维数组与指针

问题,以下输出的结果是什么,区别在于哪? void main() {int a[3][4] { 1,2,3,4,5,6,7,8,9,10,11,12 };//输出的3个地址都一样,差别在哪?printf("\n%x",a); printf("\n%x",*a); printf("\n%x…

DMA-BUF API使用指南

任何一个设备驱动想要使用DMA共享缓冲区,就必须为缓冲区的生产者或者消费者。如果驱动A想用驱动B创建的缓冲区,那么我们称B为生成者,A为消费者。生产者:实现和管理缓冲区的操作函数[1]; 允许其他消费者通过dma-buf接口…

转载:C# this.invoke()作用 多线程操作UI 理解二

Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); //测试的窗体 public class TestForm : Form { //创建一个Button对象 pr…

DRAM中P-Bank和L-Bank的概念

传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。 而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。控制内 存与CPU之间数据交换的北桥芯片也因此将内存总线的数据…

2016 Multi-University Training Contest 5 1011 Two DP

http://acm.hdu.edu.cn/showproblem.php?pid5791 HDU5791 Two 题意 &#xff1a;两个数组&#xff0c;多少个不连续子串相等 思路&#xff1a; dp[i][j] &#xff1a;a串i结尾&#xff0c;b串j结尾的不连续子串数目个数 1 #include<cstdio>2 #include<cstring>3 #…

3D点云重建0-04:MVSNet-白话给你讲论文-翻译无死角(2)

以下链接是个人关于MVSNet(R-MVSNet)-多视角立体深度推导重建 所有见解&#xff0c;如有错误欢迎大家指出&#xff0c;我会第一时间纠正。有兴趣的朋友可以加微信&#xff1a;17575010159 相互讨论技术。若是帮助到了你什么&#xff0c;一定要记得点赞&#xff01;因为这是对我…