news 2026/5/7 23:50:15

基于深度学习神经网络MTCNN的人脸检测系统源码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于深度学习神经网络MTCNN的人脸检测系统源码

一. mtcnn概述

MTCNN,英文全称是Multi-task convolutional neural network,中文全称是多任务卷积神经网络,该神经网络将人脸区域检测与人脸关键点检测放在了一起。

二. mtcnn的网络结构

mtcnn从整体上划分分为P-Net、R-Net、和O-Net三层网络结构。各层的作用直观上感受如下图所示:

其网络结构:

三. mtcnn的网络结构代码

import tensorflow as tf class PNet(tf.keras.Model): def __init__(self): super().__init__() self.conv1 = tf.keras.layers.Conv2D(10, 3, 1, name='conv1') self.prelu1 = tf.keras.layers.PReLU(shared_axes=[1,2], name="PReLU1") self.conv2 = tf.keras.layers.Conv2D(16, 3, 1, name='conv2') self.prelu2 = tf.keras.layers.PReLU(shared_axes=[1,2], name="PReLU2") self.conv3 = tf.keras.layers.Conv2D(32, 3, 1, name='conv3') self.prelu3 = tf.keras.layers.PReLU(shared_axes=[1,2], name="PReLU3") self.conv4_1 = tf.keras.layers.Conv2D(2, 1, 1, name='conv4-1') self.conv4_2 = tf.keras.layers.Conv2D(4, 1, 1, name='conv4-2') def call(self, x, training=False): out = self.prelu1(self.conv1(x)) out = tf.nn.max_pool2d(out, 2, 2, padding="SAME") out = self.prelu2(self.conv2(out)) out = self.prelu3(self.conv3(out)) score = tf.nn.softmax(self.conv4_1(out), axis=-1) boxes = self.conv4_2(out) return boxes, score class RNet(tf.keras.Model): def __init__(self): super().__init__() self.conv1 = tf.keras.layers.Conv2D(28, 3, 1, name='conv1') self.prelu1 = tf.keras.layers.PReLU(shared_axes=[1,2], name="prelu1") self.conv2 = tf.keras.layers.Conv2D(48, 3, 1, name='conv2') self.prelu2 = tf.keras.layers.PReLU(shared_axes=[1,2], name="prelu2") self.conv3 = tf.keras.layers.Conv2D(64, 2, 1, name='conv3') self.prelu3 = tf.keras.layers.PReLU(shared_axes=[1,2], name="prelu3") self.dense4 = tf.keras.layers.Dense(128, name='conv4') self.prelu4 = tf.keras.layers.PReLU(shared_axes=None, name="prelu4") self.dense5_1 = tf.keras.layers.Dense(2, name="conv5-1") self.dense5_2 = tf.keras.layers.Dense(4, name="conv5-2") self.flatten = tf.keras.layers.Flatten() def call(self, x, training=False): out = self.prelu1(self.conv1(x)) out = tf.nn.max_pool2d(out, 3, 2, padding="SAME") out = self.prelu2(self.conv2(out)) out = tf.nn.max_pool2d(out, 3, 2, padding="VALID") out = self.prelu3(self.conv3(out)) out = self.flatten(out) out = self.prelu4(self.dense4(out)) score = tf.nn.softmax(self.dense5_1(out), -1) boxes = self.dense5_2(out) return boxes, score class ONet(tf.keras.Model): def __init__(self): super().__init__() self.conv1 = tf.keras.layers.Conv2D(32, 3, 1, name="conv1") self.prelu1 = tf.keras.layers.PReLU(shared_axes=[1,2], name="prelu1") self.conv2 = tf.keras.layers.Conv2D(64, 3, 1, name="conv2") self.prelu2 = tf.keras.layers.PReLU(shared_axes=[1,2], name="prelu2") self.conv3 = tf.keras.layers.Conv2D(64, 3, 1, name="conv3") self.prelu3 = tf.keras.layers.PReLU(shared_axes=[1,2], name="prelu3") self.conv4 = tf.keras.layers.Conv2D(128, 2, 1, name="conv4") self.prelu4 = tf.keras.layers.PReLU(shared_axes=[1,2], name="prelu4") self.dense5 = tf.keras.layers.Dense(256, name="conv5") self.prelu5 = tf.keras.layers.PReLU(shared_axes=None, name="prelu5") self.dense6_1 = tf.keras.layers.Dense(2 , name="conv6-1") self.dense6_2 = tf.keras.layers.Dense(4 , name="conv6-2") self.dense6_3 = tf.keras.layers.Dense(10 , name="conv6-3") self.flatten = tf.keras.layers.Flatten() def call(self, x, training=False): out = self.prelu1(self.conv1(x)) out = tf.nn.max_pool2d(out, 3, 2, padding="SAME") out = self.prelu2(self.conv2(out)) out = tf.nn.max_pool2d(out, 3, 2, padding="VALID") out = self.prelu3(self.conv3(out)) out = tf.nn.max_pool2d(out, 2, 2, padding="SAME") out = self.prelu4(self.conv4(out)) out = self.dense5(self.flatten(out)) out = self.prelu5(out) score = tf.nn.softmax(self.dense6_1(out)) boxes = self.dense6_2(out) lamks = self.dense6_3(out) return boxes, lamks, score

四. mtcnn的演示效果

五. 整个工程的内容

提供源代码,模型,提供GUI界面代码,主要使用方法可以参考里面的“文档说明_必看.docx”

项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷

https://www.bilibili.com/video/BV1rCU6Y1EbX/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 9:31:37

XGBoost完整安装配置指南:从入门到精通

XGBoost完整安装配置指南:从入门到精通 【免费下载链接】xgboost dmlc/xgboost: 是一个高效的的机器学习算法库,基于 C 开发,提供用于提升分类、回归、排序等任务的性能。 项目地址: https://gitcode.com/gh_mirrors/xg/xgboost XGBoo…

作者头像 李华
网站建设 2026/5/2 19:21:00

OBS面部追踪插件终极指南:打造专业直播画面的5个关键步骤

OBS面部追踪插件终极指南:打造专业直播画面的5个关键步骤 【免费下载链接】obs-face-tracker Face tracking plugin for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-face-tracker OBS面部追踪插件是专为OBS Studio设计的实时面部检测工具&…

作者头像 李华
网站建设 2026/5/2 4:45:07

无线数据通信技术【1.5】

2.5.2 多普勒频移与多普勒衰落当运动的物体达到一定的速度时(如急速行使的汽车、 超音速飞机、 人造卫星在发射等),固定点接收到的从运动体发来的载波频率将随物体运动速度的不同产生不同的频移,导致信号频率扩展,通常…

作者头像 李华
网站建设 2026/4/26 22:36:38

Infinigen完全攻略:从零构建程序化世界的7个关键步骤

Infinigen完全攻略:从零构建程序化世界的7个关键步骤 【免费下载链接】infinigen Infinite Photorealistic Worlds using Procedural Generation 项目地址: https://gitcode.com/gh_mirrors/in/infinigen Infinigen是一款革命性的开源程序化世界生成工具&…

作者头像 李华
网站建设 2026/4/29 5:30:14

告别串口噩梦:打造工业现场的 Modbus 智能通信中枢

摘要:在工业物联网(IIoT)的升级改造中,工程师们常面临一个棘手的“时空错位”:一边是支持高并发、云原生的现代化 SCADA/MES 系统,另一边是躺在控制柜里主要靠串口通信的“古董”设备。如何让 TCP/IP 网络与…

作者头像 李华