人脸目标检测的多任务级联神经网络MTCNN在Pytorch中的实现

本文详细介绍了MTCNN在Pytorch中的实现,包括网络结构、数据预处理、训练过程和测试步骤。MTCNN由P-Net、R-Net和O-Net构成,用于人脸检测、边框回归和关键点定位。文章重点讨论了数据预处理,特别是图像裁剪、IOU计算和非极大值抑制,并分享了训练和预测的关键点。
摘要由CSDN通过智能技术生成

MTCNN网络

这两周下班花了很多时间理解MTCNN网络,从综述到博客,再到代码和原论文,最终又回过去看代码和博客,总算把MTCNN的数据前处理,结构和内部的一些算法搞清楚了。总的来说,个人认为MTCNN难点主要在第一阶段,包括训练数据的前处理,测试数据的输入等。

文章主要参考了:http://www.sfinst.com/?p=1683
https://www.cnblogs.com/the-home-of-123/p/9857056.html
https://blog.csdn.net/autocyz/article/details/82799529
https://zhuanlan.zhihu.com/p/31761796

级联神经网络从一个小网络开始,逐层训练,最终形成一个多层的结构。MTCNN是多任务级联CNN的人脸检测深度学习模型,该模型不仅考虑了人脸检测概率,还综合训练了人脸边框回归和面部关键点检测,多任务同时建立loss function并训练,因此为MTCNN。

MTCNN的网络结构主要包括P-NET,R-NET和O-NET(Proposal Network, Refinement Network和 Output Network),运算量最大的是Pnet,耗时也最多。各层级网络结构如下:
在这里插入s图片描述
Pnet输入是12123尺寸的图片,用来获取面部分类概率,面部窗口和相应的候选框的回归向量。然后采用非极大值抑制方法non-maximum suppression(NMs)对生成的面部候选框进行合并操作。

在这里插入图片描述
RNET对PNET输出的面部候选框进一步训练矫正人脸候选框的回归向量,并同样对候选框执行非极大值抑制

在这里插入图片描述
ONet是最后的输出网络,生成最终的人脸识别概率,人脸回归框以及面部关键点。

MTCNN训练和预测的关键点包括输入数据的前处理,Bounding Box的生成,交并比的计算,非极大值抑制,回归框偏移量等。

数据前处理

PNET输入的训练数据是12123的图片,对图片进行预处理是训练的第一步。MTCNN原文作者训练的数据主要来源WIDER FACE数据集以及对应的annotation,可从如下地址下载:http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/
数据集包括训练集,验证集合测试集,并且annotation中均被标记人脸框(Guarant True Box),annotation格式如下:
0–Parade/0_Parade_marchingband_1_849.jpg 448 329 570 478
*.jpg为图片命名,后四个数字为人脸框的左上角和右下角坐标,如果不止一个人脸框,则数字会继续在后面append。如下代码可以把上面这幅图以及人脸框画出来:
在这里插入图片描述

import cv2
from dface.core.detect import create_mtcnn_net, MtcnnDetector
import dface.core.vision as vision
import matplotlib.pyplot as plt
import pylab


img = cv2.imread("0_Parade_Parade_0_904.jpg")
annotation = [360, 97, 623, 436 ]
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

figure = pylab.figure()
# plt.subplot(121)
pylab.imshow(img_rgb)
figure.suptitle('DFace Detector', fontsize=20)


rect = pylab.Rectangle((annotation
Pytorch是一个基于Python的科学计算库,也是深度学习框架之一。在Pytorch,可以使用各种深度学习模型来实现人脸检测。下面是5种常用的方法: 1. Haar级联检测器:这是一种基于分类器级联人脸检测方法。它使用Haar特征来检测人脸,并且训练了一个级联分类器来检测人脸。 2. HOG+SVM检测器:这种方法使用方向梯度直方图(HOG)来提取特征,并使用支持向量机(SVM)来进行分类。通过训练好的SVM模型,可以实现人脸检测。 3. Faster R-CNN:这是一种基于深度学习人脸检测方法。它使用卷积神经网络CNN)来提取特征,并使用区域提议网络(RPN)来生成候选框。然后使用分类和回归网络来对候选框进行分类和定位,从而实现人脸检测。 4. YOLOv3:这是一种基于深度学习的实时目标检测方法。它使用卷积神经网络来提取特征,并使用单个神经网络来预测候选框和类别。通过训练好的神经网络,可以实现人脸检测。 5. MTCNN:这是一种基于深度学习多任务级联人脸检测方法。它使用卷积神经网络来提取特征,并使用级联网络来生成候选框和进行人脸分类和定位。通过训练好的神经网络,可以实现高效准确的人脸检测。 以上是几种常用的Pytorch实现人脸检测的方法,每种方法都有自己的特点和适用场景。在实际应用,需要根据具体的需求选择合适的方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值