计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

以下为你介绍的计算机视觉库/人脸识别软件都可用在Linux系统上:InsightFace(2D/3D 人脸分析项目)、StyleGAN(基于 TensorFlow 的人脸图像生成器)、YOLOv3-model-pruning(人手检测)。

1、InsightFace(2D/3D 人脸分析项目)

InsightFace 是一个 2D/3D 人脸分析项目。

InsightFace的代码是在MIT许可下发布的。对于acadmic和商业用途没有限制。包含注释的训练数据(以及使用这些数据训练的模型)仅可用于非商业研究目的。

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

在此存储库中,我们提供用于深度识别的训练数据,网络设置和损失设计。训练数据包括标准化的MS1M,VGG2和CASIA-Webface数据集,这些数据集已经以MXNet二进制格式打包。网络主干包括ResNet,MobilefaceNet,MobileNet,InceptionResNet_v2,DenseNet,DPN。 损失函数包括Softmax,SphereFace,CosineFace,ArcFace和Triplet(Euclidean/Angular)Loss。

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

我们的方法ArcFace最初在arXiv技术报告中描述。通过使用此存储库,您可以通过单个模型简单地实现LFW 99.80%+和Megaface 98%+。该存储库可以帮助研究人员/工程师通过两个步骤快速开发深度识别算法:下载二进制数据集并运行训练脚本。

关于引文:

如果您发现InsightFace对您的研究有用,请考虑引用以下相关论文:

@inproceedings{deng2019retinaface,

title={RetinaFace: Single-stage Dense Face Localisation in the Wild},

author={Deng, Jiankang and Guo, Jia and Yuxiang, Zhou and Jinke Yu and Irene Kotsia and Zafeiriou, Stefanos},

booktitle={arxiv},

year={2019}

}

@inproceedings{guo2018stacked,

 title={Stacked Dense U-Nets with Dual Transformers for Robust Face Alignment},

 author={Guo, Jia and Deng, Jiankang and Xue, Niannan and Zafeiriou, Stefanos},

 booktitle={BMVC},

 year={2018}

}

@article{deng2018menpo,

 title={The Menpo benchmark for multi-pose 2D and 3D facial landmark localisation and tracking},

 author={Deng, Jiankang and Roussos, Anastasios and Chrysos, Grigorios and Ververas, Evangelos and Kotsia, Irene and Shen, Jie and Zafeiriou, Stefanos},

 journal={IJCV},

 year={2018}

}

@inproceedings{deng2018arcface,

title={ArcFace: Additive Angular Margin Loss for Deep Face Recognition},

author={Deng, Jiankang and Guo, Jia and Niannan, Xue and Zafeiriou, Stefanos},

booktitle={CVPR},

year={2019}

}

下载地址:https://github.com/deepinsight/insightface

2、StyleGAN(基于 TensorFlow 的人脸图像生成器)

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

StyleGAN 是官方的 TensorFlow 实现,用于生成人脸图像。

注:上图的人不是真实的,他们由生成器生成。

该库基于论文《用于生成对抗网络的基于样式的生成器架构》(A Style-Based Generator Architecture for Generative Adversarial Networks)进行实现:

论文摘要:我们提出了一种用于生成对抗网络的替代生成器架构,借鉴了样式转移文献。新的架构导致高级属性的自动学习,无监督分离(例如,在人脸上训练时的姿势和身份)和生成的图像(例如,雀斑,头发)中的随机变化,它可以实现对合成的直观、特定尺度控制。新的生成器在传统的分布质量指标方面采用了最先进的技术,形成明显更好的插值特性,并且更好地解开了潜在的变异因素。为了量化插值质量,我们提出了两种新的自动化方法。最后,我们介绍了一个新的、高度多样化和高质量的人脸数据集。

系统要求:

1]、Linux 和 Windows 都受支持,但出于性能和兼容性的原因,强烈建议使用 Linux。

2]、64 位 Python 3.6。推荐使用 numpy 1.14.3 或更新的 Anaconda3。

3]、TensorFlow 1.10.0 或更高版本,支持 GPU。

4]、一个或多个具有至少 11GB DRAM 的高端 NVIDIA GPU。我们推荐配备 8 个 Tesla V100 GPU 的 NVIDIA DGX-1。

