|
|
@ -11,6 +11,19 @@
|
|||
pages={271--279},
|
||||
year={2016}
|
||||
}
|
||||
@article{choi2017stargan,
|
||||
title={Stargan: Unified generative adversarial networks for multi-domain image-to-image translation},
|
||||
author={Choi, Yunjey and Choi, Minje and Kim, Munyoung and Ha, Jung-Woo and Kim, Sunghun and Choo, Jaegul},
|
||||
journal={arXiv preprint},
|
||||
volume={1711},
|
||||
year={2017}
|
||||
}
|
||||
@article{isola2017image,
|
||||
title={Image-to-image translation with conditional adversarial networks},
|
||||
author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},
|
||||
journal={arXiv preprint},
|
||||
year={2017}
|
||||
}
|
||||
@article{radford2015unsupervised,
|
||||
title={Unsupervised representation learning with deep convolutional generative adversarial networks},
|
||||
author={Radford, Alec and Metz, Luke and Chintala, Soumith},
|
||||
|
|
@ -24,11 +37,11 @@
|
|||
pages={3431--3440},
|
||||
year={2015}
|
||||
}
|
||||
@article{choi2017stargan,
|
||||
title={Stargan: Unified generative adversarial networks for multi-domain image-to-image translation},
|
||||
author={Choi, Yunjey and Choi, Minje and Kim, Munyoung and Ha, Jung-Woo and Kim, Sunghun and Choo, Jaegul},
|
||||
journal={arXiv preprint},
|
||||
volume={1711},
|
||||
@article{murez2017image,
|
||||
title={Image to image translation for domain adaptation},
|
||||
author={Murez, Zak and Kolouri, Soheil and Kriegman, David and Ramamoorthi, Ravi and Kim, Kyungnam},
|
||||
journal={arXiv preprint arXiv:1712.00479},
|
||||
volume={13},
|
||||
year={2017}
|
||||
}
|
||||
@inproceedings{yi2017dualgan,
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ $$L^{infoGAN}_{G}=L^{GAN}_G-\lambda L_1(c,c')$$
|
|||
目前Image-to-Image Translation做的最好的GAN。
|
||||
|
||||
## 7.5 GAN训练有什么难点?
|
||||
由于GAN的收敛要求**两个网络(D&G)同时达到一个均衡**,
|
||||
由于GAN的收敛要求**两个网络(D&G)同时达到一个均衡**
|
||||
|
||||
## 7.6 GAN与强化学习中的AC网络有何区别?
|
||||
强化学习中的AC网络也是Dual Network,似乎从某个角度上理解可以为一个GAN。但是GAN本身
|
||||
|
|
@ -112,15 +112,22 @@ Instance Norm比Batch Norm的效果要更好。
|
|||
|
||||
GAN只适用于连续型数据的生成,对于离散型数据效果不佳,因此假如NLP方法直接应用的是character-wise的方案,Gradient based的GAN是无法将梯度Back propagation(BP)给生成网络的,因此从训练结果上看,GAN中G的表现长期被D压着打。
|
||||
## 7.10 Reference
|
||||
|
||||
### DCGAN部分:
|
||||
* Radford, A., Metz, L., & Chintala, S. (2015). Unsupervised representation learning with deep convolutional generative adversarial networks. arXiv preprint arXiv:1511.06434.
|
||||
* Long, J., Shelhamer, E., & Darrell, T. (2015). Fully convolutional networks for semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 3431-3440).
|
||||
* [可视化卷积操作](https://github.com/vdumoulin/conv_arithmetic)
|
||||
### WGAN部分:
|
||||
* Arjovsky, M., & Bottou, L. (2017). Towards principled methods for training generative adversarial networks. arXiv preprint arXiv:1701.04862.
|
||||
* Arjovsky, M., Chintala, S., & Bottou, L. (2017). Wasserstein gan. arXiv preprint arXiv:1701.07875.
|
||||
* Nowozin, S., Cseke, B., & Tomioka, R. (2016). f-gan: Training generative neural samplers using variational divergence minimization. In Advances in Neural Information Processing Systems (pp. 271-279).
|
||||
* Wu, J., Huang, Z., Thoma, J., Acharya, D., & Van Gool, L. (2018, September). Wasserstein Divergence for GANs. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 653-668).
|
||||
|
||||
### CycleGAN
|
||||
Zhu, J. Y., Park, T., Isola, P., & Efros, A. A. (2017). Unpaired image-to-image translation using cycle-consistent adversarial networks. arXiv preprint.
|
||||
|
||||
### Image2Image Translation
|
||||
* Isola P, Zhu JY, Zhou T, Efros AA. Image-to-image translation with conditional adversarial networks. arXiv preprint. 2017 Jul 21.
|
||||
* Zhu, J. Y., Park, T., Isola, P., & Efros, A. A. (2017). Unpaired image-to-image translation using cycle-consistent adversarial networks. arXiv preprint.(CycleGAN)
|
||||
* Choi, Y., Choi, M., Kim, M., Ha, J. W., Kim, S., & Choo, J. (2017). Stargan: Unified generative adversarial networks for multi-domain image-to-image translation. arXiv preprint, 1711.
|
||||
* Murez, Z., Kolouri, S., Kriegman, D., Ramamoorthi, R., & Kim, K. (2017). Image to image translation for domain adaptation. arXiv preprint arXiv:1712.00479, 13.
|
||||
|
||||
### GAN的训练
|
||||
* Arjovsky, M., & Bottou, L. (2017). Towards principled methods for training generative adversarial networks. arXiv preprint arXiv:1701.04862.
|
||||
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 367 KiB |
|
After Width: | Height: | Size: 308 KiB |
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 168 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 212 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 471 KiB |
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
2018.11.18 陈方杰:修改第八章目标检测目录,新增目标检测基本概念,修改R-CNN、Fast R-CNN、RetinaNet,新增待完善论文FPN、RefineDet、RFBNet,以及新增所有论文链接。
|
||||
|
||||
2018.11.18 新增人脸检测部分,修改ssd-yolo系列
|
||||
|
||||
# 第八章 目标检测
|
||||
|
||||
**目标检测负责人:**
|
||||
|
|
@ -84,7 +86,7 @@ Reference
|
|||
|
||||

|
||||
|
||||
### 8.1.2 目标检测要解决的核心问题
|
||||
### 8.1.2 目标检测要解决的核心问题?
|
||||
|
||||
除了图像分类之外,目标检测要解决的核心问题是:
|
||||
|
||||
|
|
@ -96,7 +98,7 @@ Reference
|
|||
|
||||
如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采用经典的滑动窗口+图像缩放的方案解决通用目标检测问题的成本太高。
|
||||
|
||||
### 8.1.2 目标检测算法
|
||||
### 8.1.2 目标检测算法分类?
|
||||
|
||||
基于深度学习的目标检测算法主要分为两类:
|
||||
|
||||
|
|
@ -104,17 +106,17 @@ Reference
|
|||
|
||||
先进行区域生成(region proposal,RP)(一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。
|
||||
|
||||
任务:特征提取—>生成RP—>分类/定位回归
|
||||
任务:特征提取—>生成RP—>分类/定位回归。
|
||||
|
||||
常见的two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等
|
||||
常见的two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。
|
||||
|
||||
**2.One stage目标检测算法**
|
||||
|
||||
不用RP,直接在网络中提取特征来预测物体分类和位置。
|
||||
|
||||
任务:特征提取—>分类/定位回归
|
||||
任务:特征提取—>分类/定位回归。
|
||||
|
||||
常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等
|
||||
常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。
|
||||
|
||||

|
||||
|
||||
|
|
@ -582,9 +584,9 @@ Faster R-CNN中,在分类器之后有一个专用的候选区域网络。
|
|||
**(2)Network Design**
|
||||
|
||||
YOLO检测网络包括24个卷积层和2个全连接层,如图所示:
|
||||
|
||||
|
||||
图7.4.11
|
||||
|
||||
|
||||
图7.4.12
|
||||
其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。YOLO网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception module,而是使用1×1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)3×3卷积层进行简单替代。
|
||||
|
||||
|
|
@ -594,14 +596,14 @@ Faster R-CNN中,在分类器之后有一个专用的候选区域网络。
|
|||
**(4)损失函数**
|
||||
|
||||
损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification这个三个方面达到很好的平衡。简单的全部采用了sum-squared error loss来做这件事会有以下不足:(1)8维的localization error和20维的classification error同等重要显然是不合理的;(2)如果一些栅格中没有object(一幅图中这种栅格很多),那么就会将这些栅格中的bounding box的confidence置为0,相比于较少的有object的栅格,这些不包含物体的栅格对梯度更新的贡献会远大于包含物体的栅格对梯度更新的贡献,这会导致网络不稳定甚至发散。
|
||||
|
||||
|
||||
图7.4.13
|
||||
解决方案如下:更重视8维的坐标预测,给这些损失前面赋予更大的loss weight,记为λcoord,在pascal VOC训练中取5(上图蓝色框)。对没有object的bbox的confidence loss,赋予小的loss weight,记为λnoobj,在pascal VOC训练中取0.5(上图橙色框)。有object的bbox的confidence loss(上图红色框)和类别的loss(上图紫色框)的loss weight正常取1。
|
||||
对不同大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏相同的尺寸对IOU的影响更大。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个巧妙的办法,就是将box的width和height取平方根代替原本的height和width。在YOLO中,每个栅格预测多个bounding box,但在网络模型的训练中,希望每一个物体最后由一个bounding box predictor来负责预测。因此,当前哪一个predictor预测的bounding box与ground truth box的IOU最大,这个predictor就负责predict object。这会使得每个predictor可以专门的负责特定的物体检测。随着训练的进行,每一个predictor对特定的物体尺寸、长宽比的物体的类别的预测会越来越好。
|
||||
|
||||
|
||||
图7.4.14神经网络输出后的检测流程
|
||||
|
||||
|
||||
图7.4.15
|
||||
**(5)非极大值抑制**
|
||||
|
||||
|
|
@ -657,7 +659,7 @@ Faster R-CNN中,在分类器之后有一个专用的候选区域网络。
|
|||
(3)Convolutional With Anchor Boxes
|
||||
|
||||
之前的YOLO利用全连接层的数据完成边框的预测,导致丢失较多的空间信息,定位不准。作者在这一版本中借鉴了Faster R-CNN中的anchor思想,回顾一下,anchor是RNP网络中的一个关键步骤,说的是在卷积特征图上进行滑窗操作,每一个中心可以预测9种不同大小的建议框。
|
||||
|
||||
|
||||
图7.4.21
|
||||
为了引入anchor boxes来预测bounding boxes,作者在网络中果断去掉了全连接层。剩下的具体怎么操作呢?
|
||||
首先,作者去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率。然后,通过缩减网络,让图片输入分辨率为416×416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。作者观察到,大物体通常占据了图像的中间位置,就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。最后,YOLOv2使用了卷积层降采样(factor为32),使得输入卷积网络的416×416图片最终得到13×13的卷积特征图(416/32=13)。加入了anchor boxes后,可以预料到的结果是召回率上升,准确率下降。我们来计算一下,假设每个cell预测9个建议框,那么总共会预测13×13×9=1521个boxes,而之前的网络仅仅预测7×7×2=98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%,说明可以通过进一步的工作来加强准确率,的确有改进空间。
|
||||
|
|
@ -665,9 +667,9 @@ Faster R-CNN中,在分类器之后有一个专用的候选区域网络。
|
|||
(4)Dimension Clusters(维度聚类)
|
||||
|
||||
作者在使用anchor的时候遇到了两个问题,第一个是anchor boxes的宽高维度往往是精选的先验框(hand-picked priors),虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。和以前的精选boxes维度不同,作者使用了K-means聚类方法类训练bounding boxes,可以自动找到更好的boxes宽高维度。传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离。为此,作者采用的评判标准是IOU得分(也就是boxes之间的交集除以并集),这样的话,error就和box的尺度无关了,最终的距离函数为:
|
||||
|
||||
|
||||
作者通过改进的K-means对训练集中的boxes进行了聚类,判别标准是平均IOU得分,聚类结果如下图:
|
||||
|
||||
|
||||
图7.4.22数据集VOC和COCO上的边界框聚类分析结果
|
||||
可以看到,平衡复杂度和IOU之后,最终得到k值为5,意味着作者选择了5种大小的box维度来进行定位预测,这与手动精选的box维度不同。结果中扁长的框较少,而瘦高的框更多(这符合行人的特征),这种结论如不通过聚类实验恐怕是发现不了的。当然,作者也做了实验来对比两种策略的优劣,如下图,使用聚类方法,仅仅5种boxes的召回率就和Faster R-CNN的9种相当。说明K-means方法的引入使得生成的boxes更具有代表性,为后面的检测任务提供了便利。
|
||||
表7.4.1
|
||||
|
|
@ -680,13 +682,13 @@ Faster R-CNN中,在分类器之后有一个专用的候选区域网络。
|
|||
(6)Direct location prediction
|
||||
|
||||
前面讲到,YOLOv2借鉴RPN网络使用anchor boxes来预测边界框相对先验框的offsets。边界框的实际中心位置 ,需要根据预测的坐标偏移值 ,先验框的尺度 以及中心坐标 (特征图每个位置的中心点)来计算:
|
||||
|
||||
|
||||
但是上面的公式是无约束的,预测的边界框很容易向任何方向偏移,如当 时边界框将向右偏移先验框的一个宽度大小,而当 时边界框将向左偏移先验框的一个宽度大小,因此每个位置预测的边界框可以落在图片任何位置,这导致模型的不稳定性,在训练时需要很长时间来预测出正确的offsets。所以,YOLOv2弃用了这种预测方式,而是沿用YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)。总结来看,根据边界框预测的4个offsets: ,可以按如下公式计算出边界框实际位置和大小:
|
||||
|
||||
|
||||
其中为 为cell的左上角坐标,如图5所示,在计算时每个cell的尺度为1,所以当前cell的左上角坐标为(1,1)。由于sigmoid函数的处理,边界框的中心位置会约束在当前cell内部,防止偏移过多。而 和 是先验框的宽度与长度,前面说过它们的值也是相对于特征图大小的,在特征图中每个cell的长和宽均为1。这里记特征图的大小为 (在文中是(13,13)),这样我们可以将边界框相对于整张图片的位置和大小计算出来(4个值均在0和1之间):
|
||||
|
||||
|
||||
如果再将上面的4个值分别乘以图片的宽度和长度(像素点值)就可以得到边界框的最终位置和大小了。这就是YOLOv2边界框的整个解码过程。约束了边界框的位置预测值使得模型更容易稳定训练,结合聚类分析得到先验框与这种预测方法,YOLOv2的mAP值提升了约5%。
|
||||
|
||||
|
||||
图7.4.23边界框位置与大小的计算示例图
|
||||
(7)Fine-Grained Features
|
||||
|
||||
|
|
@ -696,7 +698,7 @@ Faster R-CNN中,在分类器之后有一个专用的候选区域网络。
|
|||
(8)Multi-Scale Training
|
||||
|
||||
由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416*416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:输入图片最小为320*320,此时对应的特征图大小为10*10(不是奇数了,确实有点尴尬),而输入图片最大为608*608,对应的特征图大小为19*19,在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
|
||||
|
||||
|
||||
图7.4.24 Multi-Scale Training
|
||||
采用Multi-Scale Training策略,YOLOv2可以适应不同大小的图片,并且预测出很好的结果。在测试时,YOLOv2可以采用不同大小的图片作为输入,在VOC 2007数据集上的效果如下图所示。可以看到采用较小分辨率时,YOLOv2的mAP值略低,但是速度更快,而采用高分辨输入时,mAP值更高,但是速度略有下降,对于544*544,mAP高达78.6%。注意,这只是测试时输入图片大小不同,而实际上用的是同一个模型(采用Multi-Scale Training训练)。
|
||||
|
||||
|
|
@ -717,7 +719,7 @@ YOLOv2的训练
|
|||
github:http://pjreddie.com/yolo9000/
|
||||
|
||||
YOLO9000是在YOLOv2的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略。众多周知,检测数据集的标注要比分类数据集打标签繁琐的多,所以ImageNet分类数据集比VOC等检测数据集高出几个数量级。在YOLO中,边界框的预测其实并不依赖于物体的标签,所以YOLO可以实现在分类和检测数据集上的联合训练。对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。 作者选择在COCO和ImageNet数据集上进行联合训练,但是遇到的第一问题是两者的类别并不是完全互斥的,比如"Norfolk terrier"明显属于"dog",所以作者提出了一种层级分类方法(Hierarchical classification),主要思路是根据各个类别之间的从属关系(根据WordNet)建立一种树结构WordTree,结合COCO和ImageNet建立的WordTree如下图所示:
|
||||
|
||||
|
||||
图7.4.26 基于COCO和ImageNet数据集建立的WordTree
|
||||
WordTree中的根节点为"physical object",每个节点的子节点都属于同一子类,可以对它们进行softmax处理。在给出某个类别的预测概率时,需要找到其所在的位置,遍历这个path,然后计算path上各个节点的概率之积。
|
||||
|
||||
|
|
@ -982,6 +984,184 @@ github(Official):https://github.com/ruinmessi/RFBNet
|
|||
- arXiv:https://arxiv.org/abs/1811.04533
|
||||
- github(Official):https://github.com/qijiezhao/M2Det
|
||||
|
||||
## 8.4 人脸检测
|
||||
|
||||
在目标检测领域可以划分为了人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测、人脸识别、人脸其他属性的识别等等),并且和通用目标检测(识别)会有一定的差别,着主要来源于人脸的特殊性(有时候目标比较小、人脸之间特征不明显、遮挡问题等),下面将从人脸检测和通用目标检测两个方面来讲解目标检测。
|
||||
|
||||
### 8.4.1 目前主要有人脸检测方法分类?
|
||||
|
||||
目前人脸检测方法主要包含两个区域:传统人脸检测算法和基于深度学习的人脸检测算法。传统人脸检测算法主要可以分为4类:
|
||||
|
||||
(1)基于知识的人脸检测方法;
|
||||
|
||||
(2)基于模型的人脸检测方法;
|
||||
|
||||
(3)基于特征的人脸检测方法;
|
||||
|
||||
(4)基于外观的人脸检测方法。
|
||||
|
||||
由于本书着重关注深度学习,下面会着重介绍基于深度学习的人脸检测方法。
|
||||
|
||||
2006年Hinton首次提出深度学习(Deep Learning)的概念,它是通过组合低层的特征形成更高层的抽象特征。随后研究者将深度学习应用在人脸检测领域,主要集中在基于卷积神经网络(CNN)的人脸检测研究,如基于级联卷积神经网络的人脸检测(cascade cnn)、 基于多任务卷积神经网络的人脸检测(MTCNN)、Facebox等,很大程度上提高了人脸检测的鲁棒性。当然通用目标检测算法像Faster-rcnn、yolo、ssd等也有用在人脸检测领域,也可以实现比较不错的结果,但是和专门人脸检测算法比还是有差别。下面部分主要介绍基于深度学习的的人脸检测算法,基于深度学习的通用目标检测算法将在第二大节介绍。
|
||||
|
||||
### 8.4.2 如何检测图片中不同大小的人脸?
|
||||
|
||||
传统人脸检测算法中针对不同大小人脸主要有两个策略:
|
||||
|
||||
(1)缩放图片的大小(图像金字塔如图8.4.1所示);
|
||||
|
||||
(2)缩放滑动窗的大小(如图8.4.2所示)。
|
||||
|
||||

