MTCNN训练整理
来源:互联网 发布:淘宝网打不开 编辑:程序博客网 时间:2024/06/15 10:20
MTCNN主要包括三个部分,PNet,RNet,ONet
其中PNet在训练阶段的输入尺寸为12*12,RNet的输入尺寸为24*24, ONet的输入尺寸为48*48. PNet网络参数最小,ceffemodel仅有28.2KB, 所以速度最快.RNet的网络参数次之,caffemodel大小为407.9KB, ONet的caffemodel大小为1.6M,三个网络合起来不到2M.
测试阶段大概过程
首先图像经过金字塔,生成多个尺度的图像,然后输入PNet, PNet由于尺寸很小,所以可以很快的选出候选区域,但是准确率不高,然后采用NMS算法,合并候选框,然后根据候选框提取图像,作为RNet的输入,RNet可以精确的选取边框,一般最后只剩几个边框,最后输入ONet,ONet虽然速度较慢,但是由于经过前两个网络,已经得到了高概率的边框,所以输入ONet的图像较少,然后ONet输出精确的边框和关键点信息.
训练数据库
论文中作者主要使用了Wider_face 和CelebA数据库,其中Wider_face主要用于检测任务的训练,CelebA主要用于关键点的训练.训练集分为四种:负样本,正样本 ,部分样本,关键点样本. 三个样本的比例为3: 1: 1: 2
训练主要包括三个任务
人脸分类任务:利用正样本和负样本进行训练
人脸边框回归任务:利用正样本和部分样本进行训练
关键点检测任务:利用关键点样本进行训练
训练数据整理:
Wider_face包含人脸边框标注数据,大概人脸在20万,CelebA包含边框标注数据和5个点的关键点信息.对于三个网络,提取过程类似,但是图像尺寸不同.
正负样本,部分样本提取:
1.从Wider_face随机选出边框,然后和标注数据计算IOU,如果大于0.65,则为正样本,大于0.4小于0.65为部分样本,小于0.4为负样本.
2.计算边框偏移.对于边框,(x1,y1)为左上角坐标,(x2,y2)为右下角坐标,新剪裁的边框坐标为(xn1,yn1),(xn2,yn2),width,height.则offset_x1 = (x1 - xn1)/width,同上,计算另三个点的坐标偏移.
3.对于正样本,部分样本均有边框信息,而对于负样本不需要边框信息
关键点样本提取
1.从celeba中提取,可以根据标注的边框,在满足正样本的要求下,随机裁剪出图片,然后调整关键点的坐标.
loss修改
由于训练过程中需要同时计算3个loss,但是对于不同的任务,每个任务需要的loss不同.
所有在整理数据中,对于每个图片进行了15个label的标注信息
1.第1列:为正负样本标志,1正样本,0负样本,2部分样本,3关键点信息
2.第2-5列:为边框偏移,为float类型,对于无边框信息的数据,全部置为-1
3.第6-15列:为关键点偏移,为floagt类型,对于无边框信息的数据,全部置为-1
修改softmax_loss_layer.cpp 增加判断,只对于1,0计算loss值
修改euclidean_loss_layer.cpp 增加判断,对于置为-1的不进行loss计算
困难样本选择
论文中作者对与人脸分类任务,采用了在线困难样本选择,实现过程如下:
修改softmax_loss_layer.cpp,根据计算出的loss值,进行排序,只对于70%的值较低的数据,
进行反向传播.
- MTCNN训练数据整理
- MTCNN训练整理
- mtcnn训练
- MTCNN训练详细过程
- mtcnn训练及出现问题总结
- 人脸检测和对齐--MTCNN训练1--P-net
- 人脸检测之MTCNN训练自己的数据
- 用我们训练的MTCNN中o-net测试训练图片的landmark的mean error
- MTCNN中用celebA样本生成landmark训练样本python代码解读
- 用作者提供的net1->net2生成MTCNN的训练样本(positive,negative,part,landmark)
- mtcnn分析
- MTCNN算法
- MTCNN中将自己训练的o-net接在作者提供的net1,net2后面python代码解读
- javaday15-IO(整理和训练)
- MTCNN代码实现
- win10 tensorflow MTCNN Demo
- c语言强化训练作业整理1
- 思维训练——部分智力题整理
- QT模态对话框与非模态对话框
- 方格取数 多线程动态规划
- Unity StartCoroutine 协同程序
- 实现底部导航栏中间凸起,(点击中间凸出按钮弹出菜单)
- 计蒜客 -- 求平方根
- MTCNN训练整理
- Windows+Eclipse+Maven+HBase 1.2.4开发环境搭建
- java异常总结
- VueJs探索之watch用法详解
- 18.SoC时钟系统概述及初始化
- spring 无状态 bean
- 按钮加载图片
- 安卓---EditText控件的使用
- 目标检测--SqueezeDet 用于自动驾驶的实时目标检测网络