MTCNN各个函数子文件的说明

本文深入解析MTCNN人脸检测算法,涵盖P-Net、R-Net、O-Net三个核心网络结构的功能与工作原理,及各阶段数据预处理与模型训练流程,适合初学者与进阶读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.三个网络的说明
MTCNN由3个网络结构组成(P-Net,R-Net,O-Net)。

Proposal Network (P-Net):该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框, 再利用NMS去除重叠窗体。

Refine Network (R-Net):该网络结构还是通过边界框回归和NMS来去掉那些false-positive区域。只是由于该网络结构和P-Net网络结构有差异,多了一个全连接层,所以会取得更好的抑制false-positive的作用。

Output Network (O-Net):该层比R-Net层又多了一层卷基层,所以处理的结果会更加精细。作用和R-Net层作用一样。但是该层对人脸区域进行了更多的监督,同时还会输出5个地标(landmark)。

MTCNN模型推理
MTCNN的Inference流程如下图所示:
在这里插入图片描述
由原始图片和PNet生成预测的bounding boxes。输入原始图片和PNet生成的bounding box,通过RNet,生成校正后的bounding box。
输入元素图片和RNet生成的bounding box,通过ONet,生成校正后的bounding box和人脸面部轮廓关键点。执行过程如下所示:

  1. 首先读入要检测的图片:image = cv2.imread(imagepath)
  2. 加载训练好的模型参数,构建检测对象:detector = MtcnnDetector
  3. 执行推理操作:all_boxes,landmarks = detector.detect_face(image)
  4. 绘制目标框:cv2.rectangle(image, box,(0,0,255))
    注: ONet功能与RNet作用类似,只是在去除重叠候选窗口的同时,同时显示五个人脸关键点定位。

2.函数的说明
PNet:
gen_12net_data.py
训练PNet的数据的采样代码
输入:是wider_face_train.txt,其中包括图片的路径,人脸框的位置(X1,X2,Y1,Y2);WIDER_train文件内的图片
输出:…/data/12/negative positive part 内保存图片,还有…/data/12/pos_12.txt neg_12.txt part_12.txt
gen_landmark_aug_12.py:
用于生成特征点的数据,在这里并没有生成tfreord,只是对进行数据增强(随机镜像、随机旋转)
此脚本的输入:是trainImageList.txt,其中定义了文件的路径,人脸框的位置(x1,x2,y1,y2),特征点的位置(x1,y1,x5,y5)
输出: …\data\12 train_PNet_landmark_aug文件中和中landmark_12_aug.txt

gen_imglist_pnet.py:
将pos,neg,part 和landmark 数据标签合并
输入:…\data\12\neg_12.txt pos_12.txt part_12.txt & … \data\12\landmark_24_aug.txt
输出:…\data\imglists\PNet\train_PNet_landmark.txt

RNet:
gen_hard_example.py

分别生成RNet和ONet的训练数据
输入:…\data\trainImageList.txt WIDER_train文件夹
输出:…\data\no_LM24\neg_24.txt pos_24.txt part_24.txt

gen_landmark_aug_24.py:同PNet

gen_imglist_rnet.py
将pos,neg,part 和landmark 数据标签合并
输入:…\data\no_LM24\neg_24.txt pos_24.txt part_24.txt & … \data\24\landmark_24_aug.txt
输出:…\data\imglists_noLM\RNet\train_RNet_landmark.txt

gen_RNet_tfrecords.py:
输入:(输入标签文件)…\data\no_LM24\part_24.txt pos_24.txt neg_24.txt & …\data\24\landmark_24_aug.txt
输出:(输出tfrecord文件)…\data\imglists_noLM\RNet\part_landmark.tfrecord_shuffle pos_landmark.tfrecord_shuffle neg_landmark.tfrecord_shuffle landmark_landmark.tfrecord_shuffle

train_RNet:
输入:(输入tfrecord数据文件) …\data\imglists_noLM\RNet\neg_landmark.tfrecord_shuffle part_landmark.tfrecord_shuffle pos_landmark.tfrecord_shuffle landmark_landmark.tfrecord_shuffle
输出:(输出模型参数文件)

ONet:
gen_hard_example.py

输入:…\data\wider_face_train_bbx_gt.txt WIDER_train文件夹 & …\data\MTCNN_model\RNet_landmark下的模型参数 & …\data\MTCNN_model\PNet_landmark下的模型参数
输出:…\data\no_LM24\neg_24.txt pos_24.txt part_24.txt

gen_landmark_aug_48.py
输入:…\data\trainImageList.txt , lfw_5590文件夹
输出:…\data\48\landmark_48_aug.txt , train_ONet_landmark_aug文件夹(lfw小图图片)

gen_imglist_onet
将pos,neg,part 和landmark 数据标签合并
输入:…\data\no_LM48\neg_48.txt pos_48.txt part_48.txt & … \data\48\landmark_48_aug.txt
输出:…\data\imglists\ONet\train_ONet_landmark.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值