|
||||
|
||||
图 8.1 图像金字塔
|
||||
|
||||

|
||||
|
||||
图 8.2 缩放滑动窗口
|
||||
|
||||
基于深度学习的人脸检测算法中针对不同大小人脸主要也有两个策略,但和传统人脸检测算法有点区别,主要包括:
|
||||
|
||||
(1)缩放图片大小。(不过也可以通过缩放滑动窗的方式,基于深度学习的滑动窗人脸检测方式效率会很慢存在多次重复卷积,所以要采用全卷积神经网络(FCN),用FCN将不能用滑动窗的方法。)
|
||||
|
||||
(2)通过anchor box的方法(如图8.3所示,不要和图8.2混淆,这里是通过特征图预测原图的anchorbox区域,具体在facebox中有描述)。
|
||||
|
||||

|
||||
|
||||
图 8.3 anchor box
|
||||
|
||||
### 8.4.3 如何设定算法检测最小人脸尺寸?
|
||||
|
||||
主要是看滑动窗的最小窗口和anchorbox的最小窗口。
|
||||
|
||||
(1)滑动窗的方法
|
||||
|
||||
假设通过12×12的滑动窗,不对原图做缩放的话,就可以检测原图中12×12的最小人脸。但是往往通常给定最小人脸a=40、或者a=80,以这么大的输入训练CNN进行人脸检测不太现实,速度会很慢,并且下一次需求最小人脸a=30*30又要去重新训练,通常还会是12×12的输入,为满足最小人脸框a,只需要在检测的时候对原图进行缩放即可:w=w×12/a。
|
||||
|
||||
(2)anchorbox的方法
|
||||
|
||||
原理类似,这里主要看anchorbox的最小box,通过可以通过缩放输入图片实现最小人脸的设定。
|
||||
|
||||
### 8.4.4 如何定位人脸的位置
|
||||
|
||||
(1)滑动窗的方式:
|
||||
|
||||
滑动窗的方式是基于分类器识别为人脸的框的位置确定最终的人脸,
|
||||
|
||||

