游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

人脸识别算法原理

  一、人脸验证VS人脸识别
  验证:一对一关系匹配识别:数据库中存在多个数据,进行一对多的匹配人脸验证的准确率很高,不代表人脸识别准确率很高,错误率会被放大二、oneshot学习
  有一种考虑方式是仅仅训练几个员工的图片,但是会导致一个问题:每加入一个新员工,就需要重新训练整个网络,计算量太大。所以引入oneshot学习,简单来说,就是反馈需要识别的图像和数据库图像的差距。
  相似性函数similarityfunctiond(img1,img2)differences(img1,img2)d(img1,img2)differences{(img1,img2)}d(img1,img2)differences(img1,img2)verification:verification:verification:d,samedleqau,samed,samed,differentdau,differentd,different
  将输入图片和数据库图片一一验证,计算出每个差距值d,差距最小的就是匹配的图片。三、siamese网络架构
  前面介绍了利用相似度一次性判断图片匹配与否,那么具体是用什么数值进行相似度计算呢?在DeepFace论文中提出了siamese网络,现在来看看原理。在下图中,给出两个卷积神经网络结果,可以对任意两幅图进行比对。两幅图经过相同参数的卷积神经网络后,都会在全连接层输出一个向量。如果我们认为该网络输出的编码结果可以代表原图,那么计算这两次输出向量的差的范式,即可计算两幅图的差距。这便是DeepFace中siamese的核心思想。
  其中向量差的范式即d(x(i),x(j))f(x(i))f(x(j))22d(x{(i)},x{(j)})f(x{(i)})f(x{(j)})22d(x(i),x(j))f(x(i))f(x(j))22
  网络学习目标
  四、Triplet损失
  如果想通过训练网络参数得到优质的人脸图片编码,较好的一个方法就是三元组损失函数然后梯度下降法。三元组损失的意思就是:每次都会看三张图片,一张Anchor(A),一张Positive(P),一张Negative(N)
  我们希望得到的目标是
  移项后得到
  考虑到做差为零的情况是无效的,所以加入一个超参数alpha,使得两个范式的差小于0有效。
  也称这个alpha是间隔。至于这个间隔应该怎么理解,接着往下看。
  我们要得到的目标是上面这个不等式对吧,如果d(A,P)0。50,d(A,N)0。51d(A,P)0。50,d(A,N)0。51d(A,P)0。50,d(A,N)0。51,虽然满足不等式条件,但是,这个间距非常小,即0。01alpha0。010。01很小,所以不利于很好的训练,所以要想拉大这个间距有利于训练,就需要设置更大的alphaalphaalpha,比如等于0。2。那么此时d(A,P)0。50,0。2d(A,N)0。70。d(A,P)0。50,alpha0。2Rightarrowd(A,N)0。70。d(A,P)0。50,0。2d(A,N)0。70。
  基于上述不等式,来定义三元组损失函数L(A,P,N)max(f(A)f(P)2f(A)f(N)2,0)L(A,P,N)max(f(A)f(P)2f(A)f(N)2,0)L(A,P,N)max(f(A)f(P)2f(A)f(N)2,0)
  分析一下这个式子,如果f(A)f(P)2f(A)f(N)20f(A)f(P)2f(A)f(N)20f(A)f(P)2f(A)f(N)20,则损失值为0,而网络不会关心负值是多少;如果f(A)f(P)2f(A)f(N)20f(A)f(P)2f(A)f(N)20f(A)f(P)2f(A)f(N)20,则损失值取这个正数。整个网络的代价函数就可以定义了:Ji1mL(A(i),P(i),N(i))Jsum{i1}mL(A{(i)},P{(i)},N{(i)})Ji1mL(A(i),P(i),N(i))
  写到这里我们发现数据集中需要构造成对的三元组(A,P,N),假设10k张人脸图片中包含了1k个人,那么平均每个人有10张照片。如果某个人只有一张自己的人脸图片,那么系统无法训练。将训练好的系统应用到人脸识别中,就可以一次性识别某个人的人脸了(此时不需要给多张此人的人脸进去)。
  数据集怎么样构造?遵守一个原则:AP是同一个人,AN是不同的人。但是由于N的随机性,AN很大概率差距很大,认为网络训练好像不能学习到很有用的东西。所以选择难训练的三元组学习。d(A,P)d(A,N)d(A,P)approxd(A,N)d(A,P)d(A,N)
  通过三元组损失函数进行梯度下降,可以优化网络参数,得到最佳的人脸图片编码。五、面部验证和二分类
  三元组损失确实是学习训练人脸识别卷积神经网络参数的好方法,现在看看另一种方法:将人脸识别转化为二分类问题。
  将输出的两个向量作为逻辑回归单元的输入,最后输出预测值ywidehatyy,如果人脸匹配则为1,不匹配则为0。(在之前做三元组损失的时候,我就在思考这个问题,能不能不计算三幅图之间的差距,那样好像显得过程很繁琐,能不能用二分类的方式直接得到01分类)注意:上下两套卷积网络(比如用Siamese网络)的参数是共享的、绑定的。
  ysigmoid(k1128wif(x(i))kf(x(j))kb)widehatysigmoid(sum{k1}{128}wif(x{(i)})kf(x{(j)})kb)ysigmoid(k1128wif(x(i))kf(x(j))kb)
  可以将f(x(i))kf(x(j))kf(x{(i)})kf(x{(j)})kf(x(i))kf(x(j))k替换为〔f(x(i))kf(x(j))k〕2f(x(i))kf(x(j))kfrac{〔f(x{(i)})kf(x{(j)})k〕2}{f(x{(i)})kf(x{(j)})k}f(x(i))kf(x(j))k〔f(x(i))kf(x(j))k〕2
  这一块称作卡方平方相似度卡方平方公式。
  假如上面这幅图是需要验证的图片,下面那张图片是数据库中的图片。可以事先计算好数据库中的图片编码,当有需要验证的图片到来时,只需要计算上面网络的正向传播编码结果,然后输入逻辑回归,输出得到预测值01。这就是预先计算方式来节省大量计算时间。
  最后总结一下监督学习中的人脸二分类问题输入的两张图片,通过Siamese卷积神经网络后得到人脸编码,通过逻辑回归得到预测值,其中训练过程是反向传播优化网络和逻辑回归中的参数。
  软硬件环境ubuntu18。0464bitGTX1070Tianacondawithpython3。6facerecognition1。2。3dlibopencvfacerecognition简介
  facerecognition号称是世界上最简单的基于python的人脸识别库,是在大名鼎鼎的深度学习框架dlib上做的整合,dlib模型在LFW(LabeledFacesintheWild)能有99。38的准确率。另外facerecognition提供了相应的命令行工具,可以通过命令行来对图片文件夹进行人脸识别,非常的酷。安装facerecognition
  可以利用pip来安装pipinstallfacerecognition复制代码
  或者从源码开始安装gitclonehttps:github。comageitgeyfacerecognition。gitcdfacerecognitionpythonsetup。pyinstall复制代码facerecognition工作流找出人脸
  第一步就是要找出给定图片中包含的全部的脸的位置
  importfacerecognitionimagefacerecognition。loadimagefile(yourfile。jpg)facelocationsfacerecognition。facelocations(image)复制代码操作特征点
  找出每个人的眼睛、鼻子、嘴巴和下巴
  importfacerecognitionimagefacerecognition。loadimagefile(yourfile。jpg)facelocationsfacerecognition。facelocations(image)复制代码进行识别
  最后一步,也是最关键的一步,识别出这张脸是属于谁的。facerecognition使用了欧几里得距离(可以参考我的另一篇文章xugaoxiang。com20191130)来确定是不是同一张脸。
  importfacerecognitionknownimagefacerecognition。loadimagefile(biden。jpg)unknownimagefacerecognition。loadimagefile(unknown。jpg)bidenencodingfacerecognition。faceencodings(knownimage)〔0〕unknownencodingfacerecognition。faceencodings(unknownimage)〔0〕resultsfacerecognition。comparefaces(〔bidenencoding〕,unknownencoding)复制代码命令行工具
  facerecognition提供了2个命令行工具facedetection找出给定图片或图片文件夹中的人脸facerecognition进行人脸识别
  具体如何使用,可以通过help来查看参数。facedetection比较简单,这里就不讲了。命令行工具facerecognition使用
  要进行人脸识别,首先必须准备已知人员的信息,这里用一个独立的文件夹来存放,比如known,然后每一个人的图片都以他的名字来命令,如JoeBiden。jpg、Kobe。jpg。
  然后将需要识别的图片放置在另一个文件夹中,如unknown,执行以下命令进行识别facerecognitionknownunknown复制代码
  默认情况下,不设置阈值的话,正确识别率是非常非常低的。在实际情况下,需要根据自己的情况,来适当调整阈值。在同样的测试环境下,将相似度阈设成了0。38,识别结果就正确了。facerecognitionknownunknowntolerance0。38复制代码
  打印中的unknownperson表明是陌生人
  另一个有用的参数是cpus,如果你使用的是多核CPU,可以利用这个参数来提升识别速度。cpus1表示使用所有的CPU核。KNN分类器
  KNN(KNearestNeighbor)通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
  在实际的项目中,一般都会用一个分类器(classifier)来存储已知人脸的数据,方便管理。facerecognition使用了基于KNN算法的分类器。制作分类器
  代码来自examplesfacerecognitionknn。py,注释很详细了,就不一一解释了。经测试,同一人的图片越多,识别的准确率就越高。deftrain(traindir,modelsavepathNone,nneighborsNone,knnalgoballtree,verboseFalse):Trainsaknearestneighborsclassifierforfacerecognition。:paramtraindir:directorythatcontainsasubdirectoryforeachknownperson,withitsname。(Viewinsourcecodetoseetraindirexampletreestructure)Structure:traindirperson1somename1。jpegsomename2。jpeg。。。person2somename1。jpegsomename2。jpeg。。。:parammodelsavepath:(optional)pathtosavemodelondisk:paramnneighbors:(optional)numberofneighborstoweighinclassification。Chosenautomaticallyifnotspecified:paramknnalgo:(optional)underlyingdatastructuretosupportknn。defaultisballtree:paramverbose:verbosityoftraining:return:returnsknnclassifierthatwastrainedonthegivendata。X〔〕y〔〕Loopthrougheachpersoninthetrainingsetforclassdirinos。listdir(traindir):ifnotos。path。isdir(os。path。join(traindir,classdir)):continueLoopthrougheachtrainingimageforthecurrentpersonforimgpathinimagefilesinfolder(os。path。join(traindir,classdir)):imagefacerecognition。loadimagefile(imgpath)faceboundingboxesfacerecognition。facelocations(image)iflen(faceboundingboxes)!1:Iftherearenopeople(ortoomanypeople)inatrainingimage,skiptheimage。ifverbose:print(Image{}notsuitablefortraining:{}。format(imgpath,Didntfindafaceiflen(faceboundingboxes)1elseFoundmorethanoneface))else:AddfaceencodingforcurrentimagetothetrainingsetX。append(facerecognition。faceencodings(image,knownfacelocationsfaceboundingboxes)〔0〕)y。append(classdir)DeterminehowmanyneighborstouseforweightingintheKNNclassifierifnneighborsisNone:nneighborsint(round(math。sqrt(len(X))))ifverbose:print(Chosenneighborsautomatically:,nneighbors)CreateandtraintheKNNclassifierknnclfneighbors。KNeighborsClassifier(nneighborsnneighbors,algorithmknnalgo,weightsdistance)knnclf。fit(X,y)SavethetrainedKNNclassifierifmodelsavepathisnotNone:withopen(modelsavepath,wb)asf:pickle。dump(knnclf,f)returnknnclf复制代码使用分类器defpredict(Ximgpath,knnclfNone,modelpathNone,distancethreshold0。6):RecognizesfacesingivenimageusingatrainedKNNclassifier:paramXimgpath:pathtoimagetoberecognized:paramknnclf:(optional)aknnclassifierobject。ifnotspecified,modelsavepathmustbespecified。:parammodelpath:(optional)pathtoapickledknnclassifier。ifnotspecified,modelsavepathmustbeknnclf。:paramdistancethreshold:(optional)distancethresholdforfaceclassification。thelargeritis,themorechanceofmisclassifyinganunknownpersonasaknownone。:return:alistofnamesandfacelocationsfortherecognizedfacesintheimage:〔(name,boundingbox),。。。〕。Forfacesofunrecognizedpersons,thenameunknownwillbereturned。ifnotos。path。isfile(Ximgpath)oros。path。splitext(Ximgpath)〔1〕〔1:〕notinALLOWEDEXTENSIONS:raiseException(Invalidimagepath:{}。format(Ximgpath))ifknnclfisNoneandmodelpathisNone:raiseException(Mustsupplyknnclassifiereitherthourghknnclformodelpath)LoadatrainedKNNmodel(ifonewaspassedin)ifknnclfisNone:withopen(modelpath,rb)asf:knnclfpickle。load(f)LoadimagefileandfindfacelocationsXimgfacerecognition。loadimagefile(Ximgpath)Xfacelocationsfacerecognition。facelocations(Ximg)Ifnofacesarefoundintheimage,returnanemptyresult。iflen(Xfacelocations)0:return〔〕Findencodingsforfacesinthetestiamgefacesencodingsfacerecognition。faceencodings(Ximg,knownfacelocationsXfacelocations)UsetheKNNmodeltofindthebestmatchesforthetestfaceclosestdistancesknnclf。kneighbors(facesencodings,nneighbors1)arematches〔closestdistances〔0〕〔i〕〔0〕distancethresholdforiinrange(len(Xfacelocations))〕Predictclassesandremoveclassificationsthatarentwithinthethresholdreturn〔(pred,loc)ifrecelse(unknown,loc)forpred,loc,recinzip(knnclf。predict(facesencodings),Xfacelocations,arematches)〕复制代码CUDA加速
  如果还想提升性能,那就必须上显卡了,由于facerecognition依赖与dlib,因此需要先安装支持CUDA的dlib,可以参考另一篇文章xugaoxiang。com20191213importfacerecognitionimagefacerecognition。loadimagefile(mypicture。jpg)facelocationsfacerecognition。facelocations(image,modelcnn)facelocationsisnowanarraylistingthecoordinatesofeachface!复制代码与摄像头联动
  这里使用opencv来实现,opencv读取摄像头每一帧的数据,然后进行resize、颜色空间的转换(由opecv使用的BGR转换成facerecognition使用的RGB),最后进行人脸的检测及识别。importfacerecognitionimportcv2videocapturecv2。VideoCapture(0)Loadasamplepictureandlearnhowtorecognizeit。obamaimagefacerecognition。loadimagefile(obama。jpg)obamafaceencodingfacerecognition。faceencodings(obamaimage)〔0〕Loadasecondsamplepictureandlearnhowtorecognizeit。bidenimagefacerecognition。loadimagefile(biden。jpg)bidenfaceencodingfacerecognition。faceencodings(bidenimage)〔0〕Createarraysofknownfaceencodingsandtheirnamesknownfaceencodings〔obamafaceencoding,bidenfaceencoding〕knownfacenames〔BarackObama,JoeBiden〕Initializesomevariablesfacelocations〔〕faceencodings〔〕facenames〔〕processthisframeTruewhileTrue:Grabasingleframeofvideoret,framevideocapture。read()Resizeframeofvideoto14sizeforfasterfacerecognitionprocessingsmallframecv2。resize(frame,(0,0),fx0。25,fy0。25)ConverttheimagefromBGRcolor(whichOpenCVuses)toRGBcolor(whichfacerecognitionuses)rgbsmallframesmallframe〔:,:,::1〕Onlyprocesseveryotherframeofvideotosavetimeifprocessthisframe:Findallthefacesandfaceencodingsinthecurrentframeofvideofacelocationsfacerecognition。facelocations(rgbsmallframe)faceencodingsfacerecognition。faceencodings(rgbsmallframe,facelocations)facenames〔〕forfaceencodinginfaceencodings:Seeifthefaceisamatchfortheknownface(s)matchesfacerecognition。comparefaces(knownfaceencodings,faceencoding)nameUnknownIfamatchwasfoundinknownfaceencodings,justusethefirstone。ifTrueinmatches:firstmatchindexmatches。index(True)nameknownfacenames〔firstmatchindex〕facenames。append(name)processthisframenotprocessthisframeDisplaytheresultsfor(top,right,bottom,left),nameinzip(facelocations,facenames):Scalebackupfacelocationssincetheframewedetectedinwasscaledto14sizetop4right4bottom4left4Drawaboxaroundthefacecv2。rectangle(frame,(left,top),(right,bottom),(0,0,255),2)Drawalabelwithanamebelowthefacecv2。rectangle(frame,(left,bottom35),(right,bottom),(0,0,255),cv2。FILLED)fontcv2。FONTHERSHEYDUPLEXcv2。putText(frame,name,(left6,bottom6),font,1。0,(255,255,255),1)Displaytheresultingimagecv2。imshow(Video,frame)Hitqonthekeyboardtoquit!ifcv2。waitKey(1)0xFFord(q):breakReleasehandletothewebcamvideocapture。release()cv2。destroyAllWindows()复制代码
  另外本地视频文件、网络摄像头(基于rtsp视频流)的识别场景跟本地摄像头的处理非常相似,这里以就不再继续贴代码了。

