opencv_traincascade级联训练人脸数据
正负样本格式:
正样本 灰度化 24*24 2000张
负样本 灰度化 50*50 1000张
训练过程
第一步:dir /b >pos.txt 以及dir /b >neg.txt
第二步:调整pos及neg文件 ,删除第一行和最后一行
在neg.txt 中每一行加neg/ 在pos.txt中每一行加pos.txt并且在每一行最后增加 1 0 0 24 24
在工作路径下手动建立一个文件夹名叫xml
第三步:opencv_createsamples -info pos.txt -vec pos.vec -bg neg.txt -num 600 -w 24 -h 24
第四步:opencv_traincascade -data xml -vec pos.vec -bg neg.txt -numPos 270 -numNeg 300 -numStages 15 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -w 24 -h 24 –mode ALL
问题集锦:
报错 :error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale
解决: 把face_cascade的值改为使用绝对路径cv2.CascadeClassifier(‘D:/…你的.xml路径’)
或者在原来代码下加一行scade.load(‘D:/….你的xml路径’)
报错:Traincascade Error: Bad argument (Can not get new positive sample. Themost possible reason is insufficient count of samples in given vec-file.)
解决:设置的numPos过大,由于训练时pos count 会从你设置的numPos增大,每一级都按一定的次序增大,后来可能会超过样本库中正样本的个数,就会报这个错误。
另附一个:不是报错 是Stages 0-4 are loaded 原因:xml文件已经生成,需要删了重来
警告:traincascade’s error (Required leaf false alarm rate achieved. Branch training terminated.)
这不是一个错误。鉴于所提供的样本设置,级联已达到其预期的潜力。需要添加更多的数据或者设置更苛刻条件。
解决办法:-minHitRate默认设置为0.995,默认-maxFalseAlarmRate设置为0.5。这意味着对于您当前的模型,在训练过程中,允许有1000个肯定样本中有5个得到错误分类,而每个阶段需要达到个人错误接受率由0.5值表示。
所以请尝试下列其中一项:
-minHitRate更改为0.999并使其难以达到目标。然而,这不是最好的方法,容易过度训练
更改-maxFalseAlarmRate为0.7,迫使各个阶段要更加复杂
在训练级联时,指定numPos为所有的正样本。当正样本不能用于进一步处理时,级联分类器会尝试用新样本替换掉样本。而所有正样本都加入了没有可以代替的,所以应该用numPos的较低值重新运行训练。
关于这些numPos numNeg等值的公式
vec-file number >= (numPos + (numStages-1) * (1 – minHitRate) * numPos) + S
其中vec-file number指的是正样本数
numStages默认为20
minHitRate默认设为0.95 可以增大0.999使得训练更复杂
S是负样本数
报错: OpenCV Error: Insufficient memory (Failed to allocate 965425142 bytes)
内存分配不足 我的内存是4G 尚未找到解决办法 但是发现之前自己会出现这个错误是因为路径中样本有1000 个,createsample的时候就使用1000 然后继续下面的traincascade工作使用1000就报错了。后来改为使用500才没有报错
报错:Train dataset for temp stage can not be filled
一般显示的acceptanceRatio 是大概这样的数值0.000412662 或者更小。但如果出现像这样 7.83885e-07 ,说明已经导致过拟合,此时要适当减小训练层数,即减小numStages的值
训练结果:
opencv_traincascade级联训练人脸数据的更多相关文章
- 人脸检测及识别python实现系列(3)——为模型训练准备人脸数据
人脸检测及识别python实现系列(3)——为模型训练准备人脸数据 机器学习最本质的地方就是基于海量数据统计的学习,说白了,机器学习其实就是在模拟人类儿童的学习行为.举一个简单的例子,成年人并没有主动 ...
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
百度为何开源深度机器学习平台? 有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举. 5月20日,百度在github上开源了其 ...
- 利用Python sklearn的SVM对AT&T人脸数据进行人脸识别
要求:使用10-fold交叉验证方法实现SVM的对人脸库识别,列出不同核函数参数对识别结果的影响,要求画对比曲线. 使用Python完成,主要参考文献[4],其中遇到不懂的功能函数一个一个的查官方文档 ...
- 万张PubFig人脸数据实现基于python+OpenCV的人脸特征定位程序(1)
在最近刷今日头条以及其他媒体软件时,经常会发现一些AI换脸的视频,于是我想,可不可以自己实现一个可以进行人脸识别的软件程序.我的具体流程是先配合python网络爬虫先进行万张PubFig人脸公共图片的 ...
- opencv python训练人脸识别
总计分为三个步骤 一.捕获人脸照片 二.对捕获的照片进行训练 三.加载训练的数据,识别 使用python3.6.8,opencv,numpy,pil 第一步:通过笔记本前置摄像头捕获脸部图片 将捕获的 ...
- scipy笔记—scipy.misc.imresize用法(方便训练图像数据)
scipy.misc.imresize 不同于普通的reshape, imresize不是单纯的改变图像矩阵的维度,而是能将图片重采样为指定像素,这样给深度学习中训练图像数据带来方便. import ...
- 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器
前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...
- opencv利用Cascade Classifier训练人脸检测器
opencv默认提供了haar特征和lbp特征训练的人脸分类器,但是效果不太好,所以我们可以用opencv提供的跑opencv_traincascade函数来训练一个LBP特征的分类器.(由于open ...
- 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型
人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...
随机推荐
- MySQL数字类型int与tinyint、float与decimal如何选择
最近在准备给开发做一个mysql数据库开发规范方面培训,一步一步来,结合在生产环境发现的数据库方面的问题,从几个常用的数据类型说起. int.tinyint与bigint 它们都是(精确)整型数据类型 ...
- C# Winfrom 窗体上动态生成控件慢处理
处理方式:布局挂起 panelContent.SuspendLayout(); panelContent.ResumeLayout(); private void button1_Click(obje ...
- MacOS下安装unicorn这个库失败
因为在Mac下安装pwntools,发现安装unicorn库的时候失败了,编译报错如下 make: *** [qemu/config-host.h-timestamp] Error 1 error: ...
- web开发原生开发混合开发的区别优势
最近有人在讨论是原生开发好还是,混合开发好,以下是引用了数据来说: 最近原生应用.Web应用.混合应用的名字让我们听得比较熟悉了,现在我们就通过评析各种应用的优缺点来更进一步看看这三者的区别. 一.原 ...
- 解压gz文件有误
tar: This does not look like a tar archive tar: Skipping to next header tar: Exiting with failure st ...
- python_字符串方法
1.字符串大小写转 value = "wangdianchao" # 转换为大写 big_value = value.upper() print(big_value) # 转换为小 ...
- elasticsearch查询:启动项目报错No property ... found for...Did you mean '...'?
网上找的案例是: 实体类字段定义:private String sku_no;dao中接口名定义:Goods findBySkuNo(String skuNo);spring-data按照接口方法定义 ...
- 前端面试题-HTML+CSS
引用GitHub 上 ltadpoles的前端面试 https://github.com/ltadpoles HTML部分 1. Doctype作用,HTML5 为什么只需要写<!DOCTYPE ...
- python3.6 创建字典三法
这里献丑给出 python 3.6 创建字典变量的三法 其一:阳春白雪法:直接声明 mydic = {"name":"徐晓冬","age" ...
- 【模板】A*B Problem升级版(FFT快速傅里叶)
题目描述 给出两个 $n$ 位10进制数x和y,求x*y(详见 洛谷P1919) 分析 假设已经学会了FFT/NTT. 高精度乘法只是多项式乘法的特殊情况,相当于$x=10$ 时. 例如n=3,求12 ...