|
||||
|
||||
图 8.4 滑动窗
|
||||
|
||||
(2)FCN的方式:
|
||||
|
||||
FCN的方式通过特征图映射到原图的方式确定最终识别为人脸的位置,特征图映射到原图人脸框是要看特征图相比较于原图有多少次缩放(缩放主要查看卷积的步长和池化层),假设特征图上(2,3)的点,可粗略计算缩放比例为8倍,原图中的点应该是(16,24);如果训练的FCN为12*12的输入,对于原图框位置应该是(16,24,12,12),当然这只是估计位置,具体的再构建网络时要加入回归框的预测,主要是相对于原图框的一个平移与缩放。
|
||||
|
||||
(3)通过anchor box的方式:
|
||||
|
||||
通过特征图映射到图的窗口,通过特征图映射到原图到多个框的方式确定最终识别为人脸的位置。
|
||||
|
||||
### 8.1.5 如何通过一个人脸的多个框确定最终人脸框位置?
|
||||
|
||||

|
||||
|
||||
图 8.5 通过NMS得到最终的人脸位置
|
||||
|
||||
NMS改进版本有很多,最原始的NMS就是判断两个框的交集,如果交集大于设定的阈值,将删除其中一个框,那么两个框应该怎么选择删除哪一个呢? 因为模型输出有概率值,一般会优选选择概率小的框删除。
|
||||
|
||||
### 8.1.6 基于级联卷积神经网络的人脸检测(Cascade CNN)
|
||||
|
||||
1. cascade cnn的框架结构是什么?
|
||||
|
||||

