功能彻底失效。曾经扫一眼就能开锁、支付的人工智能,如今就像一根“废柴”。这不,网友吐槽层出不穷:有网友建议各大手机厂商开发新功能:起初我们知道,AI人脸识别技术被用作刑事照片管理和刑事侦查的重要个人身份识别手段。现在该技术在安全系统和业务系统中有很多应用。今天,我们每天都依赖这个功能。早上起床指着手机看,自动解锁;网购“刷脸”支付;外出购物无需带现金,只需在机器前“刷脸”支付,上班“刷脸”签到;纸质“刷脸”安检通道……这项正在逐渐融入日常生活各个领域的技术,给我们的生活带来了极大的便利。接下来就带大家简单学习一下这项技术吧~01.AI人脸识别人脸识别是计算机视觉和模式识别的交叉,并将两者结合在一起。20世纪80年代后期,神经生理学、脑神经学、视觉知识被引入人脸识别。结合计算机技术的快速发展和计算成本的快速下降,一些以前费时费空间的模式匹配算法,如大样本、多维特征参数的引入、建模等。另外人脸识别领域的研究具有很大的理论价值,也具有很大的实用价值。是一种基于人脸特征信息进行身份识别的生物识别技术。02.在识别领域,人脸检测是指对图片中的人脸进行检测和定位,返回高精度的人脸框坐标,是人脸分析处理的第一步。早期的检测过程称为“滑动窗口”,即选取图像中的某个矩形区域作为滑动窗口,从这个窗口中提取一些特征来描述图像区域,最后判断该窗口是否为人脸(如下图所示)。人脸检测的过程就是不断遍历需要观察的窗口。人脸关键点检测是指定位并返回面部特征和轮廓关键点的坐标(如下图)。关键点包括脸部、轮廓、眼睛、眉毛、嘴唇和鼻子轮廓。现在一些人脸识别公司,比如Face++,可以提供高精度的关键点,最高可达106个点。无论是静态图片还是动态视频流,都能完美贴合人脸。人脸关键点定位技术关键点定位技术主要包括级联形状回归(CSR)。目前人脸识别一般都是基于DeepID网络结构。DeepID网络结构类似于卷积神经网络结构。主要区别在于倒数第二层。DeepID网络结构有一个DeepID层,它连接了卷积层4和最大池化层3。卷积神经网络层数越高视野越大,这种连接方式可以同时考虑局部特征和全局特征(如下图所示)。人脸验证是指分析两张脸属于同一个人的可能性。输入两张人脸,得到一个置信度分数和相应的阈值来评估相似度。下图是调用Face++的人脸验证在线接口得到的结果。比较结果是:是同一个人的可能性很大。人脸属性检测分为人脸属性识别和人脸情感分析。例如,给定一个人的年龄,是否有胡子,情绪(快乐,正常,愤怒,愤怒),性别,是否戴眼镜,肤色等,进行人脸属性识别和人脸情绪分析。由于化妆和光线的原因,下图中给出的照片的测试结果不是很准确。02.数据预处理在图像识别中,数据预处理是非常重要的一步。这里使用facenet源码下的align模块进行标定。我们需要将用于检测的数据集校准为与用于预训练模型的数据集大小相同。为了正确运行标定程序,需要设置环境变量:exportPYTHONPATH=$YOURHOME/facenet/src标定命令如下:forNin{1..4};dopythonsrc/align/align_dataset_mtcnn.py$YOURHOME/facenet/datasets/lfw/raw$YOURHOME/facenet/datasets/lfw/lfw_mtcnnpy_160--image_size160--margin32--random_order--gpu_memory_fraction0.25done这里使用了GitHub上提供的预训练模型20170216-091149.zip,使用的训练集是MS-Celeb-1M数据集。MS-Celeb-1M是微软的一个超大型人脸识别数据库,它是从名人名单中选出前100万名名人,然后通过搜索引擎收集每个名人大约100张人脸图片而形成的。这个预训练模型的准确率达到了0.993±0.004。我们将下载的模型解压到:$YOURHOME/facenet/models/facenet/20170216-091149其中包含的文件如下:model-20170216-091149.ckpt-250000.data-00000-of-00001model-20170216-091149。ckpt-250000.indexmodel-20170216-091149.met10.4.303。运行测试并进入facenet目录,使用以下命令运行脚本:pythonsrc/validate_on_lfw.pydatasets/lfw/lfw_mtcnnpy_160models得到的结果如下:Modeldirectory:/media/data/DeepLearning/models/facenet/20170216-091149/MetagraphFile:Model-20170216-091149.METACHECKPOINTFILE:MODED-20170216-091149.CKPT-25000000000000000000RUNNNINGNNINGFORWARDPASSOPPASSACCURACY:0.993+-0.004.004VALIDATERATE对比benchmark,这里使用的是facenet/data/pairs.txt文件,是官方随机生成的数据,包含匹配和不匹配的名字和图片编号。匹配人名和图片编号的例子如下:Abel_Pacheco14表示Abel_Pacheco的图片1和4是一个人。人名和图像编号不匹配的示例如下:Abdel_Madi_Shabneh1Dean_Barker1表示Abdel_Madi_Shabneh的照片1和Dean_Barker的照片1不是同一个人。检测让我们看一下validate_on_lfw.py是如何检测人脸的。可以分为4个步骤,如下:defmain(args):withtf.Graph().as_default():withtf.Session()assess:1。pairs.txt文件在读取之前读取,如[['Abel_Pacheco','1','4']['Akhmed_Zakayev','1','3']['Slobodan_Milosevic','2','Sok_An','1']]pairs=lfw.read_pairs(os.path.expanduser(args.lfw_pairs))获取文件路径及路径之间的匹配关系,actual_issame=lfw.get_paths(os.path.expanduser(args.lfw_dir),pairs,args.lfw_file_ext)2.加载模型:%s'%meta_file)print('Checkpointfile:%s'%ckpt_file)facenet.load_model(args.model_dir,meta_file,ckpt_file)3.获取输入和输出张量images_placeholder=tf.get_default_graph().get_tensor_by_name("input:0")embeddings=tf.get_default_graph().get_tensor_by_name("embeddings:0")phase_train_placeholder=tf.get_default_graph().get_tensor_by_name("phase_train:0")image_size=images_placeholder.get_shape()embedding_size=embeddings.get_shape()4.使用前向传播验证print('RunningforwardpassonLFWimages')batch_size=args.lfw_batch_sisenrof_images=len(paths)nrof_batches=int(math.ceil(1.0*nrof_images/batch_size))批次总数emb_array=np.zeros((nrof_images,embedding_size))foriinrange(nrof_batches):start_index=i*batch_sizeend_index=min((i+1)*batch_size,nrof_images)pathspaths_batch=paths[start_index:end_index]images=facenet.load_data(paths_batch,False,False,image_size)feed_dict={images_placeholder:images,phase_train_placeholder:False}emb_array[start_index:end_index,:]=sess.run(embeddings,feed_dict=feed_dict)5.这里计算准确率和验证率,采用十折交叉验证方法tpr,fpr,精度、val、val_std、far=lfw.evaluate(emb_array、actual_issame、nrof_folds=args.lfw_nrof_folds)print('精度:%1.3f+-%1.3f'%(np.mean(精度)、np.std(精度)))print('Validationrate:%2.5f+-%2.5f@FAR=%2.5f'%(val,val_std,far))获取auc值auc=metrics.auc(fpr,tpr)print('AreaUnderCurve(AUC):%1.3f'%auc)得到相等的错误率(eer)eer=brentq(lambdax:1.-x-interpolate.interp1d(fpr,tpr)(x),0.,1.)print('EqualErrorRate(EER):%1.3f'%eer)这里采用10折交叉验证来检验算法的准确性。10折交叉验证是一种常用的准确性测试方法。具体策略是:将数据集分成10份,依次将其中9份作为训练集,1份作为测试集。10次??结果的平均值作为算法准确度的估计。一般需要多次10折交叉验证求均值,比如10次10??折交叉验证,然后求其均值,作为对算法准确率的估计。04、随着AI人脸识别技术的进步,正确佩戴口罩是出门必备的防护措施。但由于口罩的不透明性,摄像头拍摄的图像无法捕捉到嘴巴、鼻子等面部特征。人脸识别模型必须使用完整的面部特征,所以戴口罩会导致AI人脸识别失败,人工检测效率太低。庆幸的是,各大科技巨头纷纷潜心研究如何让AI人脸识别比以往更智能。口罩识别模型是百度工程师研发的AI口罩检测仪。可用于公共场所,在非接触的情况下,在实时图像中快速准确识别未戴口罩或佩戴不正确的人员。戴口罩人脸识别模特商汤科技推出AI智慧防疫解决方案。它声称其区域交通模块可以识别戴口罩的人的身份。人戴口罩时,只要露出50%的鼻梁,通过率可达85%。动态人脸识别汉王科技近期推出了一款亮银钻动态人脸识别一体机。其对戴口罩人员的识别率也达到了85%。目前,该系统在北京地区拥有20多家用户,近200套应用设备。阿里,还有华为,识别率更高的机型也在开发中……以前,我们只是靠全脸信息特征来识别身份。未来我们可以做到半脸甚至是眼睛,让AI的人脸识别系统可以准确识别我们每个人,随着我们科技的蓬勃发展,可以帮助我们对抗生活中的各种问题。想了解更多AI人脸识别技术?这本书《TensorFlow技术解析与实战》推荐给大家。TensorFlow是谷歌开发的深度学习框架,也是深度学习的主流框架之一。本书从深度学习的基础出发,深入到TensorFlow框架原理、安装、模型、源码、统计分析等各个方面。全书分为基础、实战和提高三个部分。最后的附录列出了一些公共数据集以供参考,并根据作者的项目经验介绍了一些项目管理的建议。
