发布时间:2023-03-18 11:43:08
求助大神们给个人脸识别的训练样本集
OpenCV训练类器
、简介
目标检测初由Paul Viola [Viola01]提并由Rainer Lienhart [Lienhart02]进行改善
该基本步骤:
首先利用本(约几百幅本图片) harr 特征进行类器训练级联boosted类器
类器"级联"指终类器由几简单类器级联组图像检测检窗口依通每级类器 前面几层检测部候选区域排除全部通每级类器检测区域即目标区域
类器训练完应用于输入图像兴趣区域(与训练本相同尺寸)检测检测目标区域(汽车或脸)类器输1否则输0检测整副图像图像移搜索窗口检测每位置确定能目标搜索同目标物体类器设计进行尺寸改变比改变待检图像尺寸更效所图像检测未知目标物体扫描程序通需要用同比例搜索窗口图片进行几扫描
目前支持种类器boosting技术四种:
Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost
"boosted" 即指级联类器每层都选取boosting算(权重投票)并利用基础类器自我训练
根据面析目标检测三步骤:
1、 本创建
2、 训练类器
3、 利用训练类器进行目标检测
二、本创建
训练本例本反例本其例本指待检目标本(例脸或汽车等)反例本指其任意图片所本图片都归化同尺寸(例20x20)
负本
负本自于任意图片些图片能包含目标特征负本由背景描述文件描述背景描述文件文本文件每行包含负本图片文件名(基于描述文件相路径)该文件必须手工创建
e.g: 负本描述文件例:
假定目录结构:
/img
img1.jpg
img2.jpg
bg.txt
则背景描述文件bg.txt内容:
img/img1.jpg
img/img2.jpg
本
本由程序craatesample程序创建该程序源代码由OpenCV给并且bin目录包含执行程序
本由单目标图片或者系列事先标记图片创建
Createsamples程序命令行参数:
命令行参数:
-vec
训练本输文件名
-img
源目标图片(例:公司图标)
-bg
背景描述文件
-num
要产本数量本图片数目相同
-bgcolor
背景色(假定前图片灰度图)背景色制定透明色于压缩图片颜色差量由bgthresh参数指定则bgcolor-bgthreshbgcolor+bgthresh间像素认透明
-bgthresh
-inv
指定颜色反色
-randinv
指定颜色任意反色
-maxidev
背景色偏离度
-maxangel
-maxangle
-maxzangle
旋转角度弧度单位
-show
指定每本显示按"esc"关闭关即显示本图片创建程继续用debug选项
-w
输本宽度(像素单位)
-h《sample_height》
输本高度像素单位
注:本预先标记图像**获取**由文本文件描述类似于背景描述文件每文本行应图片每行第元素图片文件名第二元素象实体数面紧跟着与匹配矩形框(x, y, 宽度高度)
问一下PCA人脸识别问题
PCA人脸识别是把所有图像看做是一个样本,每张图像看成一行向量,有N张图像就有N行,所以这个样本就可以看成是一个N行的矩阵.先求出这个矩阵的协方差矩阵,再求出这个协方差矩阵的特征值,选择特征值中前m个最大的特征值,这前m个最大的特征值,每个都对应一个特征向量(特征向量也叫做特征脸),这m个特征向量组成一个m行的特征矩阵,这个特征矩阵就是“子空间”,也叫做特征脸空间.所谓投影到子空间,就是把样本中的一张图像看成一行向量,这个向量乘以特征矩阵得到一个m维的向量,就是投影的结果,也是这张图像的特征值.
识别人脸需要做哪些工作?
人脸识别工作流程
人脸识别背景:
简单来讲,人脸识别这个问题,就是给定两个人脸,然后判定他们是不是同一个人,这是它最原始的定义。它有很多应用场景,比如银行柜台、海关、手机解锁、酒店入住、网吧认证,会查身份证跟你是不是同一个人。这个应用的主要特点是,在大多数场景下都需要你先提供一个证件,然后跟自己的人脸做比对。手机解锁可能是个例外,但也要求你提前注册一张人脸,然后再进行比对。这是最原始的形式,由用户直接提供需要对比的两个人脸。这也是最简单的形式,相当于做一个二分类。
注:1:1
进一步来讲,如果想要去做人的搜索呢?比如我们有一个大小为 N 的人脸库,有一张待检索的图片,让我们判断这个人有没有在这个人脸库中出现过。这种情况下,要回答的就有 N 个问题了,分别是:这个人脸是不是库中的人脸1、是不是人脸2,一直到是不是人脸N。如果这 N 个问题回答都是“否”的话,就意味着这个人不在人脸库里面。不在人脸库是一个很难的问题,等于 N 个问题都得回答对,然后才能真正确认它并不这个人脸库里。
实际使用时一般是静态的搜索,比如有一个公安的民警,他从视频或者图片里找到目标人物,把他的脸框出来,然后提交到系统里,在库里面做搜索。然后系统会返回,比如 Top K,K 一般是几十或者100这个量级的数字,会按照相似度把这些人脸排出来,然后人工验证到底哪些是对的。如果 Top 1 就是对的那最好,一般如果能够排到 Top 10 就算是不错的结果,但在 100 名以后的话,这个结果很难对使用的人有帮助了。如果允许TopK的话,这个底库是可以做到比较大的,因为并没有要求一定放到 Top 1。
注:1:N
当然,在安防或者其他应用场景里有更难的任务,就是人脸的 N : N 搜索,这种情况下我们会有大量的摄像头,每一个都在实时抓拍,有非常多待确认的抓拍人脸,同时库也是相对比较大的。举个例子,在安防领域,假设我们有 100 个摄像头,然后每个摄像头每天抓拍 1 万个人,那么总的搜索次数就是 100 万次。假设这一天有 10 个嫌疑人被摄像头抓拍到,假设我们需要在一个 10 万大小的底库里面去搜索他们。我们有一个算法,这个算法这一天总报警 100 次,警察每一个都去确认,最后抓到了 9 个嫌疑人,这看起来还不错,因为总共出现了 10 个人,抓到了 9 个,召回率是 90%。那我们来看看误报率,100 次报警,对了 9 次,错了 91 次,误报率就是91 除以 100万×10万,大概算下来是 10亿分之0.91,约为 10亿分之1 的误报率。
这个指标在现在的人脸识别算法里还算比较不错的了,但是在公安民警看来没有那么理想,因为他们出警了 100次,只抓到了 9 个人,他们非常想出警 10 次就抓到 9 个人,这样成本就会低很多。那我们来看一下出警 10 次抓到 9 个人的误报率是多少呢?看起来少了一个数量级,但实际上要求误报率要提高两个数量级,因为这个时候误报的次数只有 1 次,1 除以 100万×10万,就是已经到了千亿分之一,这个就非常难达到。即使有一个千亿分之一的算法也只能支持 100 个摄像头的需求,在很多城市里轻轻松松就有上万个摄像头,甚至几十万个。所以算法还要在误报率方面再降低 N 个数量级,或者要求我们有更聪明的使用方式,在还有很多研究的空间。
注:N:N
人脸识别的基本流程:
人脸识别的基本流程,首先要检测到人脸,检测到之后一般会做关键点的定位,把他的眼睛、鼻子、嘴角等信息都定位出来,利用这个信息对人脸做个矫正,把它变换到比较正情形,便于后面模型分析或者处理时各个部分更好的对齐。最终会提取得到一个人脸的描述特征,通常是一个 100 多维到几百维的特征表达,然后我们用不同人脸特征之间的相似度或者距离,相似度是越高越好,距离是越小越好,去刻画两个人之间的关系,再卡一个域值,来判断这两个人是否为一个人。这次我们讲人脸识别主要就是最后的人脸特征提取的部分。
影响人脸识别的重要因素:
这里我标红了“模型测评”,评测是件非常难的事,我们针对不同的应用场景做了十几个不同类型的评测 ,因为评测做的不好的话,会影响模型设计,让你判断不清楚哪个模型好、哪个模型差。
大规模人脸评测平台介绍:
之所以要做这个事情有几个原因:
第一,学术界曾经有很多非常有名的测试集,比如 LFW 有 6000 对人脸 1:1 认证。但现在有很多算法都可以达到 99% 以上甚至 99.8% 的好成绩,所以这个效果已经不能很好的衡量算法的好坏了,可能两个同样在 LFW 上达到 99.8% 的算法,换一个数据集时结果会差很多。
第二,MegaFace 在学术界也是非常有名的。它的测试条件是在 100 万干扰项中找到目标人脸,一开始的时候大家觉得这是个很难的问题,但随着学术界几年的研究,排行榜的第一名已经超过 98.9% 了,看起来也有一定的饱和趋势。这里面一开始是有些噪音的,后来被一些研究人员发现之后做了些清理,就发现这个测试集没有想象得那么难。另外,它提供的正样本人脸对的比较有限,正样本每个人的变化并不是特别的大,导致这个问题可能并没有一开始大家预想的那么难。
于是,我们想办法去扩充做一个更大规模的训练集,希望做更客观的评测,帮助在人脸方面做研究的同行们有一个未来几年还可以继续用的测试平台。我们做了两件事情,第一个是做一个比较大的人脸训练集,第二个是做比较大的人脸测试集。训练集大概是有 18 万人,共有 680 万张图片左右,测试集大概有 187 万的人脸。
Python如何图像识别?
1. 简介。
图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,我们可以 在这里 下载学习和查找资料。
Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。
2. 使用。
导入 Image 模块。然后通过 Image 类中的 open 方法即可载入一个图像文件。如果载入文件失败,则会引起一个 IOError ;若无返回错误,则 open 函数返回一个 Image 对象。现在,我们可以通过一些对象属性来检查文件内容,即:
1 import Image
2 im = Image.open("j.jpg")
3 print im.format, im.size, im.mode
4 JPEG (440, 330) RGB
这里有三个属性,我们逐一了解。
format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。
size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。
mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
现在,我们可以使用一些在 Image 类中定义的方法来操作已读取的图像实例。比如,显示最新载入的图像:
1 im.show()
2
输出原图:
3. 函数概貌。
3.1 Reading and Writing Images : open( infilename ) , save( outfilename )
3.2 Cutting and Pasting and Merging Images :
crop() : 从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。
paste() :
merge() :
1 box = (100, 100, 200, 200)
2 region = im.crop(box)
3 region.show()
4 region = region.transpose(Image.ROTATE_180)
5 region.show()
6 im.paste(region, box)
7 im.show()
其效果图为:
旋转一幅图片:
1 def roll(image, delta):
2 "Roll an image sideways"
3
4 xsize, ysize = image.size
5
6 delta = delta % xsize
7 if delta == 0: return image
8
9 part1 = image.crop((0, 0, delta, ysize))
10 part2 = image.crop((delta, 0, xsize, ysize))
11 image.paste(part2, (0, 0, xsize-delta, ysize))
12 image.paste(part1, (xsize-delta, 0, xsize, ysize))
13
14 return image
3.3 几何变换。
3.3.1 简单的几何变换。
1 out = im.resize((128, 128)) #
2 out = im.rotate(45) #逆时针旋转 45 度角。
3 out = im.transpose(Image.FLIP_LEFT_RIGHT) #左右对换。
4 out = im.transpose(Image.FLIP_TOP_BOTTOM) #上下对换。
5 out = im.transpose(Image.ROTATE_90) #旋转 90 度角。
6 out = im.transpose(Image.ROTATE_180) #旋转 180 度角。
7 out = im.transpose(Image.ROTATE_270) #旋转 270 度角。
各个调整之后的图像为:
图片1:
图片2:
图片3:
图片4:
3.3.2 色彩空间变换。
convert() : 该函数可以用来将图像转换为不同色彩模式。
3.3.3 图像增强。
Filters : 在 ImageFilter 模块中可以使用 filter 函数来使用模块中一系列预定义的增强滤镜。
1 import ImageFilter
2 imfilter = im.filter(ImageFilter.DETAIL)
3 imfilter.show()
3.4 序列图像。
即我们常见到的动态图,最常见的后缀为 .gif ,另外还有 FLI / FLC 。PIL 库对这种动画格式图也提供了一些基本的支持。当我们打开这类图像文件时,PIL 自动载入图像的第一帧。我们可以使用 seek 和 tell 方法在各帧之间移动。
1 import Image
2 im.seek(1) # skip to the second frame
3
4 try:
5 while 1:
6 im.seek( im.tell() + 1)
7 # do something to im
8 except EOFError:
9 pass
3.5 更多关于图像文件的读取。
最基本的方式:im = Image.open("filename")
类文件读取:fp = open("filename", "rb"); im = Image.open(fp)
字符串数据读取:import StringIO; im = Image.open(StringIO.StringIO(buffer))
从归档文件读取:import TarIO; fp = TarIo.TarIO("Image.tar", "Image/test/lena.ppm"); im = Image.open(fp)
基本的 PIL 目前就练习到这里。其他函数的功能可点击 这里 进一步阅读。
关于图片识别需要多少训练集和图像识别训练多少张合适的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。