|
||||
|
||||
级联结构中有6个CNN,3个CNN用于人脸非人脸二分类,另外3个CNN用于人脸区域的边框校正。给定一幅图像,12-net密集扫描整幅图片,拒绝90%以上的窗口。剩余的窗口输入到12-calibration-net中调整大小和位置,以接近真实目标。接着输入到NMS中,消除高度重叠窗口。下面网络与上面类似。
|
||||
|
||||
2. cascade cnn人脸校验模块原理是什么?
|
||||
|
||||
该网络用于窗口校正,使用三个偏移变量:Xn:水平平移量,Yn:垂直平移量,Sn:宽高比缩放。候选框口(x,y,w,h)中,(x,y)表示左上点坐标,(w,h)表示宽和高。
|
||||
|
||||
我们要将窗口的控制坐标调整为:
|
||||
$$
|
||||
(x-{x_nw}/{s_n},y-{y_nh}/{s_n},{w}/{s_n},{h}/{s_n})
|
||||
$$
|
||||
这项工作中,我们有$N=5×3×3=45$种模式。偏移向量三个参数包括以下值:
|
||||
$$
|
||||
Sn:(0.83,0.91,1.0,1.10,1.21)
|
||||
$$
|
||||
|
||||
$$
|
||||
Xn:(-0.17,0,0.17)
|
||||
$$
|
||||
|
||||
$$
|
||||
Yn:(-0.17,0,0.17)
|
||||
$$
|
||||
|
||||
同时对偏移向量三个参数进行校正。
|
||||
|
||||

|
||||
|
||||
3、训练样本应该如何准备?
|
||||
|
||||
人脸样本:
|
||||
|
||||
非人脸样本:
|
||||
|
||||
4. 级联的好处
|
||||
|
||||
级联的工作原理和好处:
|
||||
|
||||
- 最初阶段的网络可以比较简单,判别阈值可以设得宽松一点,这样就可以在保持较高召回率的同时排除掉大量的非人脸窗口;
|
||||
- 最后阶段网络为了保证足够的性能,因此一般设计的比较复杂,但由于只需要处理前面剩下的窗口,因此可以保证足够的效率;
|
||||
- 级联的思想可以帮助我们去组合利用性能较差的分类器,同时又可以获得一定的效率保证。
|
||||
|
||||
### 8.4.7 基于多任务卷积神经网络的人脸检测(MTCNN)
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
1.MTCNN模型有三个子网络。分别是P-Net,R-Net,O-Net.我想问一下,1.模型中的三个input size是指的是同一张图resize到不同尺度下喂给不同模型,还是同一张图,依次经过三个模型,然后是不同的输入尺寸?(这部分能给我讲一下吗)2.每个模型它都有对应三个结果(face classification;bounding box;facial landmark)这三个在网络上是如何对应的呢?
|
||||
|
||||
为了检测不同大小的人脸,开始需要构建图像金字塔,先经过pNet模型,输出人脸类别和边界框(边界框的预测为了对特征图映射到原图的框平移和缩放得到更准确的框),将识别为人脸的框映射到原图框位置可以获取patch,之后每一个patch通过resize的方式输入到rNet,识别为人脸的框并且预测更准确的人脸框,最后rNet识别为人脸的的每一个patch通过resize的方式输入到oNet,跟rNet类似,关键点是为了在训练集有限情况下使模型更鲁棒。
|
||||
|
||||
还要注意一点构建图像金字塔的的缩放比例要保留,为了将边界框映射到最开始原图上的
|
||||
|
||||
还要注意一点:如何从featureMap映射回原图
|
||||
|
||||
### 8.4.8 Facebox
|
||||
|
||||

