该算法由3个阶段组成:
-
第一阶段,通过CNN快速产生候选框体。
-
第二阶段,通过更复杂一点的CNN精炼候选窗体,丢弃大量的重叠窗体。
-
第三阶段,使用更强大的CNN,实现候选窗体去留,同时回归5个面部关键点。
第一阶段是使用一种叫做PNet(Proposal Network)的卷积神经网络,获得候选窗体和边界回归向量。同时,候选窗体根据边界框进行校准。然后利用非极大值抑制去除重叠窗体。
第二阶段是使用R-Net(Refine Network)卷积神经网络进行操作,将经过P-Net确定的包含候选窗体的图片在R-Net中训练,最后使用全连接网络进行分类。利用边界框向量微调候选窗体,最后还是利用非极大值抑制算法去除重叠窗体。
第三阶段,使用Onet(Output Network)卷积神经网络进行操作,该网络比R-Net多一层卷积层,功能与R-Net类似,只是在去除重叠候选窗口的同时标定5个人脸关键点位置。
MTCNN网络在经过3个卷积网络处理之前,先进行了多尺度变换,将一幅人脸图像缩放为不同尺寸的图片,这样就构成了图像金字塔。然后这些不同尺度的图像作为3个阶段的输入数据进行训练,这样可以令MTCNN检测到不同尺寸的人脸。MTCNN三个阶段所做的事情如下图:
NTCNN训练比较复杂,在代码中无需训练,直接使用现有模型即可达到满意效果。
论文地址:https://arxiv.org/pdf/1801.07698.pdf
论文代码:https://github.com/deepinsight/insightface
数据集:训练数据集:分别采用CASIA、VGGFACE2、MS1MV2、DeepGlint-Face(包括MS1M-Deepglin和Asian-Deepglin)
人脸验证数据集:LFW、YTF、CFP-FP、AGEDB-30
大姿态和大年龄数据集:CPLFW、CALFW
大规模图像数据集:MegaFace,IJB-B,IJB-C,Trillion-Pairs,iQIYI-VID(视频)
我们将特征向量L2归一化,权重L2归一化,他俩的夹角为θ,计算cos(θj),求反余弦arccos(θyi)得到特征xi与真实权值Wyi之间的夹角θyi,添加角度间隔m,再求余弦cos(θyj+m),将所有的log乘以特征尺度s,然后将logit送到softmax函数得到各类别概率。再用Ground Truth OneHot Vector一起算出交叉熵损失。
也就是DCNN特征和最后一个完全连接层之间的点积等于特征和权重归一化后的余弦距离。我们利用arc-cosine函数来计算当前特征和目标权重之间的角度。然后,在目标角上加上一个附加的角度间隔,用余弦函数重新计算逻辑回归的反向传播过程。然后,我们用一个固定的特征范数重新缩放。
同样的,提供现有模型,自己无需训练,目前支持resnet50,resnet18和mobilenet_v2模型。resnet50和resnet18参数量比较大,计算量较大,适合在PC服务器部署 ;而mobilenet_v2模型计算量较小,适合嵌入式,开发板,Android等终端部署。