当前位置: 首页 > 科技观察

图像技术在直播中的应用(下)——图像识别

时间:2023-03-15 20:47:07 科技观察

在《图像技术在直播中的应用(上)》中,我们简单描述了美颜技术1.0的原理和实际问题。在文章的开头,我们提到了美颜2.0最关键的技术——人脸识别。这是一项复杂但非常流行的技术。在本文中,我们将讨论图像识别、其原理和一些实际问题。本次分享系列整理自画CTO在架构师沙龙的演讲内容。一、机器学习与深度学习解析——如何让机器理解世界?最近机器学习和深度学习的概念很火,尤其是今年AlphaGo打败韩国棋手更是轰动了世界。机器学习和深度学习这两个概念比较容易混淆,以至于很多媒体在写报道的时候经常把这两个词连在一起使用。由于这两个概念目前主要应用于图像领域,所以我们只在图像识别,尤其是人脸识别方面对这两个概念进行区分。机器学习的概念提出的比较早。在20世纪90年代初期,人们开始意识到一种更有效地构建模式识别算法的方法,即使用数据(可以通过廉价劳动力获得)代替专家(拥有许多图像知识)。深度学习可以看作是机器学习的一个分支,也是近十年才得到广泛关注和发展的。下面说说具体的区别。首先,机器学习根据像素特征识别物体。我们会收集大量的图像素材,然后选择一个算法,用这个算法解析数据,从中学习,然后对现实世界的事件做出决策和预测。深度学习可以看作是机器学习的一个分支,也是近十年才得到广泛关注和发展的。它不同于机器学习,它模拟我们自己的思维方式来识别人脸。例如,神经科学家发现,当我们人类识别和观察一个事物时,边缘检测类的神经元首先做出反应,这意味着当我们看一个物体时,我们总是先观察到边缘。就这样,经过科学家们的大量观察和实验,得出结论:人眼识别的核心模式是基于对一个特殊层次的把握。从简单层次到复杂层次,这个层次的转换是一个抽象的、迭代的过程。.深度学习模拟了我们人类观察物体的方式。首先,我们从网上得到了很多数据,然后我们得到了很多样本??。我们抓取海量样本进行训练,抓取核心特征,建立一个Network,因为深度学习是要建立多层神经网络,肯定有很多层。一些简单的算法可能只有四五层,但有些复杂的算法,像刚才提到的谷歌,有一百多层。当然,有些层会做一些数学计算,有些层会做图像预算。一般来说,随着层次的往下,特征会变得越来越抽象。例如,识别人脸。如果是特定环境下的人脸,如果遇到云雾,或者部分被树木遮挡,人脸就会变得模糊,基于像素特征的机器学习将无法识别.它太僵硬,太容易受到环境条件的干扰。另一方面,深度学习分解所有元素并用神经元“检查”它们:面部特征、面部的典型尺寸等等。最后,神经网络会根据各种因素和各种元素的权重给出一个深思熟虑的猜测,即图像是人脸的可能性有多大。因此,深度学习在人脸识别或各种识别性能上都优于机器学习,甚至超越了人类的识别能力。例如,2015年,谷歌发布了用于人脸检测的facenet网络。它声称使用这个网络可以达到98%以上的识别率。而人类自己看样本所达到的准确率也并不完美,甚至还不如一些使用深度学习算法的最先进技术。在机器学习方面,目前国际上最主流的基于人脸检测的计算是HOG算法和LBF等其他特征算法。LBF来自OpenCV。OpenCV是一个非常有名的开源库,里面有各种图像处理相关的功能,而且是开源的,但是在移动平台上效果很差,没办法达到我们想要的效果。这里提到它是因为它非常有名,里面包含了图像处理相关的各种功能,比如特殊处理,人脸识别,物体识别等等。OpenCV包含LBF算法的实现。深度学习的开源框架有很多,比如Caffe和TensorFlow。这些框架只是提供构建深度学习网络的工具,但深度神经网络才是最关键的。如何建立网络?建立网络的方法有很多种。例如,如果你关注这方面,你会经常看到一些名词。CNN、RNN、CNN可能比较流行。它是一个在人脸识别方面表现非常出色的网络。现在也是比较主流的网络。当然也有很多网络,比如RNN或者更快的CNN网络等,在解决某些具体问题的时候有更好的表现。2、图像识别的一些具体实现——以智能色情为例。当我们有了相关的深度学习技术,我们就可以在服务器上构建应用。比如做智能色情,输入一个视频流,解码后得到每一帧,识别出有问题的部分,进行处理;比如马赛克,或者保存内容,然后给后台发一个通知,告诉后台这里有疑似不可描述的东西出现了等等,然后编码输出到其他地方,比如分发到CDN等。这些流程如果人工识别,成本非常高,开发必须通过技术手段解决。***先说说手机端的体验:兔兔产品在人脸检测性能方面的测试指标。比如我们在iOS和Android平台做的测试,在iPhone6上,捕捉40个特征点需要40毫秒,相当于一秒处理25帧。当然,实际上并不需要那么多次。人眼观察事物,是因为视觉的暂留。一般来说,12帧是一个分界线。如果小于12帧,你会感觉到画面卡顿,但只要大于12帧,你就会看到它看起来是连续的。所以我们一般限制在十七八次检测,在iOS上已经足够了。Android方面,其性能确实比iOS平台差。无论是API的封装,还是整个硬件的搭配,同样型号的GPU在安卓设备上使用,未必能达到与iOS相同的性能。iOS平台确实各方面都优于安卓。小米5是一款比较新的设备,采集40个特征点大约需要60毫秒。3、技术发展的瓶颈——最好的就是拼硬件。虽然在手机端,比如iOS9,已经推出了深度学习API,iOS10也对其进行了升级,提供了更多的功能;据说我们在PC上开发和训练,直到代码完成,然后在移动设备上运行。因为刚才说了,机器学习和深度学习发展的关键环节就是训练。培训是什么意思?比如我拍了10000张图片来识别人脸,处理完这10000张样本,我就有了经验。面相有什么特点?比如涉及150个参数,得到一个函数。一个函数模型,对这样的模型进行训练和测试,最终得到一个更好的模型。接下来找大量的测试数据,比如10000条测试数据,来测试这个模型。如果性能非常好,那么这个数据模型网络是可靠的,最好在实践中使用。但是这个训练过程非常耗时。我们跑一个训练,CPU可能要二十、三十个小时。这仍然是一个简单的模型。对于一些复杂的模型,比如谷歌开放的125层神经网络,用一个CPU跑起来可能要三四天,相当于要花这么长时间才能得到一个模型,你就知道这个模型好不好坏的。.如果发现不行,改个小参数,结果会持续三四天。所以解决办法只有一个,就是升级硬件。比如GPU代替CPU完成计算。这里列出了一个详细的指标,比如一些算法需要在RGB空间进行检测,里面有没有不可描述的内容。如果我们用GTX980Ti跑,不到20毫秒就可以跑完,而用i7CPU跑,检测到800秒,这跟GPU完全没法比。但问题是专门用于训练的GPU设备非常昂贵,七八千元的GPU在机器训练上并不好,为了不浪费时间在复杂的场景,比如像AlphaGo这样的训练,只能可以想象用大量的设备来弥补这个成本。所以才会说有一定实力的公司才有能力做深度学习。目前全球一些主流大公司,如微软,很多服务都采用FPGA方案,包括云服务等,百度也在做基于计算单元的芯片,中科院也在做相关研究.所以,深度学习一路发展,其实一直停留在计算上。计算能力远远跟不上我们软件的要求。最后,变成了硬件竞争的时代。但事实上,这个问题并不是最近才出现的;早在人工智能早期,神经网络的概念就已经存在,但神经网络对“智能”的贡献很小,主要问题在于计算能力不足。所以现在大家可以预见,一旦量子计算成为可能,人工智能时代就会真正到来。