初识人脸检测(Mtcnn运行测试)

2020.7.16 阴(科研日记第一天)
目录
环境搭建
结构原理
运行测试

  • 环境搭建
语言:python 3.6
框架:tensorflow-gpu==1.13
keras==2.1.5
工具:cuda 10.0+cudnn 7.4.1.5
平台:vscode

之前环境搭建对于我来讲是个黑盒,学习配置一次之后大致理清楚了深度学习环境搭建的脉络,关于具体怎么配置,我讲两件事,一件事关于anaconda,一件事关于cuda和cudnn。

1.关于Anaconda: ps:Anaconda是一个好东西,有了它,语言/框架/平台问题都能解决,搭建环境成了工业化流程,一站式服务。让我们来看看Anaconda有哪些金牌服务吧。
1.基础服务:提供各种版本python,包管理器conda以及各种库和运行平台的下载。
关于怎么下载,主要有三种方式:
(1)conda命令(2)pip命令 (3)anaconda navigator图形界面管理下载
#conda包管理器不仅限于python语言包,跨平台的包和环境管理器;会处理包之间的依赖,避免包冲突兼容问题 conda install xxxxxx #pip包管理器仅限python语言包 pip install xxxxxx

初识人脸检测(Mtcnn运行测试)
文章图片

另外由于anaconda的默认服务器是国外的,下载速度会异常慢,因此我们第一步需要设置一下服务器为我们国内的镜像源,有清华源/中科大源/豆瓣源等。不同命令切换方式如下:
(1)conda切换清华源
在anaconda prompt中输入:
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/cloud/conda-forge conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/cloud/mysys2/ conda config --set show_channel_urls yes #设置搜索时显示通道地址

(2)pip切换中科大源
建立含有以下代码的pip.ini文件(先建立txt文件,再修改后缀名),存储在"用户"文件夹下的pip文件夹。
[global] index-url = http://pypi.mirrors.ustc.edu.cn/simple [install] use-mirrors =true mirrors =http://pypi.mirrors.ustc.edu.cn/simple/ trusted-host =pypi.mirrors.ustc.edu.cn

初识人脸检测(Mtcnn运行测试)
文章图片

2.虚拟环境的设置:每个环境可以配置不同的语言版本和深度学习框架,什么样的算法都来,什么环境都可以配。这就心里踏实多了。
conda create -n 环境名 python==版本

2.关于CUDA和cudnn: anaconda已经解决语言/框架/平台问题,剩下就是工具了。其实这个工具也可以用conda命令下载(用conda命令下载tensorflow-gpu的时候会自动下载cuda和cudnn,这就是之前讲的conda包管理器的兼容性,用pip命令则不会捆绑下载),但是由于CUDA和cudnn对深度学习库的版本匹配特别敏感,而且为了适应不同算法的版本要求,所以一般还是单独拿出来安装。
其实还是奇怪哈,cuda和cudnn到底是做什么的。这就得从显卡说起,目前GPU主要是两大厂商,一个是英明神武的英伟达Nvidia,一个是AMD,俗称n卡和A卡。目前支持深度学习库的且应用广泛的是英伟达,AMD主要是游戏领域,在深度学习领域目前发言权是不大滴,所以英明神武get了吧。那cuda和cudnn呢,就是英伟达家的给显卡运行配备的包。(跟驱动不一样哈,驱动是显卡和操作系统之间的API)。既然是包,那么就和咱们普通的numpy啊matplotlib啥的本质上没啥区别,所以一张显卡上是可以安装多个版本的cuda的。在win系统上,安装多个版本的cuda需注意:自定义安装仅仅选择安装cuda,不要安装other components和driver components(驱动)。至于安装多个包会不会冲突,答案是不会,因为每个包都在系统的环境变量里,程序运行的时候会搜索所有的cuda,直到找到匹配的,所以只需要保证环境变量里面有各个版本的cuda路径即可。
初识人脸检测(Mtcnn运行测试)
文章图片

初识人脸检测(Mtcnn运行测试)
文章图片

至于cuda和cudnn的关系,版本必须匹配,cudnn是cuda的包,头文件啊库啊啥的,所以就是下载解压之后粘贴到cuda文件夹里面即可。
  • 结构原理
图像金字塔——P-Net——R-Net——O-Net
初识人脸检测(Mtcnn运行测试)
文章图片

图像金字塔:首先将图像进行不同尺度的变换,构建图像金字塔,以适应不同大小的人脸的进行检测。
P-Net:Proposal Network。对上一步构建完成的图像金字塔,通过一个FCN进行初步特征提取与标定边框,并进行Bounding-Box Regression调整窗口与NMS进行大部分窗口的过滤。P-Net是一个人脸区域的区域建议网络,该网络的将特征输入结果三个卷积层之后,通过一个人脸分类器判断该区域是否是人脸,同时使用边框回归和一个面部关键点的定位器来进行人脸区域的初步提议,该部分最终将输出很多张可能存在人脸的人脸区域。
初识人脸检测(Mtcnn运行测试)
文章图片

R-Net:Refine Network,其基本的构造是一个卷积神经网络,相对于第一层的P-Net来说,增加了一个全连接层,因此对于输入数据的筛选会更加严格。在图片经过P-Net后,会留下许多预测窗口,我们将所有的预测窗口送入R-Net,这个网络会滤除大量效果比较差的候选框,最后对选定的候选框进行Bounding-Box Regression和NMS进一步优化预测结果。
初识人脸检测(Mtcnn运行测试)
文章图片

O-Net:Output Network,基本结构是一个较为复杂的卷积神经网络,相对于R-Net来说多了一个卷积层。O-Net的效果与R-Net的区别在于这一层结构会通过更多的监督来识别面部的区域,而且会对人的面部特征点进行回归,最终输出五个人脸面部特征点。???????
初识人脸检测(Mtcnn运行测试)
文章图片

  • 运行测试
初识人脸检测(Mtcnn运行测试)
文章图片
???????
【初识人脸检测(Mtcnn运行测试)】

    推荐阅读