OpenCV - 训练分类器

OpenCV 级联分类器之样本处理、训练、测试 1、什么是级联分类器 此处不做详解,可以参考这个博客:https://www.cnblogs.com/wumh7/p/9403873.html 2、分类器样本创建 样本创建是一个比较耗时耗资源的过程,但是前期做好一个优质的样本,对于后期的样本训练以及想获取到一个精度较高的分类器都是密切相关的。 样本,又分为正样本和负样本。通常样本基数越大,肯定生成的分类器精度越高。如果检测的目标是一个固定物体,没有变化(如特定商标,logo等),这样的物体只要提供一份... 阅读详情

一.收集样本

正样本:待检目标样本

负样本:其它任意图片

PS.所有样本图片都应该有同一尺寸,如20 * 20

ACDSee软件:对图像批量处理为20x20大小的图片

1.把所有正样本图片放在posdata的文件夹下,把所有负样本图片放在negdata文件夹下


负样本数量应大于正样本数量,如(3:1),否则在训练时会陷入死循环。。。

1.分别为正样本和负样本创建描述文件

(1)为正样本创建描述文件格式文件info.txt,并且把这个文件放在与样本图片同一目录下,D:\OpenCv\opencv\build\x64\

vc12\bin\posdata

a)在命令行下 输入以下命令: dir/b > info.txt

b)删除info.txt最后一行的 “info.txt”

c)打开info.txt, 按ctrl+h, 把所有的”bmp” 换成

“bmp 1 0 0 20 20”

1代表一个文件   ||0 0顶点坐标 || 20 20右下顶点坐标        


 (2)为负样本创建集合文件格式文件bg.txt, 并且把这个文件放在与样本图片同一目录下

a)在命令行下 输入以下命令: dir /b > bg.txt

b)删除bg.txt最后一行的 “bg.txt”

二.创建样本


Ps: createsamples程序的命令行参数

info<file>

正样本描述文件

vec <vec_file_name>

训练好的正样本的输出文件名

num<number_of_samples>

要产生的正样本的数量,和正样本图片数目相同

-w -h

样本的宽高

执行脚本后,将生成正样本描述文件a.vec

-------------------------------------------------------------

其他的一些参数:

-img<image_file_name>

源目标图片(例如:一个公司图标)

-bg<background_file_name>

背景描述文件。

--maxidev<max_intensity_deviation>

背景色最大的偏离度。

-maxangel<max_x_rotation_angle>

-maxangle<max_y_rotation_angle>,

-maxzangle<max_x_rotation_angle>

最大旋转角度,以弧度为单位。

-show

如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程继续。这是个有用的debug选项。

结果:


二.训练级联分类器



Ps: Haartraining的命令行参数如下

data<dir_name>

存放训练好的分类器的路径名

vec<vec_file_name>

正样本文件名(由trainingssamples程序或者由其他的方法创建的)绝对路径

bg<background_file_name>

背景描述文件。绝对路径

npos<number_of_positive_samples>

用来训练每一个分类器阶段的正样本数量Ps:正样本的数目(-npos)要略大于实际数

nneg<number_of_negative_samples>

用来训练每一个分类器阶段的负样本数量

nstages<number_of_stages>

训练的阶段(层)数

 

 

nsplits<number_of_splits>

决定用于阶段分类器的弱分类器。如果值为1,则一个简单的stump classifier被使用。如果是2或者更多,则带有number_of_splits个内部节点的CART分类器被使用

mem<memory_in_MB>

预先计算的以MB为单位的可用内存。内存越大则训练的速度越快

 

nonsym

指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的

mode all

表示使用haar特征集的各类既有垂直的,又有45度角旋转的

-w<sample_width>
-h<sample_height>

训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同

其他的一些参数:
-sym(default)
-minhitrate<min_hit_rate>
    
每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate的number_of_stages次方。
-maxfalsealarm<max_false_alarm_rate>
    
没有阶段分类器的最大错误报警率。总的错误警告率为   max_false_alarm_rate的number_of_stages次方。每一层训练到这  个值小于0.5时训练结束,进入下一层训练
-weighttrimming<weight_trimming>
    
指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9
-eqw
-mode<basic(default)|core|all>
    
选择用来训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。

Ø  参数的配置十分重要,很多时候训练不成功多是因为参数的配置问题!!!

-----------------------------------------------------------

训练过程参数值解释:


N:层数  %

SMP:样本的使用率 

F : +表示通过翻转,否则是-

ST.THR : 分类器的阈值 

HR:当前分类器 对正样本识别正确的概率

FA:当前分类器 对负样本识别错误的概率

EXP.ERR : 分类器的期望错误率

-----------------------------------------------------------

结果:

四.测试

测试代码:人脸识别

因样本数量仅为 5 所以无精度可言

五.错误分析

1.死循环


原因:

负样本数太少,该阶段已无可提取负样本

解决方法:

正 : 负 = 1 : 2.5~3

2.停止工作

报错信息:

参数配置:

原因:

在第一层训练的时候已经用完了vec文件中所有的正样本,以至于在后续的样本训练中没有新的正样本可以加入使用了,导致出现了错误的现象。

那个vec文件中的正样本数目

   = npos +(nstages - 1)*(1 - minHitRate)* npos + s

S的意思是指在正样本中能够直接识别成背景的样本个数,如果npos=120的话,s的取值为个位数就行,不用太大。

解决方法:

在训练时,-npos参数值取 正样本数的 1/3

如 实际正样本数为 300 参数取值则设为 100

 

源码与文档资料

http://download.youkuaiyun.com/download/sgamble/9660734

参考资料

OpenCV 训练分类器生成XML文件

训练分类器

训练参数设置

英语-训练分类器,参数设置,人脸检测



opencv训练自己的分类器,可替换各种目标识别 环境: opencv-4.0 python 方法:opencv_createsamples,opencv_traincascade 流程: 收集需要训练的正、负样本 生成正负样本描述文件 分类器训练 目标检测 收集样本 关于样本的收集, ... 阅读详情

相关推荐

OpenCV训练自己的物体检测分类器步骤

环境:python3.7 OpenCV3.4.3.18 工具: opencv_annotation.exe opencv_createsamples.exe opencv_traincascade.exe

qq_46292437的博客 1万+

Opencv训练自己分类器

原文地址丢失,请谅解! 1.准备训练样本图片 1.1样本的采集: 样本图片最好使用灰度图,且最好根据实际情况做一定的预处理;样本数量越多越好,尽量高于1000,样本间差异性越大越好 正负样本比例为1:3最佳;尺寸为20x20最佳。 1.1.1正样本 训练样本的尺寸为20*20(opencv推荐的最佳尺寸),且所有样本的尺寸必须一致。如果不一致的或者尺寸较大的,可以先将所有样本统一缩放到20*20。 以下就是我用来训练的正样本: 1.1.2负样本 ...

我惠依旧的博客 5945

opencv 训练自己的分类器

1、opencv 3.1.0 和 3.2.0 已经没有了convert_cascade.c 文件,打开 ..\opencv-3.1.0\sources\samples\ 和 ..\opencv-2.4.10\sources\samples\  ,如下图 所以嘞,从旧版本的opencv导出这个文件,来生成conver_cascade.exe 文件。 2、conver_cascade.exe

csdn-gs 3709

正式使用opencv里的训练和检测 - opencv_createsamples、opencv_traincascade-2.4.11版本

直接教你怎么用opencv的训练器,以及怎么检测

逍遥.安——于安静和黑暗中寻找最亮丽的风景 5万+

OpenCV+Python训练分类器

@[TOC]opencv训练自己的分类器 opencv训练自己的分类器 总结一下在学习训练自己的分类器所看到的有帮助的资料。 正负样本的处理 正样本:负样本=1:3,正样本尺寸:负样本尺寸=1:6的最终效果比较好,若是场景比较单一的正、负样本数量不必太多,也无需满足1:3。正负样本的处理可以参考这篇文章(利用的Python代码,处理起来比较简单) https://blog.youkuaiyun.com/YK_...

cwlwlw的博客 5171

OpenCV | 训练识别狗的分类器过程详解

文章目录一、样本准备二、训练数据准备三、得到vec文件四、训练最终的分类器五、参数解析六、验证识别效果代码七、运行结果 一、样本准备 包括正样本和负样本,由于是手工准备的数据都是在百度截取的图片,所以样本不多。正样本:100个,负样本208个。 正样本:都是狗的图片,尽量选背景色单一的,由于我是百度出来的图片没那么多讲究。 负样本:可以是其他的除了狗的图片,我选了各种各样动物的图片。 二、训练数据...

duanbin的博客 1万+

分类器之正负样本收集、训练、测试

分类器学习所需文件如下: python工具 opencv_createsample.exe opencv_traincascade.exe 数据准备 pos文件夹 (正样本) neg文件夹 (负样本 训练时所需文件) xml (分类器保存的位置) pos.txt (正样本图片路径和图片大...

weixin_39540045的博客 8641

别再瞎试了!手把手教你用DC NXT的compile_ultra命令搞定物理综合(附完整脚本)

本文详细介绍了如何使用DC NXT的compile_ultra命令进行物理综合,包括环境配置、设计库创建、RTL加载、物理约束加载等关键步骤。通过实战示例和完整脚本,帮助工程师快速掌握TOPO模式下的物理综合流程,提升设计效率。

weixin_30413765的博客 295

opencv:提取样本的两种方式

1 利用icvGetIdxAt直接从矩阵中提取for( j = 0; j < numtrimmed; j++ ) { // 获取训练样本 idx = icvGetIdxAt( trimmedIdx, j ); // 对每个训练样本计算

迷途中的前进 1730

物联网 Mixly-智能楼道灯

一、实验目的及要求 熟悉声音及人体红外传感器用法。 二、实验原理与内容 1.使用声音传感器实现声控灯功能。 2.使用人体红外传感器实现人体检测控制灯功能。 三、实验软硬件环境 硬件:Arduino、LED灯、声音传感器、人体红外传感器 软件:Mixly IDE 四、实验过程(实验步骤、记录、数据、分析) 核心代码截图 声控灯: 人体红外检测灯: 3.实验效果图: (1)、声控灯总线连接: (1)、声控灯声音大于一某个值时灯亮,经过2秒后灯灭: (3)、人体红外检测灯连接总线: (4)、人体红外

qq_43430810的博客 1917

基于Plecs的LLC谐振变换器闭环设计:从PI参数整定到动态响应优化

本文详细介绍了在Plecs仿真环境中,如何为半桥LLC谐振变换器设计并优化闭环控制系统。从开环模型搭建与特性分析入手,重点阐述了基于频域法的PI控制器参数整定流程,并通过负载阶跃、输入电压突变等测试优化动态响应。文章还分享了从仿真模型过渡到实际硬件时的关键注意事项,帮助工程师实现稳定、高效的电源设计。

e4f5g6h的博客 624

Windows环境下训练OpenCV分类器

首先说一下我的经历吧!不想看的可以直跳到教程。之前在树莓派上训练分类器,发现树莓派内存过小,训练几张照片还ok,但是训练十几张照片进程直接就被系统扼杀掉,,所以这次选择用笔记本训练。经过测试,用400张50分辨率的正样本,1500张负样本训练,训练器级数为20,featureType 采用LBP特征时,需要4、5个小时才训练到16级,如果用Haar特征的话我训练的三天三夜才训练到16级,越是到后面越慢(featureType ,提取图像特征的类型,目前只支持LBP、HOG、Haar三种特征。但是HAAR训练

weixin_45880057的博客 3406

iTunes登录协议全解析:从抓包到加密参数生成(含HTTPDebugger避坑指南)

本文深度解析iTunes登录协议,提供从环境搭建、绕过反调试机制到捕获网络流量的完整实战指南。重点剖析了如何利用HTTPDebugger等工具进行抓包,并详细解读了核心加密参数X-Apple-ActionSignature的生成逻辑,为网络安全研究员和协议分析工程师提供了一份详尽的逆向分析与协议复现教程。

weixin_28314575的博客 869

基于OpenCV训练分类器

1.准备工作目录 准备好如下工作目录 OpenCV版本较高(大概4.以上)时可能没有opencv_createsamples和opencv_traincascade的exe文件需要下载cmake自己生成,过程较复杂。这里建议使用低版本,我用的是3.4.16。 2.收集正样本和负样本 样本图片最好使用灰度图,且最好根据实际情况做一定的预处理;样本数量越多越好,尽量高于1000,样本间差异性越大越好正负样本比例为1:3最佳;尺寸为20x20最佳。 正样本:训练样本的尺寸为20*20(opencv推

weixin_44780789的博客 2944

Vue - 列表拖曳排序 / 鼠标拖动改变顺序排列高效简洁组件(支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无 BUG)

Vue-高效简洁列表拖曳排序/鼠标拖动改变顺序排列组件支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无BUG列表拖曳排序插件vuedraggable拉动拽动拖动顺序改变排序js,vue.js,nuxt.js列表如何实现鼠标拖曳改变顺序排列支持滚动条内复杂数据对象带拖动效果动画排序完毕自动排列数组位置克隆Vue.Draggable官方文档教程SortableJS与vuedraggable列表拖动排序Vue拖拽组件库vuedraggable的安装与使用用户用鼠标拖动排序功能源码最好

🏆 前端领域优质创作者 4848

matlab 基于离散余弦变换DCT的最小二乘相位解缠

最小范数法是寻求在解包裹相位的局部微分与包裹相位微分相一致的条件下, 逼近于真实相位分布的解包裹相位分布。目标是使解包裹相位与包裹相位曲面的差最小

点云侠的博客 285

如何用OpenCV训练自己的分类器

转自http://apps.hi.baidu.com/share/detail/32393679 最近要做一个性别识别的项目,在人脸检测与五官定位上我采用OPENCV的haartraining进行定位,这里介绍下这两天我学习的如何用opencv训练自己的分类器。在这两天的学习里,我遇到了不少问题,不过我遇到了几个好心的大侠帮我解决了不少问题,特别是无忌,在这里我再次感谢他的帮助。

hello小工的专栏 3209

一篇文章足够你学习Bluez,提供史上最全的Bluez教程,让你告别Bluez从入门到放弃

Bluez是真的难,说“入门到放弃”真的毫不夸张,Bluez的学习曲线陡峭,要求对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度。

朝气蓬勃 2541

opencv分类器训练方法

python+opencv实现人头检测一、工具,样本数据准备;分类器工具集下载人头识别 分类器训练数据集二、文件夹环境下面8个工具在这里(分类器工具集下载)posdata中存放正样本 negdata 存放负样本下载地址:(人头识别 分类器训练数据集)三、开始训练:dos命令下进入 这个目录;执行dir /b &gt;posdata.dat生成posdata.dat文件dos命令下进入 这个目录;执...

weixin_41799483的博客 1万+

从入门到精通!Arduino 全栈开发深度指南

本文围绕 Arduino 开发撰写全攻略,从基础入门到高级应用层层递进。开篇介绍 Arduino 概念、优势及硬件家族,引导读者完成开发环境搭建与首个 LED 闪烁项目;深入讲解编程语法、I/O 控制及通信协议;详细阐述传感器、模块应用与调试优化技巧;最后以自定义库开发、低功耗设计等高级内容收尾,并给出综合项目案例与产品化思路。无论新手入门,还是开发者进阶,均可从中系统学习 Arduino 知识,掌握从理论到实践的全流程开发技能。

邓邓子的博客 2757

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

opencv级联分类器的训练

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html#id8 概述: 训练分类器的步骤主要分为:准备训练数据和运行分类程序; opencv中有两个程序可以训练级联分类器:opencv_haartraining 和 opencv_traincascade 两者异同: opencv_train...

sazass的博客 1037

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OpenCV训练分类器制作xml文档

opencv 2.1网上查的另一种资料 训练分类器成功,在此与大家分享。  参考英文资料网址: http://note.sonots.com/SciSoftware/haartraining.html#e134e74e  样本训练要求 1、杯子的背景要统一吗,因为有些背景是白色,有些是淡淡的背景色,还有些深色的背景色 答:背景色要统一 2、整个图的大小就是最外面一个框框起来那么

liulina603的专栏 3万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OpenCV的级联分类器训练

​​使用增强级联的弱分类器包括两个主要阶段:训练和检测阶段。对象检测教程中有描述使用基于 HAAR 或 LBP 模型的检测阶段。这里主要介绍训练增强分类器级联所需的功能,包括:准备训练数据、执行实际模型训练、可视化训练。

徐福记456 3222

opencv学习笔记——自己训练人脸识别分类器

       在使用opencv自带的分类器haarcascade_frontalface_alt.xml进行人脸识别的基础认识后,决定自己训练一个分类器看一下效果。该过程大致可分为三个阶段:样本采集、分类器训练和运用训练好的分类器进行人脸检测。1、样本的采集       在训练前,我们需要进行正样本及负样本的采集。       正样本采用的是ORL人脸数据库中的部分图像,本次共选用63张图像,初...

wanty_chen的博客 1万+
上一篇: Unity3D官方案例 - 2DGame - 帽子接球
下一篇: 基于AdaBoost和Cascade算法的人脸检测
TravelerTD
博客等级 码龄10年 32粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值