新浪微博活动官方爆出小米抽奖虚假操作,小米脸疼吗?除了偷换芯片,小米搞虚假操作的新闻总是不绝于耳,什么销量第一,数据造假大家早已习以为常。其实微博抽奖这件事,大家都懂的,一般都是指定自己的内部人员中奖。新浪为了避免这种抽奖弄虚……蔚来导航界面弹广告,被安卓支配的恐惧出现了?近日有车主爆料蔚来汽车中控导航界面弹出了蔚来NIOLife旗下品牌广告使得自己无法使用地图消息发上社交平台就有部分车主评论这并非弹窗广告……创品代理案件上榜2020年广东反不正当竞争十大典型案例前段时间,广东省市场监督管理局(知识产权局)发布了2020年度广东省反不正当竞争十大典型案例,其中创品律所代理的一宗包装装潢不正当竞争行政投诉案件入选。案件名称:广……这家公司支持华为手机本无可厚非,但做法上别成高级黑9月15日,江苏某公司下发内部文件,要求全体员工使用华为手机,而使用苹果手机的员工,限定30日内更换为国产品牌手机,否则按照自动离职处理。此外,更进一步要求所有员工不得购买苹果……重要!活动取消通知各位发烧友们:大家好,我们抱歉地通知您,由于最近防疫情况变得严峻,加上爱威影音公司附近的地铁站真北路站和附近小区都疑似发现有密切接触者召到隔离。原定于7月31日(周六)下……体验更丰富的理想ONE车载生态,好看易用又安全数字经济时代,软件正在重新定义汽车。有人说,汽车越来越像一部智能手机,汽车将从传统代步工具升级为智能移动终端。近日,理想汽车OTA2。2版本开始向全体车主推送,本次不仅带来了更……你们公司年终奖品都发了啥?盘点男人会喜欢的年终礼年关将至,年终奖和年会礼物成为茶余饭后的火热话题,按照P君以往的观察来看,接下来的微博热搜可能会是这样:明星给员工送钱、送车、送出国旅游。。。。。出手大方被称作中国好老板……我们在哪里可以找到大自然的第五种力量?我们知道自然界的四种基本力,却没有第五种的迹象。但是暗物质和暗能量占了宇宙所有物质的90以上。所以问题依然存在:在我们宇宙的暗区中是否隐藏着第五种力量?暗物质和暗能量中有……中国真的要建造星空巨舰吗?目前还不现实,但技术在突飞猛进前不久,中国家自然科学基金委员会发布十四五第一批重大项目指南,其中有一个关于航天的项目备受关注,这个项目就是超大型航天结构空间组装动力学与控制,有网友将其总结为一句话中国正在研……数字化家居如何后来居上?2020年,数字化转型成为了各行业发力的重点。今年以来,家居行业在经历一场大洗牌的变革。家居行业作为十分重线下体验的行业,一度被认为是最难实现数字化转型的行业之一。由于家……2021年最具性价比三星手机GalaxyA325G亮相三星已经发布了两款性价比定位的GalaxyA系列手机,并将于2021年初上市,但GalaxyA12和GalaxyA02都仅限4G版本。而三星2021年最具性价比的5G手机可能是……时间无价云徙CEO包志刚致敬奋斗者令人憧憬的2021年已然扑面而来。回首2020,极不平凡。这一年,带给这个世界太多的艰难和不易。突如其来的新冠肺炎疫情袭击了人类社会。疫情的重压促使着数字化的趋势不……
累计销量突破10万,比亚迪汉将迎来新车型,搭载华为5G系统自去年公布以来,广受好评的比亚迪汉一年累计销量已经突破10万,达到了101309辆,成为了最受市场欢迎的中高端新能源车及中国品牌品牌中大型轿车市场的No。1。据媒体报道,比亚迪……航天科工集团也与吉利有合作,Transition是契机最近吉利99控股的沃尔沃汽车又开始寻求独立IPO,这个消息一出可谓是又把吉利的合作蓝图推到了大众的眼前,就比如说在2018年与中国航天科工集团有限公司的合作。在2018年……冰糖炖雪梨蒋世佳是谁演的蒋世佳扮演者个人资料介绍近日,电视剧《冰糖炖雪梨》未播先火,在网上关于剧中的人物展开了热议,其中居中ldquo;蒋世佳rdquo;一角是谁扮演者深受观众的关注,今天小编就来给大家介绍一下蒋世佳扮演者的……不玩游戏,iPhone13和iPhone13Pro怎么选?需求:本来打算买13来着,有必要花2000升级成Pro吗?游戏数据都在安卓手机里,所以苹果不打算玩游戏。看了题主的要求,看样子是要双持了,用安卓玩游戏,苹果用来平日里日常……冰糖炖雪梨边澄出场什么时候边澄扮演者个人资料介绍近日,电视剧《冰糖炖雪梨》可谓是未播先火啊,剧中边澄这个角色受到了大家的关注,在剧中边澄这个角色什么时候出场呢?出现在第几集呢?边澄的扮演者是谁呢?跟随小编一起来看一下。……人生,真的有太多的身不由己有时候,明明舍不得,却依然要放手。不是所有的故事都能写到最后,不是所有的人都能陪你天长地久。纵然再不舍,也要逼着自己放下心中的执念。从前,总是不懂这个道理,对于那些……鬼吹灯之精绝古城结局什么意思,鬼吹灯之精绝古城是实景拍摄吗冒险剧《鬼吹灯之精绝古城》给带来胡八一和雪莉杨,加上王胖子一起经历万险去塔克拉玛干沙漠的精绝古城遗址中冒险寻找鬼洞,最后许多人发现都上雪莉杨的圈套,完全被她骗的情况,而剧情拍摄……近20年好看的职场电视剧推荐7部没有谁是能够随随便便就成功的,职场菜鸟的升职过程可以称得上是一部惊心动魄的成长史。下面昕薇网小编推荐近20年好看的职场电视剧,第1部:《金牌投资人》(2018年)简……古装搞笑穿越电视剧有哪些(精选10部好看耐看的剧)大家都知道,古装搞笑穿越电视剧有很多部,每一部穿越电视剧都有它自己的特色,虽然穿越电视剧非常多,但是并非每一部都好看,那古装搞笑穿越电视剧有哪些?下面给大家精选10部好看耐看的……中台赋能,直企拥抱数字化的捷径2020加速了直企进行数字化升级,也让经销商和创业伙伴学会拥抱新的变化。2020新经济风云榜暨知识经济专家委员会上,云徙科技荣获中国直销30年杰出服务奖。云徙科技新……你要知道,你越对,你得罪的人就越多我必须要说明,听中国人的话要很小心。我们绝对不是要你同流合污,绝对不是要你投机取巧,但是我们要你顾虑大家的面子,要你能够随机应变,要你能够忍一时之气,否则这个是非永远是讲……端点完成6亿元B轮融资阿里云跟投端点宣布获6亿元B轮融资,此轮投资由华平投资领投,老股东红杉中国、阿里云跟投,指数资本担任独家财务顾问。端点上一轮融资在2021年3月,完成了超过4亿人民币的A轮融资。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网