AlphaTree : 深度神经网络模型总览

AI基础  收藏
0 / 970

AlphaTree : Graphic Deep Neural Network && GAN 深度神经网络(DNN)模型总览

在AI学习的漫漫长路上,理解不同文章中的模型与方法是每个人的必经之路,偶尔见到Fjodor van Veen所作的A mostly complete chart of Neural Networks 和 FeiFei Li AI课程中对模型的画法,大为触动。决定将深度神经网络中的一些模型 进行统一的图示,便于大家对模型的理解。

图示工作主要完成了object classification部分,部分还使用PlotNeuralNet link进行了更精美的绘制。 而其他的很多任务是基于object classification 去迁移的,因此不是每一个都需要模型绘制。

由于GAN工作的进展,使得相关工作达到可以进行总结的阶段,于是在2019年开启了GAN工作的总结。参考Mohammad KHalooei的教程,将GAN的发展分为四个level, 详细可见分目录 https://github.com/weslynn/AlphaTree-graphic-deep-neural-network/tree/master/GAN%E5%AF%B9%E6%8A%97%E7%94%9F%E6%88%90%E7%BD%91%E7%BB%9C

Content 目录

在了解这个计划之前,我们先了解一下各个方向的发展情况,用地铁图的形式绘制了第一个版本。第一个版本主要包括了图像方向的十二个子方向,里面列的模型,除了商业化的部分外,其他则选择了一些应用方向使用较多的开源模型。也许还有遗漏与不完善的地方,大家一起来更新吧。

大图链接

现在主要有如下方向

方向

每个方向上都记录了一些比较重要的模型结构。为了方便理解模型的变化,我们对模型进行统一的图示

LeNet网络

模型中用到的图标规定如下: 图标

当大家描述网络结构时,常常会将卷积层和maxpooling层画在一起,我们也提供了这样的简化方法

一个具体的问题是否能用人工智能,或者更进一步说用深度学习某个算法解决,首先需要人对问题进行分解,提炼成可以用机器解决的问题,譬如说分类问题,回归问题,聚类问题等。

PS:

简单3d神经网络数据变化 : ConvNetDraw(Cédric cbovar) :https://cbovar.github.io/ConvNetDraw/

3d 神经网络数据变化绘制 :PlotNeuralNet https://github.com/HarisIqbal88/PlotNeuralNet

caffe 模型可视化网址 http://ethereon.github.io/netscope/#/editor

论文查询网址 :https://www.semanticscholar.org/

Others’Collection 其他人汇总及模型比较

https://github.com/BertMoons/Comparing-CNN-Architectures

https://github.com/CeLuigi/models-comparison.pytorch

Object Classification 物体分类

LeNet 详解 detail Yann LeCun

AlexNet 详解 detail Alex Krizhevsky, Geoffrey Hinton

GoogLeNet 详解 detail Christian Szegedy / Google

Inception V3 详解 detail Christian Szegedy / Google

VGG 详解 detail Karen Simonyan , Andrew Zisserman / Visual Geometry Group(VGG)Oxford

  • VGG
    VGG-Net是2014年ILSVRC classification第二名(第一名是GoogLeNet),ILSVRC localization 第一名。VGG-Net的所有 convolutional layer 使用同样大小的 convolutional filter,大小为 3 x 3


单独看VGG19的模型:

[5] Simonyan, Karen, and Andrew Zisserman. "Very deep convolutional networks for large-scale image recognition." arXiv preprint arXiv:1409.1556 (2014). pdf

tensorflow 源码: https://github.com/tensorflow/models/blob/master/research/slim/nets/vgg.py

caffe :

vgg16 https://gist.githubusercontent.com/ksimonyan/211839e770f7b538e2d8/raw/0067c9b32f60362c74f4c445a080beed06b07eb3/VGG_ILSVRC_16_layers_deploy.prototxt

vgg19 https://gist.githubusercontent.com/ksimonyan/3785162f95cd2d5fee77/raw/f02f8769e64494bcd3d7e97d5d747ac275825721/VGG_ILSVRC_19_layers_deploy.prototxt

ResNet and ResNeXt详解 detail 何凯明 He Kaiming

结构采用grouped convolutions,减少了超参数的数量(子模块的拓扑结构一样),不增加参数复杂度,提高准确率。

