精华内容
下载资源
问答
  • 经典算法之SRC分类器

    千次阅读 2016-01-20 11:30:34
    自从05、06年开始,稀疏表示开始成为研究的热点。自从陶哲轩和他的小伙伴们...2008年,有Wright在PAMI上发表了一篇Sparse Representation based Classifier(SRC)的文章《Robust Face Recognition via Sparse Represe

    自从05、06年开始,稀疏表示开始成为研究的热点。自从陶哲轩和他的小伙伴们解决了稀疏表示的理论问题,压缩感知或Sparse Representation成为学术界的研究热点。2008年,有Wright在PAMI上发表了一篇Sparse Representation based Classifier(SRC)的文章《Robust Face Recognition via Sparse Representation》。该文章从训练样本中抽取一定的样本构建词典,然后使用词典来表示测试样本,选取对应最小残差值的类作为预测的结果。下面简单介绍该算法的过程。

        若Xi表示第i类的训练样本,大小为d*li,d为特征维数,li为样本数量。将所有类别(K类)的训练样本组合成一个矩阵为D=[X1 ... Xi ... XK],大小为d*l。对于任意一个测试样本,可以表示成如下的线性方式:

                                                           y = Da                    (1)

    根据线性代数的知识,已知Dy,系数a可以方便的求解出来。但是,一般情况下,远大于d。因此,公式(1)没有唯一的解。为了得到唯一的解,需要添加一个约束条件,即系数 尽可能的稀疏。因此公式(1)演变为如下的最优问题

                               y = Da   s.t. min ||a|| 1            (2)

    上述的问题等同于如下问题:

                                                   min ||a|| 1  s.t.y = Da        (3)

    该问题属于一种线性约束的最优化问题。已经有很多人研究了如何求解该问题,常用的方法包括梯度法,牛顿法等,这里不一一介绍了。

        求解得到合适的最优系数a*后,利用残差来确定相应的类别,方法如下:

                                                 y* = arg mini ei(y), ei(y) = ||y - Xiai*||2          (4)

    通过公式(4)求解对应的类别。下面给出一个测试样本的求解结果。


    图中左边图片为一个测试样本;中间为根据公式(3)求解出的稀疏系数a*;最右边是通过公式(4)计算的残差,可以看出第一个类别的残差最小,因此对应的类别为第1类。

    展开全文
  • 基于稀疏表示分类的鉴别投影(SRC steered discriminative projection,SRC-DP)则是建立在SRC分类准则基础上的降维方法,其在投影空间中最大化类间重构误差与类内重构误差的比值。针对SRC-DP中提取的特征之间具有...
  • 这是一个基于平行坐标的可视化交互分类器,java源代码。其中也有Java图形操作的模块,可以作为java图形操作的参考。http://hi.baidu.com/mengpanfei/blog/item/292992436ccac00072f05d35.html
  • 使用稀疏表示分类器和主成分分析的抗冻蛋白分类
  • 最近,基于描述子的局部二进制模式(LBP)与基于分类器SRC)稀疏表示(SRC)成为人脸识别两个杰出的技术。初步结合LBP和SRC技术已经在文献中提出的。然而,在真实世界国家的艺术方法,遭受的“维数灾难”。在本文...
  • 利用opencv训练分类器

    千次阅读 2015-07-19 15:13:30
    一、简介  目标检测方法最初由PaulViola提出,并由...分类器中的"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器, 这样在前面几层的检测中大部分的候选区域就被

    一、简介

           目标检测方法最初由PaulViola提出,并由Rainer Lienhart对这一方法进行了改善。该方法的基本步骤为: 首先,利用样本(大约几百幅样本图片)的harr 特征进行分类器训练,得到一个级联的boosted分类器。分类器中的"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器, 这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目标区域。

            分类器训练完以后,就可以应用于输入图像中的感兴趣区域的检测。检测到目标区域分类器输出为1,否则输出为0。为了检测整副图像,可以在图像中移动搜索窗口,检测每一个位置来确定可能的目标。 为了搜索不同大小的目标物体,分类器被设计为可以进行尺寸改变,这样比改变待检图像的尺寸大小更为有效。所以,为了在图像中检测未知大小的目标物体,扫描程序通常需要用不同比例大小的搜索窗口对图片进行几次扫描。

    目前支持这种分类器的boosting技术有四种:Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。"boosted"即指级联分类器的每一层都可以从中选取一个boosting算法(权重投票),并利用基础分类器的自我训练得到。

    根据上面的分析,目标检测分为三个步骤:

    1、 样本的创建

    2、 训练分类器

    3、 利用训练好的分类器进行目标检测

    二、样本的创建

    训练样本分为正例样本和反例样本,其中正例样本是指待检测的目标样本,反例样本指其它任意图片。
    反例(负)样本:负样本可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。背景描述文件是一个文本文件,每一行包含了一个负样本图片的文件名(基于描述文件的相对路径)。该文件创建方法如下:

    在Dos命令下,可以生成描述文件,具体方法是在Dos下的进入你的图片目录,比如我的图片放在D:\face\negdata下,则:

    在开始菜单的查找框中输入cmd,然后运行程序,输入cmd打开DOS命令窗口,输入d:回车,再输入cd D:\face\negdata进入图片路径,再次输入dir/b > negdata.dat,则会图片路径下生成一个negdata.dat文件,打开该文件将最后一行的negdata.dat删除,这样就生成了负样本描述文件。

    也可以直接写一个negdata.bat文件,.bat是一个windows批处理文件,里面的内容如下:

    cd D:\face\negdata
    dir /b > negdata.dat
    pausedos

    双击可直接执行里面的内容,生成负样本的描述文件。

    命令窗口结果如下图:

    正样本:

    对于正样本,通常的做法是先把所有正样本裁切好,并对尺寸做规整(即缩放至指定大小),如上图所示:

    我这里是缩放成20*20大小,由于HaarTraining训练时输入的正样本是vec文件,所以需要使用OpenCV自带的CreateSamples程序,据我所知,早期版本的opencv好像自带编译好的createsamples.exe,但后期版本需要自己编译一下,才能形成creatsamples.exe,编译方法如下:新建一个项目,在项目中添加opencv自带的creatsamples.cpp文件,运行程序就会有.exe文件生成。例如,我新建项目first,就会有一个first.exe生成,这个first.exe在工程项目里面,opencv的createsamples.cpp在opencv\apps\haartraining路径下可以找到。

    1) 制作一个正样本描述文件,用于描述正样本文件名(包括绝对路径或相对路径),正样本数目以及各正样本在图片中的位置和大小。典型的正样本描述文件如下:

    同样它的生成方式可以用负样本描述文件的生成方法,最后用txt的替换工具将“jpg”全部替换成“jpg 1 0 0 20 20“,就可以了,如果你的样本图片多,用txt替换会导致程序未响应,你可以将内容拷到word下替换,然后再拷回来。jpg后面那五个数字分别表示图片个数,目标的起始位置及其宽高。这样就生成了正样本描述文件posdata.dat。

    2) 运行first.exe,如果直接在Vs环境下运行,可以在Project\Settings\Debug属性页的Programarguments栏设置运行参数。下面是一个运行参数示例:
    -info D:\face\dst\src.dat -vec D:\face\pos.vec -num 80 -w 20 -h 20
    表示有80个样本,样本宽20,高20,正样本描述文件为src.dat,结果输出到pos.vec,这些文件前面是我存放这些文件的路径,读者应根据自己的实际情况做修改。

    或者在dos下输入:

    "F:\opencvworkspace\first\Debug\first.exe" -info D:\face\dst\src.dat -vec D:\face\pos.vec -num 80 -w 20 -h 20
    运行完了会D:\face下生成一个*.vec的文件。该文件包含正样本数目,宽高以及所有样本图像数据。结果入下图:

    Createsamples程序的命令行参数:
    命令行参数:
    -vec <vec_file_name>
    训练好的正样本的输出文件名。
    -img<image_file_name>
    源目标图片(例如:一个公司图标)
    -bg<background_file_name>
    背景描述文件。
    -num<number_of_samples>
    要产生的正样本的数量,和正样本图片数目相同。
    -bgcolor<background_color>
    背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh参数来指定。则在bgcolor-bgthresh和bgcolor+bgthresh中间的像素被认为是透明的。
    -bgthresh<background_color_threshold>
    -inv
    如果指定,颜色会反色
    -randinv
    如果指定,颜色会任意反色
    -maxidev<max_intensity_deviation>
    背景色最大的偏离度。
    -maxangel<max_x_rotation_angle>
    -maxangle<max_y_rotation_angle>,
    -maxzangle<max_x_rotation_angle>
    最大旋转角度,以弧度为单位。
    -show
    如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程继续。这是个有用的debug选项。
    -w<sample_width>
    输出样本的宽度(以像素为单位)
    -h《sample_height》
    输出样本的高度,以像素为单位。
    到此,前期的正负样本就准备好了,下面是训练分类器。

    三、训练分类器

    样本创建之后,接下来要训练分类器,这个过程是由haartraining程序来实现的。该程序源码由OpenCV自带,和Createsamples一样,早期opencv版本有自带的haartraining.exe,这里也需要自己编译,例如:我新建项目second,添加opencv\apps\haartraining中的haartraining.cpp文件,可以生成一个second.exe。同样在它的Project\Settings\Debug属性页的Programarguments栏设置运行参数,可以完成分类器的训练。例如:

    -data D:\face\cascade -vec D:\face\pos.vec -bg D:\face\negdata\negdata.dat -npos  80 -nneg 350 -mem 200 -mod ALL -w 20 -h 20

    cascade代表分类器的名字,pos.ves代表正样本,negdata.dat代表负样本,-pos代表正样本个数,-nneg代表负样本个数,-mem代表分配内存数,-mod ALL代表使用垂直和45度角旋转特征,-w和-h代表图片的宽高,注意,正样本数量和负样本数量最好控制在1:4至1:5之间的比例为好。训练好以后会在D:\face\cascade生成生成一些子目录,这些子目录里包含txt文档,这些文档即为训练好的分类器。训练结果如图所示:


    训练好的分类器:文件夹0里面的部分内容:

    Haartraining的命令行参数如下:
    -data<dir_name>
    存放训练好的分类器的路径名。
    -vec<vec_file_name>
    正样本文件名(由trainingssamples程序或者由其他的方法创建的)
    -bg<background_file_name>
    背景描述文件。
    -npos<number_of_positive_samples>,
    -nneg<number_of_negative_samples>
    用来训练每一个分类器阶段的正/负样本。合理的值是:nPos= 7000;nNeg = 3000
    -nstages<number_of_stages>
    训练的阶段数。
    -nsplits<number_of_splits>
    决定用于阶段分类器的弱分类器。如果1,则一个简单的stumpclassifier被使用。如果是2或者更多,则带有number_of_splits个内部节点的CART分类器被使用。
    -mem<memory_in_MB>
    预先计算的以MB为单位的可用内存。内存越大则训练的速度越快。
    -sym(default)
    -nonsym
    指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
    -minhitrate《min_hit_rate》
    每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate的number_of_stages次方。
    -maxfalsealarm<max_false_alarm_rate>
    没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate的number_of_stages次方。
    -weighttrimming<weight_trimming>
    指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9
    -eqw
    -mode<basic(default)|core|all>
    选择用来训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。
    -w《sample_width》
    -h《sample_height》
    训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同。

    四、利用训练好的分类器进行目标检测

    这一步需要用到performance.exe,该程序源码由OpenCV自带,也需要我们新建项目,自己编译一遍,例如:我新建项目third,添加opencv\apps\haartraining中的performance.cpp文件,可生成third.exe。同样在它的Project\Settings\Debug属性页的Programarguments栏设置运行参数,可以完成分类器的目标检测。在这之前,必须准备好你的测试图片,格式和你的正样本图片一样,尺寸也和正样本图片一样。在Programarguments栏设置运行参数,例如:

    -data D:\face\cascade -info D:\face\testdata\testdata.dat -w 20 -h 20 -rs 30

    然后就可以的得到测试结果。

    performance的命令行参数如下:

    Usage:./performance
    -data <classifier_directory_name>
    -info <collection_file_name>
    [-maxSizeDiff <max_size_difference = 1.500000>]
    [-maxPosDiff <max_position_difference = 0.300000>]
    [-sf <scale_factor = 1.200000>]
    [-ni]
    [-nos <number_of_stages = -1>]
    [-rs <roc_size = 40>]
    [-w <sample_width = 24>]
    [-h <sample_height = 24>]

    也可以用opencv的cvHaarDetectObjects函数进行检测。







    展开全文
  • 最近一段在用opencv自带的分类器训练函数训练分类器,遇到了一点问题: 分类器预设的stage=20太深,当训练到第6层时,已经收敛,而由于训练数据非常多,再往下训练非常耗时(已经卡住三天了),因此我就想,如何把...

    最近一段在用opencv自带的分类器训练函数训练分类器,遇到了一点问题:
    分类器预设的stage=20太深,当训练到第6层时,已经收敛,而由于训练数据非常多,再往下训练非常耗时(已经卡住三天了),因此我就想,如何把目前生成的6层弱分类器连接起来,当做最终的分类器(精度已经达到要求)。然后就查询网络,得到了下面的解决方法:

    1.直接根据最终分类器.xml的格式要求,将stagei.xml拼接起来。

    这个方法是最直接的,我仿照着opencv3.0自带的分类器haarcascade_eye.xml中的格式,将我生成的stage0.xml、stage1.xml、stage2.xml等依次复制替换进去,然后进行识别的测试,结果报错,分类器格式不对。
    然后查阅文献,发现分类器的xml文件组成比较复杂,而关键的问题是stagei.xml中并没有存储每个节点对应的haar特征:字段缺失,所以当然无法直接拼接。 方法1错误。

    2.opencv自带的convert_cascade.exe进行拼接。

    这个方法是网上能查到的最常见的解决方法,我也进行了测试,
    convert_cascade.exe –size=”20x20” D:\Training\cascade D:\CE-5\Training\cascade\haar_adaboost.xml
    但依旧报错,因为该函数是opencv2.x对应的,其用的分类器训练函数是opencv_haartraining.exe,和我们3.0的方法不同,生成的stage文件当然不同。
    随后我转到opencv3.0中查找opencv-3..0\modules\objdetect\src\cascadedetect_convert.cpp,进行测试,依旧错误。在网上查好像该函数并不是为了拼接用,好像是转换最终生成的分类器.xml文件的。方法2错误。

    3.最后的方法。

    折腾了有两三天都没搞出来,很无语。突然灵光一闪,我们可以终止原来的训练函数,然后将训练阶数设置成6(与目前训练分类器卡住的位置相同),然后opencv会自动读取之前训练的结果stagei.xml,生成最终的分类器:cascade.xml。
    然后bingo,测试后效果也不错,终于搞定了!!!

    PS. 想问题,往往容易陷入死角,这个时候应该跳出来,换个思路去做;国内网站可以搜到的东西很多都是重复无用的,学好英文多搜搜国外的网站,多Google

    展开全文
  • 仿真matlab程序代码
  • 稀疏表示分类器代码

    2015-11-19 17:05:51
    这个代码是关于人脸识别里面稀疏表示分类器,对于初学者来说很有用。
  • 稀疏表示分类器

    千次阅读 2015-10-28 11:29:37
    稀疏表示可作为基础理论用于构建稀疏表示分类器[14](Sparse Representation Classifier, SRC)。SRC 假定当测试样本所在类的训练样本数足够多时,测试样本可由这些训练样本进行线性表示,而其它类的样本对重构该测试...
          稀疏表示可作为基础理论用于构建稀疏表示分类器[14](Sparse Representation Classifier, SRC)。SRC 假定当测试样本所在类的训练样本数足够多时,测试样本可由这些训练样本进行线性表示,而其它类的样本对重构该测试样本的贡献为 0,从而将一般信号的分类问题转化为了一种稀疏表示问题。大量实验证明,这类分类器能够较好地应用于图像分类和目标跟踪问题。Wright 指出 SRC 对数据缺损不敏感,当所求系数足够稀疏时,特征空间的选取变得不再重要;这些优势使得 SRC成为一种非常优秀的分类算法。虽然大量实验证明基于SRC是一种具有潜力的图像分类器,但近期一些文献[20][21]指出,对于小样本分类问题,系数的稀疏性对分类准确率并没有实质的帮助。针对此题,Huang等在文献[4]中指出结合线性判别分析技术能够提升类间的区分度,提升稀疏分类效果。Shenghua等在文献[22]中成功将核函数(Kernel)技巧与稀疏分类结合在了一起,此文献提出了基于Feature-Sign Search(FSS)的核函数稀疏分类(KSRC)算法并将其成功应用于人脸识别问题中。然而,Cuicui Kang等在文献[6]中指出使用FSS方法求取KSRC中凸优化问题的效率较低,此文献提出了核函数坐标下降法(KCD)用以求解凸优化问题,并结合LBP特征构建了人脸识别系统。
    



    展开全文
  • opencv级联分类器(linux系统)

    千次阅读 2019-01-20 17:37:34
    级联分类器这个坑早该挖的了,由于本人之前使用的是win10系统家庭版的某种关系,并没有成功训练出xml,趁着换了Linux和比赛需要就再次挖挖坑,这里用到的是Opencv自带的两个分类器来训练样本,这里仅讲述linux环境下...
  • ①Haar特征与LBP特征 小波特征+对角线特征“类Haar特征”,局部二值模式“替代特征LBP”。 ②级联分类器原理AdaBoost Viola和Jones,2001在CVPR...级联分类器:多个强分类器组合 弱分类器:weak classifier = Feature ...
  • opencv3.1 boost级联分类器

    千次阅读 2017-02-08 21:33:50
    级联分类器整个过程主要包括:样本准备,数据生成,训练,交叉验证,检测。涉及的源代码主要包括: 1) 样本标注的工具:applications->opencv_annotation opencv_annotation.exe 注意:在标注的过程中,需要...
  • OpenCV | 训练识别狗的分类器过程详解

    万次阅读 多人点赞 2019-04-09 19:49:35
    文章目录一、样本准备二、训练数据准备三、得到vec文件四、训练最终的分类器五、参数解析六、验证识别效果代码七、运行结果 一、样本准备 包括正样本和负样本,由于是手工准备的数据都是在百度截取的图片,所以...
  • 机器学习中常见分类器的应用场景

    万次阅读 多人点赞 2017-06-02 15:22:54
    正好14年的时候有人做过一个实验[1],比较在不同数据集上(121个),不同的分类器(179个)的实际效果。 论文题为:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems? 实验时间...
  • 稀疏表示分类SRC

    万次阅读 多人点赞 2015-11-07 10:51:57
    目前已有很多方法和技术用于构造分类模型,如决策树、神经网络、贝叶斯方法、Fisher线性分析(Fld)以及支持向量机(Support Vector Machine, SVM)。 基于超完备字典的信号稀疏分解是一种新的信号表示理论,其采用超...
  • Haar分类器算法的要点如下: ① 使用Haar-like特征做检测。 ② 使用积分图(Integral Image)对Haar-like特征值进行加速求解。 ③ 使用AdaBoost算法训练区分人脸和非人脸的强分类器。 ④ 使用筛选式级联把强...
  • 检测的物体是否为绝对刚性的物体,也就是检测的...分类器的训练以分为以下三部进行: 1、 样本的创建(正样本和负样本) 2、 训练分类器(生成.xml) 3、 利用训练好的分类器进行目标检测 正样本:所谓正样本就是只...
  • OpenCV提供了尺度不变Haar级联的分类器和跟踪器,OpenCV3的源码中提供了所有OpenCV的用于人脸检测的XML文件,这些文件可以检测静止图像、视频和摄像头所获得图像中的人脸。用户可以利用性能强劲的计算机,创建自己的...
  • 论文《Robust Face Recognition via Sparse Representation》的Matlab代码。
  • 对于svm内核选项,请参考svmjs初始化分类器,如下所示 var multilabel = require('multilabelsvm' ); var actionClassifier = new multilabel.Classifier({kernel : 'linear'}); 浏览器 您需要为此包含svmjs。 //...
  • 训练人脸分类器  使用分类器进行人脸检测 加载训练环境   训练过程主要依靠OpenCV自带的两个可执行程序opencv_createsamples.exe和opencv_haartraining.exe操作完成的。新建一个文件夹命名为cascadeTrain,将...
  • OpenCVForUnity使用Haar分类器检测人脸和眼睛

    千次阅读 热门讨论 2018-02-10 19:19:49
    Github上有许多已经训练好的分类器,可以直接拿来试用。 void Start() { //训练集路径 haarcascade_frontalface_default_xml_filepath = Application.dataPath + "/Cascades/haarcascade_frontalface_...
  • draw.text(local, strs, colour, font=font) image = cv2.cvtColor(np.array(pilimg), cv2.COLOR_RGB2BGR) return image #src为输入的图像 #classifier为对应识别物体的分类器 #strs为识别出的物体的中文说明 #...
  • 分类器 根据真值表对可逆变换进行分类的程序。 汇编 源代码在src/Classifier.java 。 使用任何 Java 编译器编译它,并使用命令java Classifier (在类路径中或 Java 可以看到的地方使用 Classifier.class)运行...
  • 用opencv训练分类器

    千次阅读 2015-08-15 14:04:51
    注:本文转自西电之梦《采用opencv_cascadetrain进行训练的步骤及注意事项》,原文链接...OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个
  • #OpenCV中级联分类器Cascade训练方法 ##OpenCV中级联分类器简介
  • 基于Haar特征和AdaBoost分类器的人脸检测 一、Haar特征与AdaBoost分类器 Haar特征与AdaBoost分类器的介绍 Haar特征 Adaboost入门教程——最通俗易懂的原理介绍(图文实例) Haar人脸检测原版论文 Rapid ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,052
精华内容 22,020
关键字:

src分类器