共计 5366 个字符,预计需要花费 14 分钟才能阅读完成。
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/109096211
各位读者,常识无穷而人力有穷,要么改需要,要么找专业人士,要么本人钻研
红瘦子 (红模拟) 的博文大全:开发技术汇合(蕴含 Qt 实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中 …(点击传送门)
OpenCV 开发专栏(点击传送门)
上一篇:《OpenCV 开发笔记(七十):红瘦子带你傻瓜式编译 VS2017x64 版本的 openCV4》
下一篇:继续补充中…
前言
红瘦子,来也!
做图像处理,常常头痛的是明明分离出来了(非色彩的),分为几块区域,那怎么晓得这几块区域到底哪一块是咱们须要的,那么这部分就波及到须要辨认了。
辨认能够本人写模板匹配、特色点辨认、级联分类器训练辨认。
本文章就是解说级联分类器的训练与辨认。
级联分类器相干
OpenCV 的级联分类器分有两个,别离为 Harr 级联分类器和 LBP 级联分类器。具体级联分类器请查看:
《OpenCV 开发笔记(五十四):红瘦子 8 分钟带你深刻理解 Haar 级联分类器进行人脸检测(图文并茂 + 浅显易懂 + 程序源码)》
《OpenCV 开发笔记(五十五):红瘦子 8 分钟带你深刻理解 Haar、LBP 特色以及级联分类器辨认过程(图文并茂 + 浅显易懂 + 程序源码)》
明确指标
指标是辨认视频中的歌手,咱们先手动采集数据汇合。
视频为《绿色》,如下图:
训练分类器前的筹备工作
采集正样本图片
正样本的尺寸 不是必须统一的,然而要和生成的正样本矢量文件中的宽高有雷同的比例(因为训练过程中,会依据设置的宽高进行等比缩放,比方设置正版本图片是 128×128 的,那么样本为 256×256 会缩放,假如杨文为 256×128 的那么比例就不同了,这个图怎么解决?待定);
正样本图片应该尽可能蕴含少的烦扰背景信息。在训练过程中多余的背景信息也会成为正样本的一个部分特色,此处与深度学习不同,深度学习当初支流无脑深度学习,图像根本的一些去噪都可能不做。
数据起源尽可能做到多样化,比方样本为车,车的姿势场景应稍丰盛些。同一正样本指标的图像太多会使部分特色过于显著,造成这个指标的训练过拟合,影响检测精度,不利于训练器泛化应用。
咱们采集视频的人脸,先把视频解码后保留成 jpg 图片。
此处省略一万字 ………………………………..
创立样本:opencv_createsamples.exe
应用 opencv 自带的命令行工具 opencv_createsamples.exe
- [-info <collection_file_name>]
样本阐明文件,每一行的内容为
xxx.jpg nums x y width height
例如:图片中有两个指标
xxx.jpg 2 0 0 100 100 200 200 100 100
生成样本在 windows 上依靠命令行
dir /b > pos.data
- [-img <image_file_name>]
通过一张图片的扭曲形变成多张图片作为样本,就填写这个参数,参数的内容为要扭曲的图片的门路。填入后,-info 参数不再无效。
- [-vec <vec_file_name>]
样本形容文件的名字及门路
- [-bg <background_file_name>]
负样本形容文件的名字及门路,如果省略,则应用 bgcolor 的值填充作为背景。就是跟寄存负样本图片(背景图片)目录地位雷同的形容文件的门路,可用 txt,dat 等格局保留,每一行的内容为:xxx.jpg。
- [-inv]
如果指定该标记,前景图像的色彩将翻转
- [-randinv]
如果指定该标记,色彩将随机地翻转
- [-num <number_of_samples = 1000>]
总共几个样本,能够省略,则依照输出的理论样本数量产生
- [-bgcolor <background_color = 0>]
背景色彩(目前为灰度图);背景色彩示意通明色彩。因为图像压缩可造成色彩偏差,色彩的容差能够由 -bgthresh 指定。所有处于 bgcolor-bgthresh 和 bgcolor+bgthresh 之间的像素都被设置为通明像素。
- [-bgthresh <background_color_threshold = 80>]
(参考 -bgcolor)
- [-maxidev <max_intensity_deviation = 40>]
前景样本里像素的亮度梯度的最大值
- [-maxxangle <max_x_rotation_angle = 1.100000>]
x 轴最大旋转角度,单位弧度
- [-maxyangle <max_y_rotation_angle = 1.100000>]
y 轴最大旋转角度,单位弧度
- [-maxzangle <max_z_rotation_angle = 0.500000>]
z 轴最大旋转角度,单位弧度
- [-show [<scale = 4.000000>]]
显示样本,作为创立样本时的调试
- [-w <sample_width = 24>]
样本缩放到的尺寸
- [-h <sample_height = 24>]
样本缩放到的尺寸
- [-maxscale <max sample scale = -1.000000>]:
- [-rngseed <rng seed = 12345>]:
创立正样本
创立负样本
创立样本文件 vec
opencv_createsamples -vec pos.vec -info pos/pos.txt -bg neg/neg.txt -show -w 50 -h 70 -maxxangle 6.28 -maxyangle 6.28 -maxzangle 6.28
(留神:LBP 特色 50×70 等都能够能够训练,实测 HAAR 则必须是 24×24 or 20×20)
训练样本 opencv_traincascade.exe
应用 opencv 自带的命令行工具 opencv_traincascade.exe,能够训练三个特色指标:HAAR、HOG、LBP。
- -data <cascade_dir_name>
训练的分类器的存储目录。
- -vec <vec_file_name>
通过 opencv_createsamples 生成的 vec 文件,正样本的数据。
- -bg <background_file_name>
负样本阐明文件,次要蕴含负样本文件所在的目录及负样本文件名。
- [-numPos <number_of_positive_samples = 2000>]
每级分类器训练时所用到的正样本数目,然而该当留神,这个数值肯定要比筹备正样本时的数目少。
- [-numNeg <number_of_negative_samples = 1000>]
每级分类器训练时所用到的负样本数目,能够大于 -bg 指 定的图片数目。
- [-numStages <number_of_stages = 20>]
训练分类器的级数,强分类器的个数
- [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = 1024>]
缓存大小,用于存储事后计算的特征值,单位 MB
- [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = 1024>]
缓存大小,用于存储事后计算的特色索引,单位 MB
- [-baseFormatSave]
仅在应用 Haar 特色时无效,如果指定,级联分类器将以老格局存储。
- [-numThreads <max_number_of_threads = 1>]
反对多线程并行训练
- [-acceptanceRatioBreakValue <value> = -1>]
此参数用于确定模型应放弃学习的准确水平以及何时进行。一个好的指导方针是训练不超过 10e-5(等于 10*10^(-5)),以确保模型不会适度训练您的训练数据。默认状况下,此值设置为 - 1 以禁用此性能。
–cascadeParams–
- [-stageType <BOOST(default)>]
级联类型,目前只能取 BOOST
- [-featureType <{HAAR(default), LBP, HOG}>]
训练应用的特色类型,目前反对的特色有 Haar,LBP 和 HOG
- [-w <sampleWidth = 24>]
训练的正样本的宽度,Haar 特色的 w 和 h 个别为 20,LBP 特色的 w 和 h 个别为 24,HOG 特色的 w 和 h 个别为 64
- [-h <sampleHeight = 24>]
训练的正样本的高
–boostParams–
- [-bt <{DAB, RAB, LB, GAB(default)}>]
加强分类器类型:DAB-Discrete AdaBoost,RAB-Real AdaBoost,LB-LogitBoost,GAB-Gentle AdaBoost。
- [-minHitRate <min_hit_rate> = 0.995>]
类器每个阶段的最小冀望命中率。总体命中率预计为(最小命中率 ^ 阶段数)。
- [-maxFalseAlarmRate <max_false_alarm_rate = 0.5>]
分类器每个阶段的最大冀望误报率。
- [-weightTrimRate <weight_trim_rate = 0.95>]
指定是否应应用修剪及其权重。一个不错的抉择是 0.95。
- [-maxDepth <max_depth_of_weak_tree = 1>]
弱树的最大深度。一个不错的抉择是 1,这是树桩的状况。
- [-maxWeakCount <max_weak_tree_count = 100>]
每个级联阶段的最大弱树数。晋升分类器(stage)将具备许多弱树(<=maxWeakCount),以实现给定的 -maxFalseAllRate。
–haarFeatureParams–
- [-mode <BASIC(default) | CORE | ALL>]
抉择训练中应用的 Haar 特色集的类型。根本只应用直立特色,而所有特色都应用全套直立和 45 度旋转特色集。
训练级联分类器
opencv_traincascade.exe -data data -vec pos.vec -bg neg\neg.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType HAAR -w 64 -h 64
训练出错如下:
更换 LBP 特色,持续训练:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\neg.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 64 -h 64
训练出错如下:
依据谬误宽高是要跟创立的样本一样,改为 50×70,(创立的样本为 50×70),持续训练:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\neg.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 50 -h 70
负样本再生成一次绝对路径:
dir /b /s >negAb.txt
删掉非图片的行
而后持续训练:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\negAb.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 50 -h 70
训练出错,如下:
手动创立 data 目录
持续训练:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\negAb.txt -numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 50 -h 70
而后,失常训练,训练实现:
如何训练 Haar
要训练 haar 特色级联分类器,最开始创立样本就必须为 24×24 or 20×20 的(通过屡次尝试论证),最终设置 24×24 训练进去如下:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\negAb.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType HAAR -w 24 -h 24
训练
opencv_createsamples -vec pos.vec -info pos/pos.txt -bg neg/neg.txt -\
show -w 24 -h 24 -maxxangle 6.28 -maxyangle 6.28 -maxzangle 6.28
应用该级联分类器,应用 cascade.xml 加载即可。
Haar 级联分类器的测试
级联分类器的测试请参考《OpenCV 开发笔记(五十四):红瘦子 8 分钟带你深刻理解 Haar 级联分类器进行人脸检测(图文并茂 + 浅显易懂 + 程序源码)》
上一篇:《OpenCV 开发笔记(七十):红瘦子带你傻瓜式编译 VS2017x64 版本的 openCV4》
下一篇:继续补充中…