[7] He, Kaiming, et al. "Aggregated Residual Transformations for Deep Neural Networks." arXiv preprint arXiv:1611.05431 . [pdf](https://arxiv.org/pdf/1611.05431.pdf) (ResNet,Very very deep networks, CVPR best paper) 


torch https://github.com/facebookresearch/ResNeXt

Inception-Resnet-V2详解 detail Christian Szegedy / Google

Inception Resnet V2是基于Inception V3 和 ResNet结构发展而来的一个网络。在这篇paper中,还同期给出了Inception V4.

[8] Christian Szegedy, et al. “Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning” arXiv preprint arXiv:1602.07261 (2015). pdf

github链接: https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_resnet_v2.py

DenseNet详解 detail 黄高Gao Huang, 刘壮Zhuang Liu

作者发现(Deep networks with stochastic depth)通过类似Dropout的方法随机扔掉一些层,能够提高ResNet的泛化能力。于是设计了DenseNet。 DenseNet 将ResNet的residual connection 发挥到了极致,它做了两个重要的设计,一是网络的每一层都直接与其前面层相连,实现特征的重复利用,第二是网络的每一层都很窄,达到降低冗余性的目的。

DenseNet很容易训练,但是它有很多数据需要重复使用,因此显存占用很大。不过现在的更新版本,已经通过用时间换空间的方法,将DenseLayer(Contact-BN-Relu_Conv)中部分数据使用完就释放,而在需要的时候重新计算。这样增加少部分计算量,节约大量内存空间。

[9] Gao Huang,Zhuang Liu, et al. DenseNet:2016,Densely Connected Convolutional Networks arXiv preprint arXiv:1608.06993 . pdf CVPR 2017 Best Paper [10]Geoff Pleiss, Danlu Chen, Gao Huang, et al.Memory-Efficient Implementation of DenseNets. pdf

github链接: torch https://github.com/liuzhuang13/DenseNet

pytorch https://github.com/gpleiss/efficient_densenet_pytorch

caffe https://github.com/liuzhuang13/DenseNetCaffe

DPN详解 detail 颜水成

之前我们已经了解了ResNet 和 DenseNet,ResNet使用的是相加(element-wise adding),DenseNet则使用的是拼接(concatenate)。

DPN把DenseNet和ResNet联系到了一起,该神经网络结合ResNet和DenseNet的长处,共享公共特征,并且通过双路径架构保留灵活性以探索新的特征。在设计上,采用了和ResNeXt一样的group操作。

它在在图像分类、目标检测还是语义分割领域都有极大的优势,可以去看2017 ImageNet NUS-Qihoo_DPNs 的表现。

[11]Yunpeng Chen, Jianan Li, Huaxin Xiao, Xiaojie Jin, Shuicheng Yan, Jiashi Feng.Dual Path Networks pdf

github链接:

MxNet https://github.com/cypw/DPNs (官方)

caffe:https://github.com/soeaver/caffe-model

PolyNet [Xingcheng Zhang] 林达华[Dahua Lin] / CUHK-MMLAB & 商汤科技 详解 detail

这个模型在Inception_ResNet_v2 的基础上,替换了之前的Inception module,改用 PolyInception module 作为基础模块,然后通过数学多项式来组合设计每一层网络结构。因此结构非常复杂。

PolyNet在ImageNet大规模图像分类测试集上获得了single-crop错误率4.25%和multi-crop错误率3.45%。在ImageNet2016的比赛中商汤科技与香港中大-商汤科技联合实验室在多项比赛中选用了这种网络结构并取得了三个单项第一的优异成绩。

提供了caffe的proto 和模型。 caffe:https://github.com/CUHK-MMLAB/polynet

模型结构图 (官方) http://ethereon.github.io/netscope/#/gist/b22923712859813a051c796b19ce5944 https://raw.githubusercontent.com/CUHK-MMLAB/polynet/master/polynet.png

[12] Xingcheng Zhang, Zhizhong Li, ChenChange Loy, Dahua Lin,PolyNet: A Pursuit of Structural Diversity in Very Deep Networks.2017 pdf

SENet 详解 detail

Momenta 提出的SENet 获得了最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军。 它在结构中增加了一个se模块,通过Squeeze 和 Excitation 的操作,学习自动获取每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

[13] Squeeze-and-Excitation Networks pdf

caffe:https://github.com/hujie-frank/SENet

NASNet Google

这是谷歌用AutoML(Auto Machine Learning)在500块GPU上自行堆砌convolution cell(有两种cell )设计的网络。性能各种战胜人类设计。

[14]Learning Transferable Architectures for Scalable Image Recognitionpdf

github链接: https://github.com/tensorflow/models/blob/master/research/slim/nets/nasnet/nasnet.py

https://github.com/yeephycho/nasnet-tensorflow


轻量级模型 & 剪枝

随着模型结构的发展,在很多机器智能领域,深度神经网络都展现出了超人的能力。但是,随着准确率的提升,这些网络也需要更多的计算资源和运行时的内存,这些需求使得高精度的大型网络无法在移动设备或者嵌入式系统上运行。

于是从应用角度发展了另外一条支线,着重在于轻量化模型的设计与发展。它的主要思想在于从卷积层的设计来构建更高效的网络计算方式,从而使网络参数减少的同时,不损失网络性能。

除了模型的设计,还有Deep Compression ,剪枝等多种方法将模型小型化。

SqueezeNet使用bottleneck方法设计一个非常小的网络,使用不到1/50的参数(125w --- 1.25million)在ImageNet上实现AlexNet级别的准确度。 MobileNetV1使用深度可分离卷积来构建轻量级深度神经网络,其中MobileNet-160(0.5x),和SqueezeNet大小差不多,但是在ImageNet上的精度提高4%。 ShuffleNet利用pointwise group卷积和channel shuffle来减少计算成本并实现比MobileNetV1更高的准确率。 MobileNetV2基于inverted residual structure with linear bottleneck,改善了移动模型在多个任务和基准测试中的最新性能。mNASNet是和NASNet一样强化学习的构造结果,准确性略优于MobileNetV2,在移动设备上具有比MobileNetV1,ShuffleNet和MobileNetV2更复杂的结构和更多的实际推理时间。(总结出自MobileFaceNets)

“ With the same accuracy, our MnasNet model runs 1.5x faster than the hand-crafted state-of-the-art MobileNetV2, and 2.4x faster than NASNet, which also used architecture search. After applying the squeeze-and-excitation optimization, our MnasNet+SE models achieve ResNet-50 level top-1 accuracy at 76.1%, with 19x fewer parameters and 10x fewer multiply-adds operations. On COCO object detection, our model family achieve both higher accuracy and higher speed over MobileNet, and achieves comparable accuracy to the SSD300 model with 35x less computation cost.

在相同的准确率下,MnasNet 模型的速度比手工调参得到的当前最佳模型 MobileNet V2 快 1.5 倍,并且比 NASNet 快 2.4 倍,它也是使用架构搜索的算法。在应用压缩和激活(squeeze-and-excitation)优化方法后,MnasNet+SE 模型获得了 76.1% 的 ResNet 级别的 top-1 准确率,其中参数数量是 ResNet 的 1/19,且乘法-加法运算量是它的 1/10。在 COCO 目标检测任务上,我们的MnasNet模型系列获得了比 MobileNet 更快的速度和更高的准确率,并在 1/35 的计算成本下获得了和 SSD300 相当的准确率。” https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html

网络名称 最早公开日期 发表情况 作者团队 链接
SqueezeNet 2016.02 ICLR2017 Berkeley&Stanford codepdf
MobileNet 2016.04 CVPR2017 Google code code
ShuffleNet 2016.06 CVPR2017 Face++ code
Xception 2016.10 ---- Google
MobileNetV2 2018.01 ---- Google code
ShuffleNet V2 2018.07 ECCV2018 Face++ pdf
MorphNet 2018.04 ---- Google code
MnasNet 2018.07 ---- Google pdf
EfficientNet 2019.06 ICML2019 Google code

ShuffleNet 论文中引用了 SqueezeNet;Xception 论文中引用了 MobileNet

CNN网络时间消耗分析

对于一个卷积层,假设其大小为 h \times w \times c \times n (其中c为#input channel, n为#output channel),输出的feature map尺寸为 H' \times W' ,则该卷积层的

paras = n \times (h \times w \times c + 1) FLOPS= H' \times W' \times n \times(h \times w \times c + 1) 即#FLOPS= H' \times W' \times #paras

但是虽然Conv等计算密集型操作占了其时间的绝大多数,但其它像Elemwise/Data IO等内存读写密集型操作也占了相当比例的时间

ShuffleNet_V1与MobileNet_V2上的时间消耗分析

从上图中可看出,因此像以往那样一味以FLOPs来作为指导准则来设计CNN网络是不完备的,虽然它可以反映出占大比例时间的Conv操作。 --------此处来自shufflenet v2

SqueezeNet

SqueezeNet 的核心在于 Fire module,Fire module 由两层构成,分别是 squeeze 层+expand 层,squeeze 层是一个 1×1 卷积核的卷积层,对上一层 feature map 进行卷积,主要目的是减少 feature map 的维数,expand 层是 1×1 和 3×3 卷积核的卷积层,expand 层中,把 1×1 和 3×3 得到的 feature map 进行 concat。

[1]AlexNet-level accuracy with 50x fewer parameters and <0.5MBpdf

github链接: caffe: https://github.com/DeepScale/SqueezeNet

MobileNet 详解 detail Google

MobileNet 顾名思义,可以用在移动设备上的网络,性能和效率取得了很好平衡。它发展了两个版本,第一个版本基本结构和VGG类似,主要通过 depthwise separable convolution 来减少参数和提升计算速度。 第二代结合了ResNet的特性,提出了一种新的 Inverted Residuals and Linear Bottleneck。性能优于对应的NasNet。

mobilenetv2_compare

MobileNet v1:2017,MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

mobilenet_struct

MobileNet v2:2018,Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation

mobilenetv2_struct

TensorFlow实现:

https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.py

https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_v2.py

caffe实现:https://github.com/pby5/MobileNet_Caffe

Xception

ShuffleNet

手机端caffe实现:https://github.com/HolmesShuan/ShuffleNet-An-Extremely-Efficient-CNN-for-Mobile-Devices-Caffe-Reimplementation caffe实现:https://github.com/camel007/Caffe-ShuffleNet

shufflenet v2

https://arxiv.org/abs/1807.11164

MorphNet

NasNet和 AdaNet 等方法会通过搜索从零开始设计一个网络,但是考虑到搜索需要的计算资源和时间,成本太昂贵的。如何利用现有架构来进行优化, 谷歌研究人员提出一种神经网络模型改进的复杂方法 MorphNet。 MorphNet: Fast & Simple Resource-Constrained Structure Learning of Deep Networks, MorphNet 将现有神经网络作为输入,为新问题生成规模更小、速度更快、性能更好的新神经网络。

https://github.com/google-research/morph-net

MorphNet 通过收缩和扩展阶段的循环来优化神经网络。在收缩阶段,MorphNet 通过稀疏性正则化项(sparsifying regularizer)识别出效率低的神经元,并将它们从网络中去除,因而该网络的总损失函数包含每一神经元的成本。但是对于所有神经元,MorphNet 没有采用统一的成本度量,而是计算神经元相对于目标资源的成本。随着训练的继续进行,优化器在计算梯度时是了解资源成本信息的,从而得知哪些神经元的资源效率高,哪些神经元可以去除。

MnasNet

[5]MnasNet: Platform-Aware Neural Architecture Search for Mobilepdf

EfficientNet google

使用一个简单而高效的复合系数来以更结构化的方式放大 CNNs。 不像传统的方法那样任意缩放网络维度,如宽度,深度和分辨率,该论文的方法用一系列固定的尺度缩放系数来统一缩放网络维度。 通过使用这种新颖的缩放方法和 AutoML技术,最高达10倍的效率(更小、更快)。 https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

other

pytorch pretrained-model https://github.com/Cadene/pretrained-models.pytorch

人脸检测与识别

概述 :https://arxiv.org/pdf/1804.06655.pdf

FaceDetection

FaceDetection

Face Detection and Face Alignment 人脸检测与矫正

人脸检测与识别是一个研究很久的课题。传统方法之前也有了很多稳定可行的方法。而深度学习的出现,无论对检测还是识别又有了很大的提升。随着算法和代码的开源,现在很多公司都可以自己搭建一套自己的人脸检测识别系统。那么下面几篇经典论文,都是会需要接触到的。

在了解深度学习算法之前,也要了解一下传统的方法:如 harr特征( 2004 Viola和Jones的《Robust Real-Time Face Detection》),LAP(Locally Assembled Binary)等。LAP是结合haar特征和LBP(local binary pattern)特征,把不同块的haar特征按照lbp的编码方法形成一个编码。

常见的人脸检测开源算法可以使用 opencv dlib seetaface等。seetafce采用了多种特征(LAB、SURF、SIFT)和多种分类器(boosted、MLP)的结合。

深度学习最早的代表作之一是2015年CVPR的 CascadeCNN 。

CascadeCNN详解 detail

H. Li, Z. Lin, X. Shen, J. Brandt, and G. Hua, “A convolutional neuralnetwork cascade for face detection,” in IEEE Conference on ComputerVision and Pattern Recognition, 2015, pp. 5325-5334. 这篇文章保留了传统人脸检测方法中Cascade的概念,级联了6个CNN,使用3种输入大小分别为12、24、48的浅层网络,一类为分类网络(12-net,24...):2分类,判断是不是人脸,同时产生候选框,一类是矫正网络(12-Calibration-net,24...)它们是45分类(当时训练的时候将每一个正样本进行scale、x轴、y轴变换(共45种变换),生成45张图片)对候选框进行位置矫正。在每个分类网络之后接一个矫正网络用于回归人脸框的位置。

对比传统人脸检测方法,CascadeCNN将Cascade级联结构中每个stage中CNN的分类器代替了传统的分类器;2. 每个分类stage之后应用了一个矫正网络使得人脸框的位置更为精确。该论文是当时基于CNN的人脸检测方法中速度最快的

cascade

MTCNN 详解 detail zhang kaipeng 乔宇 Qiao Yu / CUHK-MMLAB & SIAT

  • MTCNN MTCNN 将人脸检测与关键点检测放到了一起来完成。整个任务分解后让三个子网络来完成。每个网络都很浅,使用多个小网络级联,较好的完成任务。

mtcnn

[1] [ECCV2016] Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks pdf

Caffe 源码:https://github.com/kpzhang93/MTCNN_face_detection_alignment 官方

tensorflow 源码 : https://github.com/davidsandberg/facenet/tree/master/src/align


Landmark Localization 68 points


从技术实现上可将人脸关键点检测分为2大类:生成式方法(Generative methods) 和 判别式方法(Discriminative methods)。 Generative methods 构建人脸shape和appearance的生成模型。这类方法将人脸对齐看作是一个优化问题,来寻找最优的shape和appearance参数,使得appearance模型能够最好拟合输入的人脸。这类方法包括:

ASM(Active Shape Model) 1995 AAM (Active Appearnce Model) 1998

Discriminative methods直接从appearance推断目标位置。这类方法通常通过学习独立的局部检测器或回归器来定位每个面部关键点,然后用一个全局的形状模型对预测结果进行调整,使其规范化。或者直接学习一个向量回归函数来推断整个脸部的形状。这类方法包括传统的方法以及最新的深度学习方法:

Constrained local models (CLMs) 2006 https://github.com/TadasBaltrusaitis/CLM-framework Deformable part models (DPMs) 基于级联形状回归的方法(Cascaded regression) 2010 CPR(Cascaded Pose Regression) ESR https://github.com/soundsilence/FaceAlignment ERT(Ensemble of Regression Trees) dlib: One Millisecond Face Alignment with an Ensemble of Regression Trees. http://www.csc.kth.se/~vahidk/papers/KazemiCVPR14.pdf https://github.com/davisking/dlib Face Alignment at 3000 FPS cvpr2013, https://github.com/yulequan/face-alignment-in-3000fps

FacePoint

深度学习:

face++ DCNN

2013 香港中文大学汤晓欧,SunYi等人作品,首次将CNN用于人脸关键点检测。总体思想是由粗到细,实现5个人脸关键点的精确定位。网络结构分为3层:level 1、level 2、level 3。每层都包含多个独立的CNN模型,负责预测部分或全部关键点位置,在此基础上平均来得到该层最终的预测结果。

TCDCN VanillaCNN TCNN(Tweaked Convolutional Neural Networks)

TCDCN Facial Landmark Detection by Deep Multi-task Learning http://mmlab.ie.cuhk.edu.hk/projects/TCDCN.html VanillaCNN

DAN Deep-Alignment-Network

https://github.com/MarekKowalski/DeepAlignmentNetwork

##LAB (LAB-Look at Boundary A Boundary-Aware Face Alignment Algorithm ) 2018cvpr 清华&商汤作品。借鉴人体姿态估计,将边界信息引入关键点回归上。网络包含3个部分:边界热度图估计模块(Boundary heatmap estimator),基于边界的关键点定位模块( Boundary-aware landmarks regressor )和边界有效性判别模块(Boundary effectiveness discriminator)


过去二十年来,人脸识别要解决的关键问题还是如何寻找合适特征的算法,主要经过了四个阶段。

第一个阶段Holistci Learning,通过对图片进行空间转换,得到满足假设的一定分布的低维表示 ,如线性子空间,稀疏表示等等。这个想法在20世纪90年代占据了FR的主导地位 2000年。

然而,一个众所周知的问题是这些理论上合理的算法无法解决很多异常的问题,当人脸变化偏离了先前的假设,算法就失效了。 在21世纪初,这个问题引起了以Local handcraft算子为主的研讨。 出现了Gabor 算子和LBP算子,及它们的多层和高维扩展。局部算子的一些不变属性表现出了强大的性能。

不幸的是,手工设计的算子缺乏独特性和紧凑性,在海量数据处理表现出局限性。 在2010年初,基于浅层学习的算法被引入,尝试用两层网络来学习,之后,出现了深度学习的方法,使用多层神经网络来进行特征提取和转换。

Osadchy, Margarita, Yann Le Cun, and Matthew L. Miller. "Synergistic face detection and pose estimation with energy-based models." The Journal of Machine Learning Research 8 (2007): 1197- 1215.

2014年,DeepFace 和DeepID第一次在不受约束的情景超越了人类的表现。从那时起,研究 重点已转向基于深度学习的方法。

FaceDetection1

FaceRecognition

face Recognition

DeepFace是FaceBook提出来的,后续有DeepID和FaceNet出现。DeepFace是第一个真正将大数据和深度神经网络应用于人脸识别和验证的方法,人脸识别精度接近人类水平,可以谓之CNN在人脸识别的奠基之作

之后Facenet跳出了分类问题的限制,而是构建了一种框架,通过已有的深度模型,训练一个人脸特征。然后用这个人脸特征来完成人脸识别,人脸验证和人脸聚类。

Deep Face

DeepFace 在算法上并没有什么特别的创新,它的改进在于对前面人脸预处理对齐的部分做了精细的调整,结果显示会有一定的帮助,但是也有一些疑问,因为你要用 3D Alignment(对齐),在很多情况下,尤其是极端情况下,可能会失败。

DeepFace: Closing the Gap to Human-Level Performance in Face Verification

DeepFace1

DeepFace2

DeepFacemodel

DeepID

DeepID 还是将人脸作为一个分类问题来解决,而从facenet开始,则是通过设计不同的loss,端对端去学习一个人脸的特征。这个特征 在欧式空间 或者高维空间,能够用距离来代表人脸的相似性。

VGGFace

faceloss

Facenet 详解 detail

和物体分类这种分类问题不同,Facenet是构建了一种框架,通过已有的深度模型,结合不同loss,训练一个很棒的人脸特征。它直接使用端对端的方法去学习一个人脸图像到欧式空间的编码,这样构建的映射空间里的距离就代表了人脸图像的相似性。然后基于这个映射空间,就可以轻松完成人脸识别,人脸验证和人脸聚类。

[CVPR2015] Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering[J]. arXiv preprint arXiv:1503.03832, 2015.pdf

Model name LFW accuracy Training dataset Architecture

20170511-185253 0.987 CASIA-WebFace Inception ResNet v1

20170512-110547 0.992 MS-Celeb-1M Inception ResNet v1

它使用现有的模型结构,然后将卷积神经网络去掉sofmax后,经过L2的归一化,然后得到特征表示,之后基于这个特征表示计算Loss。文章中使用的结构是ZFNetGoogLeNet,tf代码是改用了Inception_resnet_v1。

Loss的发展: 文中使用的Loss 是 triplet loss。后来相应的改进有ECCV2016的 center loss,SphereFace,2018年的AMSoftmax和ArchFace(InsightFace),现在效果最好的是ArchFace(InsightFace)。

loss1

loss2

https://github.com/davidsandberg/facenet/blob/master/src/models/inception_resnet_v1.py

tensorflow 源码 :https://github.com/davidsandberg/facenet

caffe center loss:https://github.com/kpzhang93/caffe-face

mxnet center loss :https://github.com/pangyupo/mxnet_center_loss

caffe sphereface: https://github.com/wy1iu/sphereface

deepinsight: https://github.com/deepinsight/insightface

AMSoftmax :https://github.com/happynear/AMSoftmax

github:https://github.com/cmusatyalab/openface 基于谷歌的文章《FaceNet: A Unified Embedding for Face Recognition and Clustering》。openface是卡内基梅隆大学的 Brandon Amos主导的。 B. Amos, B. Ludwiczuk, M. Satyanarayanan, "Openface: A general-purpose face recognition library with mobile applications," CMU-CS-16-118, CMU School of Computer Science, Tech. Rep., 2016.

SeetaFace

Detection: Funnel-Structured Cascade for Multi-View Face Detection with Alignment-Awareness

2016

中科院山世光老师开源的人脸识别引擎—SeetafaceEngine,主要实现下面三个功能: SeetaFace Detection SeetaFace Alignment SeetaFace Identification

github:https://github.com/seetaface/SeetaFaceEngine

OpenFace

主要在Landmark Detection,Landmark and head pose tracking,Facial Action Unit Recognition等,其中Facial Action Unit Recognition是个比较有意思的点,该项目给出一个脸部的每个AU的回归分数和分类结果。

Detect faces with a pre-trained models from dlib or OpenCV. Transform the face for the neural network. This repository uses dlib's real-time pose estimation with OpenCV's affine transformation to try to make the eyes and bottom lip appear in the same location on each image.

github:https://github.com/TadasBaltrusaitis/OpenFace


轻量级人脸识别模型

这个研究得比较少,主要是分两个方面:

一种是设计一个小型网络,从头开始训。这种包括LmobileNetE(112M),lightCNN (A light cnn for deep face representation with noisy labels. arXiv preprint), ShiftFaceNet(性能能有点差 LFW 96%),MobileFaceNet等

一种是从大模型进行knowledge distillation 知识蒸馏得到小模型。包括从DeepID2 进行teacher-student训练得到MobileID,从FaceNet预训练模型继续训MobileNetV1等。

MobileFaceNet

这个模型主要就是用类MobileNet V2的结构,加上ArcFace的loss进行训练。


3d face

3D人脸重建主要有两种方式,一种是通过多摄像头或者多帧图像的关键点匹配(Stereo matching),重建人脸的深度信息,或者深度相机,从而得到模型,另一种是通过预先训练好的人脸模型(3d morphable model),拟合单帧或多帧RGB图像或深度图像,从而得到3d人脸模型的个性化参数。

深度学习在3d face的研究着重在第二个。

由于Blanz和Vetter在1999年提出3D Morphable Model(3DMM)(Blanz, V., Vetter, T.: A morphable model for the synthesis of 3d faces. international conference on computer graphics and interactive techniques (1999)),成为最受欢迎的单图3D面部重建方法。早期是针对特殊点的对应关系(可以是关键点 也可以是局部特征点)来解非线性优化函数,得到3DMM系数。然而,这些方法严重依赖于高精度手工标记或者特征。

首先,2016年左右,CNN的尝试主要是用级联CNN结构来回归准确3DMM系数,解决大姿态下面部特征点定位问题。但迭代会花费大量时间

3DDFA: Face Alignment Across Large Poses- A 3D Solution CVPR2016

http://www.cbsr.ia.ac.cn/users/xiangyuzhu/projects/3DDFA/main.htm

自动化所作品, 解决极端姿态下(如侧脸),一些特征点变了不可见,不同姿态下的人脸表观也存在巨大差异使得关键点定位困难等问题

本文提出一种基于3D人脸形状的定位方法3DDFA,算法框架为: (1) 输入为100x100的RGB图像和PNCC (Projected No