|
||||
|
||||
**(1)Rapidly Digested Convolutional Layers(RDCL)**
|
||||
|
||||
在网络前期,使用RDCL快速的缩小feature map的大小。 主要设计原则如下:
|
||||
|
||||
- Conv1, Pool1, Conv2 和 Pool2 的stride分别是4, 2, 2 和 2。这样整个RDCL的stride就是32,可以很快把feature map的尺寸变小。
|
||||
- 卷积(或pooling)核太大速度就慢,太小覆盖信息又不足。文章权衡之后,将Conv1, Pool1, Conv2 和 Pool2 的核大小分别设为7x7,3x3,5x5,3x3
|
||||
- 使用CReLU来保证输出维度不变的情况下,减少卷积核数量。
|
||||
|
||||
**(2)Multiple Scale Convolutional Layers(MSCL)**
|
||||
|
||||
在网络后期,使用MSCL更好地检测不同尺度的人脸。 主要设计原则有:
|
||||
|
||||
- 类似于SSD,在网络的不同层进行检测;
|
||||
- 采用Inception模块。由于Inception包含多个不同的卷积分支,因此可以进一步使得感受野多样化。
|
||||
|
||||
**(3)Anchor densification strategy**
|
||||
|
||||
为了anchor密度均衡,可以对密度不足的anchor以中心进行偏移加倍,如下图所示:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Reference
|
||||
|
||||
https://github.com/amusi/awesome-object-detection
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
|
@ -10,5 +10,6 @@ xxx-xxx
|
|||
|
||||
**贡献者(排名不分先后):**
|
||||
2018-11-04 新增移动端开源框架部署,细节内容有待完善
|
||||
2018-11-18 新增10多个主流移动端开源框架介绍,细节内容有待完善
|
||||
|
||||
###########################################################
|
||||
|
|
|
|||