【已开源】mtcnn_pytorch完美复现

2023-10-29 02:58

本文主要是介绍【已开源】mtcnn_pytorch完美复现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

零 、代码发现

开源QQ群:414475612,名称LazyNet,代码详见群文件

GITHUBhttps://github.com/samylee/mtcnn_pytorch

一、算法介绍

MTCNN,Multi-task convolutional neural network(多任务卷积神经网络),将人脸区域检测与人脸关键点检测放在了一起,它的主题框架类似于cascade。总体可分为P-Net、R-Net、和O-Net三层网络结构。

二、实现结果(完美复现,不是接近!)

2.1. 准确率

2.2. 速度

mtcnnhardwaresoftwareimage_sizemin_sizespeed
zhang'si7-9700K

vs2017-opencv-dnn

640x4802035ms
samyleei7-9700K

vs2017-opencv-dnn

640x4802032ms

2.3. 优势
2.3.1. 大多数复现mtcnn代码并不能完美复现mtcnn的速度,因为他们pnet网络产生了大量负样本,导致整体算法速度减慢,虽然能获得更大的recall,但摒弃了mtcnn算法设计初衷。
2.3.2. 大多数复现mtcnn代码并不能完美复现mtcnn的精度,其ROC曲线并不能重合或稍高。
2.3.3. 大多数复现mtcnn代码编写复杂,逻辑冗长,无法一目了然。
2.3.4. 提供pytorch转caffe工具和c++实现工程,工程部署不在话下。

2.4. 效果展示

三、实现要求

3.1. 系统及硬件要求
ubuntu16.04, nvidia-1080 或者更高,
3.2. 软件要求
anaconda(强烈建议),pycharm(强烈建议)
3.3. 算法依赖
python==3.6
pytorch-gpu==1.4
opencv-python==4.5.4
pickle

四、实现步骤

4.1. pnet实现
4.1.1. 进入'prepare_data/12net_data'下依次运行'gen_12net_data.py'和'gen_12net_imdb.py',用以生成pnet数据结构。
4.1.2. 进入'train', 新建'pnet'文件夹,运行'train_pnet.py'
4.2. rnet实现
4.2.1. 进入'prepare_data/24net_data'下依次运行'gen_24net_data.py', 'gen_24net_data_append.py', 'gen_24net_landmark_data.py'和'gen_24net_imdb.py',用以生成rnet数据结构。
4.2.2. 进入'train', 新建'rnet'文件夹, 运行'train_rnet.py'
4.3. onet实现
4.3.1. 进入'prepare_data/48net_data'下依次运行'gen_48net_data.py', 'gen_48net_data_append.py', 'gen_48net_landmark_data.py'和'gen_48net_imdb.py',用以生成rnet数据结构。
4.2.2. 进入'train', 新建'onet'文件夹, 运行'train_onet.py'

五、测试步骤

5.1. pnet测试
进入'test'文件夹,运行'test_pnet.py'
5.2. rnet测试
进入'test'文件夹,运行'test_rnet.py'
5.3. onet测试
进入'test'文件夹,运行'test_onet.py'

六、验证步骤

6.1. 进入'validate'文件夹下,新建'output'文件夹,运行'gen_fddb_results.py'即可。
6.2. 获得ROC曲线方式网上博客很多,这里就不介绍了。

七. 实现细节

7.1. 关于pnet
7.1.1. 因pnet网络比较小,不利于landmark_regression,因此只采用了classification和bbox_regression。论文虽然写了landmark_regression,但是对标作者实现代码,非也!
7.1.2. 因pnet对classification要求比较高,所以loss_factor采用[1.0, 1.0]。论文虽然写了[1.0, 0.5, 0.5],但是对标作者实现代码,非也!
7.1.3. 数据比例neg:pos:part=3:1:1
7.2. 关于rnet
7.2.1. 因rnet对bbox_regression要求比较高,所以loss_factor采用[1.0, 10.0, 4.0]
7.2.2. 增加了'append'数据,是为了让数据均衡,同时也是让rnet尽可能的提高recall
7.2.3. 数据比例neg:pos:part:ldm=3:1:1:2
7.3. 关于onet
7.3.1. 因onet对landmark_regression要求比较高,所以loss_factor采用[1.0, 10.0, 40.0]
7.3.2. 和rnet类似,增加了'append'数据,是为了让数据均衡,同时也是让onet尽可能的提高recall
7.3.3. 数据比例neg:pos:part:ldm=3:1:1:2
7.4. imdb数据格式
7.4.1. 使用了pickle压缩成imdb格式数据,主要是增加数据读取效率,若直接在pytorch中反复读取数据,会使训练速度慢很多。
7.5. 数据增强
7.5.1. 10%数据灰度化,让网络针对夜间gray图像有一定的鲁棒性
7.5.2. 50%数据水平翻转,让网络更加健壮
7.6. loss设计
7.6.1. 分类loss,采用CrossEntropyLoss,并没有采用ohem,因为算法要求数据稍有不平衡(3:1:1:2),所以并不能使用ohem
7.6.2. 回归loss,采用MSELoss,但是注意reduction='none',并不能平均计算
7.7. wider数据调整
7.7.1. 调整数据格式,(x1, y1, x2, y2)
7.7.2. 调整数据宽高比,因wider有部分人脸数据宽高比为1:2,因此在制作数据时无法获得iou>0.65的正样本,所以将所有数据宽高比都限制在2:3以内
7.8. celebA数据调整
7.8.1. 该数据集人脸边框相较于wider有大不同,所以没有用到
7.8.2. 使用pnet和rnet的人脸检测获得边框更加符合mtcnn算法设计需求

这篇关于【已开源】mtcnn_pytorch完美复现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/297790

相关文章

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man

从零教你安装pytorch并在pycharm中使用

《从零教你安装pytorch并在pycharm中使用》本文详细介绍了如何使用Anaconda包管理工具创建虚拟环境,并安装CUDA加速平台和PyTorch库,同时在PyCharm中配置和使用PyTor... 目录背景介绍安装Anaconda安装CUDA安装pytorch报错解决——fbgemm.dll连接p

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu