目标检测的程序如人脸检测,但其中需要一个培训文件 haarcascade_frontalface_default.xml。对于不同的检测目标,这个文件不同,怎么得到这个文件呢?这就是本文要介绍的。

最开始在网上查找,有很多介绍,其中需要几个培训用的执行文件。在我的新版本4.x opencv 里找不到,后来听说只有3.x 的版本里有。我下载了一个opencv 3.4.7,找到了介绍中的执行文件。我想opencv 里应该也有介绍,opencv 3.4.7 版本里只有markdown 类文件,可以用Typora 阅读。后来在我的opencv 3.0beta版本里找到了html,其目录路径是:

file:///E:/opencv/sources/doc/haartraining.htm

本文就以他们的内容为蓝本吧。

两个阶段:训练阶段和检测阶段。 对象检测中介绍了使用基于HAAR或LBP模型的检测阶段。 本文概述了训练自己的分类级联所需的功能。 其包括不同阶段:收集训练数据,准备训练数据并执行实际模型训练。

为了支持本教程,将使用几个官方的OpenCV应用程序:opencv_createsamples ,opencv_annotation,opencv_traincascade和 opencv_visualisation。

这些文件可以在我的网站下载:www.liwensoft.com/downloads/train.zip  我测试了一下下载,因为有好些都是执行文件,容易提示危险。

比较安全的方法是下载opencv3.x 的版本,我的这些文件在这个目录下:C:\opencv347\opencv\build\x64\vc15\bin 。据说4以后的版本就不会有这些文件了。

提示:

opencv_traincascade支持HAAR 和LBP(局部二进制模式)。与HAAR产生浮点精度特征相比,LBP特征产生整数精度,因此LBP的训练和检测速度都比HAAR特征快几倍。关于LBP和HAAR的检测质量,主要取决于所使用的训练数据和选择的训练参数。可以训练基于LBP的分类器,该分类器将在训练时间的一定百分比内提供与基于HAAR的分类器几乎相同的质量。

opencv_traincascade应用程序可以使用TBB进行多线程处理。要在多核模式下使用它,必须在启用TBB支持的情况下构建OpenCV。

准备训练数据

为了训练分类增强级联,我们需要一组正样本(包含要检测的实际对象)和一组负图像(包含不想检测的所有内容)。 负样本集必须手动准备,而正性样本集是使用opencv_createsamples应用程序创建的。

负样本

从任意图像中获取负样本。 这些图像不得包含检测对象。 负样品通过背景描述文件传递, 它是一个文本文件,其中每个文本行都包含负样本图像的文件名(相对于描述文件的目录)。 该文件必须手动创建。 注意,负样本和样本图像也称为背景样本或背景样本图像,在本文档中可互换使用

负样本描述文件示例:

假如文件目录如下:

/img

img1.jpg

img2.jpg

bg.txt

那么文件 bg.txt 内容:

img/img1.jpg

img/img2.jpg

正样本

正样本由opencv_createsamples应用程序创建。增强过程使用它们来定义在尝试找到感兴趣的对象时模型应实际寻找的内容。该应用程序支持两种生成正样本数据集的方式。

1.可以从单个正对象图像生成一堆正值。
  2.可以自己提供所有正样本的内容,仅使用该工具将其切出,调整大小并以opencv所需的二进制格式放置。

虽然第一种方法对固定对象(例如非常刚性的徽标)效果不错,但对于刚性较差的对象,它往往很快就会失效。在这种情况下,我们建议使用第二种方法。网络上的许多教程甚至都指出,通过使用opencv_createsamples应用程序,可以生成100个真实对象图像,而不是1000个人工生成的正值。但是,如果您决定采用第一种方法,请记住以下几点:

在将其提供给上述应用程序之前,您需要多个正样本,因为它仅应用透视变换。
如果您想要一个健壮的模型,请获取涵盖对象类中可能出现的各种变化的样本。例如,对于面孔,您应该考虑不同的种族和年龄段,情绪以及胡须风格。当使用第二种方法时,这也适用。

第一种方法采用带有公司徽标的单个对象图像,并通过随机旋转对象,更改图像强度以及将图像放置在任意背景上,从给定的对象图像中创建大量正样本。随机性的数量和范围可以由opencv_createsamples应用程序的命令行参数控制。

命令行参数:

-vec <vec文件名>  包含用于训练的阳性样本的输出文件的名称

-img <图像文件名>  源对象图像(例如公司徽标)

-bg <background_file_name>  背景描述文件;包含一张图像列表,其中粘贴了对象的随机变形版本以生成正样本

-num <样本数>  产生的正样本数

-bgcolor <background_color>      背景颜色,和下面组合

-bgthresh <background_color_threshold> 背景颜色容忍度,和上面组合

假设当前为灰度图像, bgcolor-bgthresh和bgcolor + bgthresh之间的所有像素均视为透明。

-inv      如果指定,颜色将被反转

-randinv       如果指定,颜色将随机反转

-maxidev <最大强度偏差>   前景样本像素的最大强度偏差

-maxxangle <max_x_rotation_angle>,

-maxyangle <max_y_rotation_angle>,

-maxzangle <max_z_rotation_angle>      最大旋转弧度角

-show      如果指定,将显示每个样本。按“ Esc”将继续创建过程,而不会显示示例。有用的调试选项。

-w <sample_width>   输出样本的宽度(以像素为单位)

-h <sample_height>  输出样本的高度(以像素为单位)

当运行opencv_createsamples时,将使用以下过程创建示例对象实例:给定的源图像围绕所有三个轴随机旋转。所选角度受“ -maxxangle”,“-maxyangle”和“ -maxzangle”限制。然后,像素具有[bg_color-bg_color_threshold; bg_color + bg_c​​olor_threshold]范围被解释为透明。白噪声被添加到前景的强度。如果指定了“ -inv”键,则前景像素强度将反转。如果指定了-randinv键,则算法会随机选择是否应对该样本应用反演。最后,将获得的图像从背景描述文件放置到任意背景上,将其调整为由-w和-h指定的所需大小,并存储到由-vec命令行指定的vec文件中选项。

也可以从以前标记的图像的集合中获取正样本,这是构建鲁棒对象模型时的理想方式。该集合由类似于背景描述文件的文本文件描述。该文件的每一行都对应一个图像。该行的第一个元素是文件名,第2是对象数量,后跟描述包围矩形(x,y,宽度,高度)的对象坐标的数字。

正样本目录结构如下:

/img

img1.jpg

img2.jpg

info.dat

则文件 info.dat 内容如下:

img/img1.jpg  1  140 100 45 45

img/img2.jpg  2  100 200 50 50   50 30 25 25

图像img1.jpg包含具有边界矩形(140、100、45、45)的单个对象实例。

图像img2.jpg包含两个对象实例。

为了从此类集合创建正样本,应指定–info参数而不是–img:

使用OpenCV的集成注释工具

从OpenCV 3.x开始,社区一直在提供和维护开源注释工具,该工具用于生成`-info`文件。如果构建了OpenCV应用程序,则可以通过命令opencv_annotation访问该工具。

使用该工具非常简单。该工具接受几个必需参数和一些可选参数:

`--annotations` <b>(必需)</ b>:注释txt文件的路径,您要在其中存储注释,然后将其传递给`-info`参数[示例-/ data / annotations。文本]
 `--images` <b>(必填)</ b>:包含带有对象图像的文件夹的路径[示例-/ data / testimages /]
 `--maxWindowHeight` <i>(可选)</ i>:如果输入图像的高度大于此处的给定分辨率,请使用--resizeFactor调整图像的大小以便于注释。
 -`--resizeFactor` <i>(可选)</ i>:使用`--maxWindowHeight`参数时用于调整输入图像大小的因素。

请注意,可选参数只能一起使用。可以使用的命令示例如下所示

训练

样本创建后的下一步是训练分类器。 它由haartraining实用程序执行。

命令行参数:

-data <dir_name>      存储受过训练的分类器的目录名称

-vec <vec文件名>      正样本文件的文件名(通过trainingsamples实用程序或通过任何其他方式创建)

-bg <background_file_name>      背景描述文件

-npos <正样本数>,

-nneg <负样本数>      每个分类器阶段的训练中使用的正/负样本数。合理的值是npos = 7000和nneg = 3000。

-nstages <阶段数>  训练阶段数

-nsplits <拆分数>      确定阶段分类器中使用的弱分类器。如果为1,则使用简单的树桩分类器;如果为2或更多,则使用具有number_of_splits内部(拆分)节点的CART分类器

-mem <memory_in_MB>      可用内存,以MB为单位进行预先计算。您拥有的内存越多,训练过程就越快

-sym(默认),

-nonsym      指定受训练的对象类是否具有垂直对称性。垂直对称加快了训练过程。例如,正面显示出垂直对称

-minhitrate <min_hit_rate>      每个阶段分类器的最小期望命中率。总体命中率可以估计为(min_hit_rate ^ 阶段数)

-maxfalsealarm <max_false_alarm_rate>      每个阶段分类器的最大期望误报率。总体误报率可以估计为(max_false_alarm_rate ^ number_of_stages)

-weighttrimming <weight_trimming>  指定是否以及应该使用多少修剪重量。不错的选择是0.90。

-eqw

-mode <BASIC (default) | CORE | ALL>      选择训练中使用的haar功能集的类型。 BASIC仅使用直立功能,而ALL使用整套直立和45度旋转功能集。有关更多详细信息,请参见[1]。

-w <sample_width>,样本宽

-h <sample_height>  样本高

提升分类器参数:
  `-bt <{DAB,RAB,LB,GAB(默认)} >>:增强分类器的类型:DAB-离散AdaBoost,RAB-真实AdaBoost,LB-LogitBoost,GAB-温和AdaBoost。
  `-minHitRate <min_hit_rate>`:分类器每个阶段的最低期望命中率。总体命中率可以估计为(min_hit_rate ^ number_of_stages)。
  `-maxFalseAlarmRate <max_false_alarm_rate>`:分类器每个阶段的最大期望误报率。总体虚警率可以估计为(max_false_alarm_rate ^ number_of_stages)
  `-weightTrimRate <weight_trim_rate>`:指定是否应使用修剪及其权重。不错的选择是0.95。
  `-maxDepth <max_depth_of_weak_tree>`:一棵弱树的最大深度。一个不错的选择是1,这是树桩的情况。
  `-maxWeakCount <max_weak_tree_count>`:每个级联阶段的弱树的最大数量。提升分类器(阶段)将具有如此多的弱树(<= maxWeakCount),以实现给定的“ -maxFalseAlarmRate”。

-Haar的特征参数:
  `-mode <BASIC(默认)|CORE | ALL>`:选择训练中使用的Haar功能集的类型。 BASIC仅使用直立功能,而ALL使用整套直立和45度旋转功能集。

-本地二进制模式参数:本地二进制模式没有参数。

训练样本的大小(以像素为单位)。 必须具有与训练样本创建过程中使用的值(实用训练样本)完全相同的值

opencv_traincascade应用程序完成工作后,经过训练的级联将保存在`-data`文件夹的`cascade.xml`文件中。 此文件夹中的其他文件是为中间培训而创建的,因此可以在培训完成后将其删除。

培训已完成,可以测试级联分类器!

也可参考博客

https://blog.csdn.net/carson2005/article/details/8171571

https://blog.csdn.net/qq_32502511/article/details/79010509

目标检测的模型haartraining培训相关推荐

  1. CVPR 2021 | 视觉目标检测大模型GAIA:面向行业的视觉物体检测一站式解决方案

    作者丨常清 编辑丨机器之心 中国科学院自动化研究所智能感知与计算研究中心联合华为等企业提出面向行业的视觉物体检测一站式解决方案 GAIA. 在深度学习与大数据的浪潮下,视觉目标检测在各个基准数据集上已 ...

  2. 中科院自动化所与华为联合提出!视觉目标检测大模型GAIA

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 中 ...

  3. 目标检测 YOLOv5 - 模型的样子

    目标检测 YOLOv5 - 模型的样子 flyfish 文章目录 目标检测 YOLOv5 - 模型的样子 开始加载模型文件 模型的层 模型的属性 模块的名称以及模块本身 模型的权重 模型权重的名字和权 ...

  4. 2021年 遥感图像目标检测SOTA模型及排行榜

    2021年 遥感图像目标检测SOTA模型及排行榜 本文禁止转载!!! Baseline: DOTA1.0 (Task1) DOTA1.0 (Task2) 可视化 不同模型性能(mAP+文章+源码): ...

  5. 《基于海思35xx nnie引擎进行经典目标检测算法模型推理》视频课程介绍

    前言 沉寂两个月,终于将新的视频课程<<基于海思35xx nnie引擎进行经典目标检测算法模型推理>>(其链接为https://edu.csdn.net/course/deta ...

  6. 目标检测算法模型YOLOV3原理及其实战 课程简介

    前言 在移植目标检测算法模型到海思AI引擎上运行的过程中,深切感受到理解和掌握算法模型原理的重要性. 基于此,我出了一门专门来讲目标检测算法模型原理及实战的课程.虽然讲的是YOLOV3模型,但是对理解 ...

  7. 3D目标检测SE-SSD 模型工程化复现

    3D目标检测SE-SSD 模型工程化复现 3d目标检测se-ssd模型代码偏比赛,记录工程化中的一些问题 1.环境适配 pytorch: 1.7 cuda:10.2 cudnn:8.0 显卡:RTX3 ...

  8. (一)目标检测-R-CNN模型

    目标检测-R-CNN模型 在CVPR 2014年中Ross Girshick提出R-CNN. 1.1 完整R-CNN结构 不使用暴力方法,而是用候选区域方法(region proposal metho ...

  9. maskrcnn用于目标检测_用自己的数据训练Mask R-CNN目标检测/分割模型

    摘要: 本文讲述了如何使用Mask-CNN对图像中的大量数据进行目标识别与目标分割. 计算机非常擅长数字运算,但对分析图像中的大量数据束手无策.直到最近找到了解决方法,即创建图像处理单元库,利用数千个 ...

最新文章

  1. 实战KVM|kvm安装|创建linux|控制台|克隆
  2. 漫步者煲耳机软件_它是苹果AirPods的“真香替身”——漫步者lolliPods开箱体验...
  3. Struts2(批量类型转换器struts2.3.4)
  4. PHP7+Swoole/Nginx/Golang性能对比
  5. c/c++格式化字符串的标识
  6. 【网络传输与RTC】
  7. 操作系统基础:存储管理知识笔记(一)
  8. 了解cron以及使用cron定时备份MySQL
  9. 关于科技创新,2021年政府工作报告这样说
  10. matlab中如何表示线积分,MATLAB - 复杂的线/路径积分
  11. 默认情况下在MongoDB Shell中漂亮打印
  12. html 网页地图集制作ECHARTS,pyecharts绘制地图(示例代码)
  13. vtd和vt的区别_vtvi和v的区别是什么?
  14. 第11节:Docker基本操做
  15. 在CAD中加载大影像的一种方法
  16. 记一次子线程Thread.sleep影响主线程的坑
  17. 安装memcached.exe时, msvcr71.dll丢失怎么解决
  18. 欧拉角、四元数与旋转
  19. MANTIS新手操作教程
  20. 向量逆时针旋转ang度

热门文章

  1. LightOJ1012-Guilty Prince
  2. 这是我的第一个博客有关javascrit的
  3. 使用g++创建动态库和静态库及其相关探索
  4. uboot配置,编译,移植
  5. c语言将两幅bmp格式图片拼接图片
  6. 上传照片显示服务器繁忙怎么回事,解决WordPress上传图片“图像后期处理失败,可能是服务器忙或没有足够的资源”问题...
  7. Adobe illustrator 输入数学平方公式
  8. Crackme 22
  9. mongo查询时区转换
  10. 国产鸿蒙系统手机,国产厂商集体行动!力挺华为鸿蒙系统:唯独小米/中兴坚持安卓系统...