mtcnn人脸检测_MTCNN人脸检测Pytorch实现

0feab96c9321b1902f0abe6fcd84dcb8.png

项目地址:GitHberChen/MTCNN_Pytorch

接上篇:Uno Whoiam:MTCNN人脸检测:三个臭皮匠,顶个诸葛亮 || 5分钟看懂CV顶刊论文

项目目录介绍:

  • test_demo:存放测试结果的图片
  • test_images:用于测试的图片
  • weights:训练保存的模型权重文件
  • create_dataset.py:用于解析CNN_FacePoint、WIDER_Face的.txt文件和制作三个模型的数据集
  • detector.py:用于对图片进行检测,即效果展示
  • dataset.py:mtcnn_dataset 用于读取生成好的图片库数据集,InplaceDataset 用于按照论文的方式即时生成三类模型的训练数据
  • model.py:模型和损失函数
  • train.py:训练三个模型
  • util.py:一些工具

其它的文件用途不大,.sh 用来训练和制作数据集,可以不用管,想用的话得自己配置路径。

生成数据集:

关于数据集,必须得讲讲其标注的格式:

CNN_FacePoint :

lfw_5590Abbas_Kiarostami_0001.jpg 75 165 87 177 106.750000 108.250000 143.750000 108.750000 131.250000 127.250000 106.250000 155.250000 142.750000 155.250000
  • 第一个是文件保存的相对路径
  • 随后4个数字分别表示人脸框的
    ,没想到吧!
  • 最后10个数字分别是左眼、右眼、鼻子、左嘴角、右嘴角的
    坐标

WILDER_Face:

0--Parade/0_Parade_marchingband_1_799.jpg
21
78 221 7 8 2 0 0 0 0 0 
78 238 14 17 2 0 0 0 0 0 
113 212 11 15 2 0 0 0 0 0 
134 260 15 15 2 0 0 0 0 0 
163 250 14 17 2 0 0 0 0 0 
201 218 10 12 2 0 0 0 0 0 
182 266 15 17 2 0 0 0 0 0 
245 279 18 15 2 0 0 0 0 0 
304 265 16 17 2 0 0 0 2 1 
328 295 16 20 2 0 0 0 0 0 
389 281 17 19 2 0 0 0 2 0 
406 293 21 21 2 0 1 0 0 0 
436 290 22 17 2 0 0 0 0 0 
522 328 21 18 2 0 1 0 0 0 
643 320 23 22 2 0 0 0 0 0 
653 224 17 25 2 0 0 0 0 0 
793 337 23 30 2 0 0 0 0 0 
535 311 16 17 2 0 0 0 1 0 
29 220 11 15 2 0 0 0 0 0 
3 232 11 15 2 0 0 0 2 0 
20 215 12 16 2 0 0 0 2 0 
  • 第一行是图片文件保存的相对路径
  • 第二行是该图所标注人脸的数量N
  • 后面N行都是人脸框的位置

真是让人回忆起了刷算法题的美好时光呢。

这个项目里我实现了三种生成数据的思路:

  1. 读取CNN_FacePoint、WILDER_Face里的图片通过随机截取按比例生成
    的四类数据集保存在硬盘,图片标签信息用txt文件保存,简而言之,三个模型的数据集都按照论文中生成
    数据集的方式生成。
  2. 数据生成的方式同1;
    通过训练好的
    检测CNN_FacePoint、WILDER_Face的图片生成四类数据、
    则包含两者,一是通过训练好的
    检测CNN_FacePoint、WILDER_Face生成(同
    ,只不过最后缩放的尺寸为
    ),二是和将
    生成数据集的再通过训练好的
    筛选修正后生成。同样也是保存在硬盘,图片标签信息用txt文件保存。
  3. 方法同2。不过是通过dataset.py中的
    类即时生成训练数据,而不保存。

第一个方法训练出来的模型无法很好找出人脸,后两者则可以训练出不错的效果。方法二生成的图片都很小,数量很大,而且txt文件也很巨大,管理起来很麻烦。方法三的话给CPU的负担比较大,训练速度不如二,毕竟是一边生成数据一边训练,可以采用DataLoader里多个线程(num_workers)生成数据弥补。

具体使用:

下载好CNN_FacePoint、WILDER_Face的数据集,将其路径和其它参数在create_dataset.py里配置好。

  1. 在create_dataset.py中实现,已被注释掉,弃用。
  2. 在create_dataset.py中实现,通过设置dataset_config或者编写.sh生成三类模型的训练数据。
  3. 在dataset.py中的InplaceDataset类实现,需设置好create_dataset.py的dataset_config

训练模型:

在train.py中设置好训练参数以及训练数据的文件夹路径、txt文档路径(用命令行传入也可)后在项目文件夹中运行:

python train.py --trainnet *net_name*

,默认使用
类实时生成数据训练三种模型,也可在train函数中禁用,即设置
,那么就可以用上文方法二生成好保存在硬盘里的数据集进行训练。

测试:

在detector.py中测试:

python detector.py

可以看到测试图片上的检测效果:

98815481b68bcff78906176bbe8ec4ff.png

目前没有训练得很好,还待优化。

目前发现有两个坑待填:

  1. 如何按论文中说的一样,选取前70%的loss进行反向传播?
  2. benchmark

欢迎关注个人微信公众号:

21023403506ef946ca650503d2c5b8b7.png
欢迎扫码关注~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值