基于tensorflow的多任务级联卷积神经网络人脸检测
mtcnn的Python项目详细描述
MTCNN
python3.4+中张量流mtcnn人脸检测的实现。它是从头开始编写的,使用 来自facenet中david sandberg(FaceNet’s MTCNN)的mtcnn。这是基于论文zhang,k等人。(2016年)[ZHANG2016]。
安装
目前只支持python3.4以后的版本。它可以通过pip安装:
$ pip3 install mtcnn
此实现需要在系统中安装opencv>;=3.2和tensorflow>;=1.4.0,并绑定python3。
它们可以通过PIP安装(如果PIP版本>;=9.0.1):
$ pip3 install tensorflow==1.4.1 opencv-contrib-python==3.2.0.8
或者直接从源代码(OpenCV3,Tensorflow)编译。
请注意,如果系统上有可用的GPU设备,则可以使用TensorFlow GPU版本,这将加快结果的速度。它可以与pip一起安装:
$ pip3 install tensorflow-gpu\>=1.4.0
用法
下面的示例演示了此软件包的易用性:
>>>frommtcnn.mtcnnimportMTCNN>>>importcv2>>>>>>img=cv2.imread("ivan.jpg")>>>detector=MTCNN()>>>print(detector.detect_faces(img))[{'box':[277,90,48,63],'keypoints':{'nose':(303,131),'mouth_right':(313,141),'right_eye':(314,114),'left_eye':(291,117),'mouth_left':(296,143)},'confidence':0.99851983785629272}]
检测器返回一个json对象列表。每个json对象包含三个主键:“box”、“confidence”和“keypoints”:
- 边框的格式为[x,y,width,height],位于“box”键下。
- 置信度是边界框匹配面的概率。
- 这些关键点被格式化为一个json对象,其中有“left-eye”、“right-eye”、“nose”、“mouth-left”、“mouth-right”键。每个关键点由像素位置(x,y)标识。
另一个很好的用法示例可以在这个存储库根目录中的文件“example.py”中找到。
基准
下表显示了这个mtcnn实现在Intel i7-3612QM CPU @ 2.10GHz上运行的基准,它基于cputensorflow 1.4.1。
- Pictures containing a single frontal face:
Image size | Total pixels | Process time | FPS |
---|---|---|---|
460x259 | 119,140 | 0.118 seconds | 8.5 |
561x561 | 314,721 | 0.227 seconds | 4.5 |
667x1000 | 667,000 | 0.456 seconds | 2.2 |
1920x1200 | 2,304,000 | 1.093 seconds | 0.9 |
4799x3599 | 17,271,601 | 8.798 seconds | 0.1 |
- Pictures containing 10 frontal faces:
Image size | Total pixels | Process time | FPS |
---|---|---|---|
474x224 | 106,176 | 0.185 seconds | 5.4 |
736x348 | 256,128 | 0.290 seconds | 3.4 |
2100x994 | 2,087,400 | 1.286 seconds | 0.7 |
型号
默认情况下,mtcnn捆绑了一个人脸检测权重模型。
该模型改编自facenet的mtcnn实现,合并到一个单独的文件中,该文件位于相对 到模块的路径。它可以通过在实例化期间将其注入mtcnn()构造函数来重写。
模型必须是基于numpy的,包含3个主要键“pnet”、“rnet”和“onet”,每个键都具有网络各层的权重。
有关网络定义的更多参考,请仔细阅读来自zhang等人的论文。(2016年)[ZHANG2016]。