5]、NVIDIA 驱动程序 391.35 或更高版本,CUDA 工具包 9.0 或更高版本,cuDNN 7.3.1 或更高版本。

下载地址:https://github.com/NVlabs/stylegan

3、YOLOv3-model-pruning(人手检测)

用 YOLOv3 模型在一个开源的人手检测数据集 oxford hand 上做人手检测,并在此基础上做模型剪枝。对于该数据集,对 YOLOv3 进行 channel pruning 之后,模型的参数量、模型大小减少 80%,FLOPs 降低 70%,前向推断的速度可以达到原来的 200%,同时可以保持 mAP 基本不变(这个效果只是针对该数据集的,不一定能保证在其他数据集上也有同样的效果,之后有时间的话会在其他数据集上进行测试)。

环境:

Python3.6、Pytorch 1.0及以上。

YOLOv3 的实现参考了 eriklindernoren 的 PyTorch-YOLOv3(地址:https://github.com/eriklindernoren/PyTorch-YOLOv3),因此代码的依赖环境也可以参考其 repo。

数据集准备:

1]、下载数据集,得到压缩文件。

2]、将压缩文件解压到 data 目录,得到 hand_dataset 文件夹。

3]、在 data 目录下执行 converter.py,生成 images、labels 文件夹和 train.txt、valid.txt 文件。训练集中一共有 4087 张图 片,测试集中一共有 821 张图片。

正常训练(Baseline):

python train.py --model_def config/yolov3-hand.cfg

剪枝算法介绍:

本代码基于论文 Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017) 进行改进实现的 channel pruning算法,类似的代码实现还有这个 yolov3-network-slimming。原始论文中的算法是针对分类模型的,基于 BN 层的 gamma 系数进行剪枝的。本项目用到的剪枝算法不限于 YOLOv3 模型,稍作改进理论上也是可以移植到其他目标检测模型的。

剪枝算法的步骤:

1]、进行稀疏化训练:

python train.py --model_def config/yolov3-hand.cfg -sr --s 0.01

2]、基于 test_prune.py 文件进行剪枝(通过设定合理的剪枝规则),得到剪枝后的模型。

3]、对剪枝后的模型进行微调(本项目对原算法进行了改进,实验过程中发现即使不经过微调也能达到较高的 mAP):

python train.py --model_def config/prune_yolov3-hand.cfg -pre checkpoints/prune_yolov3_ckpt.pth

稀疏训练过程的可视化:

1]、所有 BN 的 gamma 系数的五个五分位点随时间的变化图:

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

经过 10 次迭代后,60%的 gamma 系数已趋向于 0,40 次迭代后 80% 的 gamma 系数已趋向于 0。

2]、YOLOv3中第一个 BN 层的 gamma 系数随迭代次数的变化情况:

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

随着模型的更新,部分 gamma 系数逐步趋向于 0(表明其重要性逐渐削弱),而部分 gamma 系数能够保持其权重(表明其对网络的输出有一定的重要性)。

3]、所有 BN 的 gamma 系数的分布随迭代次数的变化:

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

分布的重心逐渐向 0 靠近,但并没有全部衰减为 0,表明 gamma 系数逐渐变得稀疏。

剪枝前后的对比:

1]、下图为对部分卷积层进行剪枝前后通道数的变化:

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

2]、部分卷积层的通道数大幅度减少,如下图表格:

计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning介绍

加入稀疏正则项之后,mAP 反而更高了(在实验过程中发现,其实 mAP上下波动 0.02 是正常现象),因此可以认为稀疏训练得到的 mAP 与正常训练几乎一致。将 prune 后得到的模型进行 finetune 并没有明显的提升,因此剪枝三步可以直接简化成两步。剪枝前后模型的参数量、模型大小降为原来的 1/6,FLOPs 降为原来的 1/3,前向推断的速度可以达到原来的 2 倍,同时可以保持 mAP 基本不变。需要明确的是,上面表格中剪枝的效果是只是针对该数据集的,不一定能保证在其他数据集上也有同样的效果。

下载地址:https://github.com/Lam1360/YOLOv3-model-pruning

注明

以上就是计算机视觉库/人脸识别InsightFace、StyleGAN、YOLOv3-model-pruning的介绍内容,这些计算机视觉库/人脸识别软件都能使用在Linux操作系统中。

栏目相关文章