叶聪:朋友圈背后的计算机视觉技术与应用
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
本文由云加社区技术沙龙 发表于云+社区专栏演讲嘉宾:叶聪,腾讯云AI和大数据中心高级研发工程师。在多年的云计算系统研发经历中,负责领导了多个百万级用户及产品的架构设计和开发。
AI要走进千家万户,融入整个社会,而不仅仅是曲高和寡的模型。所以现在非常讲究AI场景化,使它成为与产业相关的部分。
一、朋友圈爆款活动背后的技术
今天我会从朋友圈的一些爆款的互动活动作为切入点,带大家过一遍一些计算及视觉技术与应用,或者把AI技术产业化。我们经常在朋友圈会看到一些比较有趣的互动的活动,比如像军装照、武士青年这类活动视觉比较流行的应用,也是目前探索出来的计算机视觉能够最快来到大家身边的方式。以过去的五四青年节的活动为例,这个有趣的活动就应用了人脸检测与人脸检索的技术相结合。
上传一张照片最匹配民国时候有为青年的照片,做成这种页面供大家分享。这种模式最开始就是由腾讯开启,现已成为了整个行业应用的参考。除了这个活动,H5这类应用往往会出现用户访问爆发性的增长,为了应对这种突如其来的流量暴增,使用一整套云架构部署,而不是传统机房里面用几台服务器处理。比如像五四青年的活动,5万KPS的架构就有这样的承载能力。从个人角度想要做这样的应用,需要了解以下的基础知识。
二、计算机视觉定义
首先从计算机视觉的基本定义开始,学术角度来讲是研究如何让计算机从图像和视频中获取高级抽象的信息的一种方法。但我比较喜欢后面这种工程角度的解释,计算机视觉是可以使机器来模仿人类自动化。现在我们利用计算机视觉让整个流程更自动化,机器可以部分的代替人力去理解图片中的一些信息。计算机视觉还包含一些子分支,现在这个分支还会慢慢扩张,这个分类也在慢慢的扩大。主要包括物体识别、对象检测、语义分割、3D的重建,动作识别等等。
底下有几个比较常见的视觉应用,第一个是人脸识别;第二个是无人驾驶;第三个是语义分割。语义分割在人工智能这个领域还是比较常见的。一般指词性的分割,或者词的分割。图像分割里面的语义分割一般指的是把图像里面的不同类型的对象进行标注和区分。右边这张图就是个例子。这张图上基本上把人、路、车都用了不同的颜色标注。
提到机器视觉,首先就要知道机器是怎么去理解图片的?这里就要带入RGB-alpha 的一个算法。
顾名思义,就是红绿蓝三色,然后,alpha 是什么?如果大家在早期的时候玩过一些电脑硬件,你可能会发现,最早期的显卡是 24 位彩色,后来出现一个叫 32 位真彩色,都是彩色的,有什么不同吗?因为在计算机领域,我们用 8 位的二进制去表示一种颜色,红绿蓝加在一起就是 24 位,基本上我们把所有颜色都表示出来了。
三、曾经的图像处理——传统方法
首先聊一下一些传统的图像处理的方法。上面这几个滤波器如果有学图像相关的同学都会经常用到,包括空间滤波器、小波滤波器。如果对图像进行分类,我们肯定要提取图像中的一些特征,然后根据这些图像提取出的特征用算法进行一些分类,所以是两步走。
关于如何提取图像的特征,现在已经有很多比较成熟的方法。最容易想到的就是图像里面对象会有边缘。边缘就代表了图像的特点。除了边缘检测的方法还会有其他的特征,比如Haar特征。对象具有边缘、对角线、中心都可以利用这种黑白的对比图,标注出它灰度的变化,把刚才说的三种维度的信息组成一个集合,这样就可以提取图片的特征。
还有一个比较新的特征提取方法,就是2012年的时候康奈尔提出来的,利用一个图片里面对象的局部对称性来提取特征。左边这个图有不同形状的对象,右边这个图就把它的对称性理解为重心提取出来,图上越白色的地方代表对称性越强。这种算法优点是整个图形提取出的特征是比较有对称性。这样就容易把这个东西从背景里面提出来。
另外还有一些特征提法,比如SIFT,尺度不变特征。我先解释一下什么是尺度,我们看待一个东西,从远到近,越远它尺度越大,就说明这个东西相对我们越模糊,能观测到的特征点就少。随着靠近,看到的越多就能越发现一些特点。有些特点是不管远近都能辨识出来的,就认为是尺度不变的特征。
还有一种跟灰度有关的方法叫HOG方向梯度直方图,它也是利用灰度的原理,把整个图形分成很多块,描述里面灰度变化最小的或者最大的。一般选用最小的方向。好处是它计算起来的成本比较靠谱的,比如这张图上,人穿黑色的衣服,所以在黑色衣服上它的灰度变化最小一定是垂直的。到了旁边白色背景可能就是水平的。利用它这个HOG的梯度图的方向,很容易把这个人从背景中间区分出来。
聊了很多的Feature Design的方法,并不存在最优的。在图像分割和对象检测这个领域也有一些其他算法,例如非常有意思的分水岭算法,顾名思义是利用图像的灰度特性把图像整个灰度的曲线显示出来。假设往里面灌水,随着水越来越多,肯定会有两个相邻的山谷联通,在那里建一道坝,这些坝在图上来看就是紫色的曲线,这样就可以把对象里灰度不同的部分给分割出来。
ASM,中文名叫可变模板匹配,或者叫主观形状模型。对象检测的常用算法主观形状模型以人脸为标准,提取人脸上68个点,对这些点进行变换,然后去匹配目标。刚才聊了一些传统方法,随着近几年硬件性能的提升以及大数据的广泛的应用,让本来已经沉寂许久的深度学习算法变成了可行。深度学习这个名字是比较抽象,其实可以理解为深度比较高的神经网络,多重神经网络。这样会比较贴切。简单介绍一下神经网络,左边和右边两张图就是神经网络。一般谈及神经网络的,是不说输入层的,所以左边是两层神经网络,右边是三层。
四、图像处理的爆发——深度学习方法
下面有两个深度学习的网络,所谓的深度学习实际就是深度神经网络,叫深度神经网络大家更容易理解。左边那个是一个两层的神经网络,这里要解释一下,我们一般说神经网络的层数是不算输入层的。
输入层就是你输入信号的地方,将中间过程的结果进行汇总,若做分类它会把它进行归类的一层。这其中学过统计或者相关的同学都会用的逻辑回归很有意思传统的机器学习算法和深度学习算法很有关系。底下写了一行字(英文),这两者其实都是很特殊的单层神经网络,所以深度学习并不是遥不可及的,它的由来是很有逻辑性的,是从深度算法中间慢慢剥离出来的。说完简单的神经网络再来谈谈复杂的。在实际使用的时候,不一定是简单的一两层,很有可能是多层的。比如这个图上面至少有三层,实际上我们使用的神经网络是很复杂的。不是像上面这张图那么简单。除了刚才看到的哪些三角形或者金字塔形的神经网络,神经网络是有非常多种的,比如感知器,FF,RBF,使用的场景都不太一样。所以神经网络研究者往往会根据场景选不同的网络,对网络进行一些比较,有的时候也可以解决相似的问题。深度学习研究的方向跟传统学习的区别,可能在网络上会更加的铸磨,包括怎么调整中间多加一层,少加一层,在这个方向做一些测试。
在图像识别领域应用比较广的神经网络是CNN,即卷积神经网络。这个图上是一个非常标准的,或者说非常初级的CNN的网络,包括比如像卷积层,卷积层一般是用来做图像的特征学习的。最后会有一个全链接层,把所有前一层的数据进行全链接。自动做分类。这个想法其实来源于传统的机器学习,最后会有一个层去做分类。
在CNN之后非常聪明的科学家们就发现了很多可以更加优化的点,所以已经很少有人单纯用这个CNN做训练了。目前比较流行的做图像分割的还有很多基于 CNN 的新网络。比如在 CNN 基础上大家又加入了一个叫 Region Proposal Network 的东西,利用它们可以去优化传统 CNN 中间的一些数据的走向。Faster-RCNN 不是一蹴而就的,它是从RCNN中借鉴了 SPPNET 的一些特性,然后发明了 Fast-RCNN,又在 Fast-RCNN 的基础上进一步的优化变成了 Faster-RCNN。
即便到了Faster R-CNN这个领域也远远没有走到尽头。我们一直做对象检测的时候都是采用,要尽量的缩小范围的思路。每一个上面提到的算法都能找到一两篇非常好的论文,大家可以了解一下这个算法是怎么演变过来的。我们的目的是用分类的方法一次性把一个图片里面的信息全部理解,就出现了右边的算法。
接下来谈一下在有了一个模型算法以后,应如何做一些应用。讲几个腾讯云这边支持过的AI应用的例子。首先是五四青年的活动,它是解决图像匹配的一个活动。首先我们将民国时候的老照片作为训练数据,对它进行提取,和标注数据,对每个照片都进行标注,生成一个模型。大家在玩这个游戏的时候会传一张照片测试数据,等特征提取完,模型会返回一个它的分类,这个分数不是执行度,不可以完全参考。而是会选择一个分数最大的值返回到前端,生成一个页面,这就是整个流程。
第二个应用也比较流行:人脸融合的一个应用。类似军装照这类,原理上跟刚才的PPT有点类似,首先会对图像的人脸部分进行关键点的定位,将特征提取出来。因为角度也是会影响很多的匹配效果,所以要对图片进行一定程度的旋转,把它与模版图进行统一化。下一步将上传图片的人脸部分根据特征值抠出来。跟我们的模版图进行融合。由于上传的照片各种光线角度不完全一样,还要对图片进行一些优化,将光影、曲线调得比较平缓,这样就可以呈现一个非常好的效果。
这是我之前在斯坦福的时候做的一个项目,对图片的内容进行描述生成一个故事。我们做了一个模型是可以任意的帮助用户根据图片生成不同类型的故事。比如可以是浪漫小说,可以是科幻小说,不同的训练集可以根据情况调整大家想做一些自己项目的时候也可以像我们一样采用开源数据库。资源很多,不会成为大家研究的瓶颈。
五、解析云端AI能力支撑
聊过刚才的这些部分,背后是什么样的?如果我写了一个模型做了一个有趣的应用,是不是我就可以把它放到网上大家就可以玩了?其实不是这么简单。如果只是简单的让我们把它放到一个网站托管,为了支撑这么庞大的一个系统我们需要做些什么?应该采用云服务,尽量不在我们的物理集上部署。比如采用这个图里面提出的静态应用加速,虚拟机,对象储存,以及GPU云服务器加速我们出结果的速度。
整个系统里面用到了跨地域的负载均衡,弹性降级。上面提到的应用一般都会有短时间达到特别高的访问峰值,持续一段时间会有很快的回落。负载均衡会把一些机器释放掉降低成本。这是一整套的商业化的体系的运作。再介绍一下腾讯云人工智能目前的提供的服务领域,包括各种人脸合成,身份证识别,智能监控,人脸轧机还有智能语音方面上的:关键词搜索,语音合成等等。同时还有一些机器学习的平台可以帮助大家快速的去实现一些模型。同时还有大数据,可以做海量数据的数据挖掘。还有其他一些底层的服务,包括CPU等等。相当于像物理机,但是完全可以交给物理云去托管。
介绍一下人脸识别的例子。人脸识比较常见的几个应用,比如微信,人脸合成只需知道你的身份。可靠性高达99.5%。人脸检测又分静态与活体的检测,静态检测只是比对你的特征与库里面是否一致。但假设有人用一些视频或照片来攻击这个系统,可以采取包括以下几种模式的一整套活体检测的方法:一是让你读一段文字或者做一些动作,或者是屏幕用不同的光线去照射脸部,利用反射光的一些特点来对脸部做区分,3D建模,从而判断是视频还是真人。除此之外还可采用具有3D建模能力的摄像头,打一道光到人脸上,再将反射光收集起来。目前这些技术我们的这些技术都已比较成熟。
刚才讲的是1比1的人脸合成,除此之外还有用于大型场所管理的1:N的。大家如果有机会,如果去深圳可以去腾讯的滨海大厦参观一下,整套系统都是用这个搭建的。另外我们提供针对场景的云智智能视频管理平台。同时提供设备管理以及视频监控、对外接口等一整套服务。
再来说下文字OCR,后面冀博士会详细的介绍这部分。目前我们能使用的领域也非常广泛,包括名片识别,传单识别,快递单识别等等。到了技能进阶这个部分,很多人觉得做AI并不需要做算法,其实不然。首先从有想法到落地分非常多的环节。算法是非常重要的,只是相关性没有那么强。从AI算法的角度来讲,首先要打好数学基础,若想继续发展还需要积累一定的算法知识。同时锻炼自己对最新算法学术成果吸收能力,读论文实现算法,整套技能的提高。
这就要求在对算法一定要有了解的同时,要对算法有比较强的封装能力。有了一个算法怎样去封装,让它根据场景达到最优的效果。除此之外还可以做AI产品开发和应用,但这就要求对目标的AI应用场景比较了解。用户什么样,他们对于AI产品的需求是怎么样的,怎样打磨产品让他们可以简单的使用复杂的这些技术。这一整套其实都需要很多的思考。
六、技能进阶建议
如果我们在 AI 这个方向上想有所进步的话,我们应该怎么做?右边有一个金字塔,并不是说AI算法是它们的最高级。只是想表达如果想要做成这件事,需要的整个团队的大小,首先要有AI算法的专家,同时要有更多工程实践的人,然后还要有更多的产品开发人员把它打磨成产品。这点上来讲像亚马逊的公司做得就非常好,每次都会寻找一个场景然后去营造场景做AI,而不是单纯从技术角度出发。
算法研究方面我们要做什么?首先是要打好比较强的数学基础。因为机器学习中间大量的用到了比大学高等数学更复杂的数学知识,这些知识需要大家早做研究打好基础,这就需要读很多论文。同时还要锻炼自己对新的学术成果的理解和吸收能力,像刚才提到了一个神经网络图像的分类问题,实际上,短短的十年时间实现了那么多不同网络的进化,每一个新的网络提出了,甚至还没有发表,只是在预发表库里面,大家就要很快的去吸收理解它,想把它转化成可以运行的模型,这个是要反复锻炼的。
第二块是工程实现方面,如果想从事这方面首先要加强自己逻辑算法封装的能力,尽量锻炼自己对模型的训练和优化能力,这块会需要大家把一个设计好的算法给落实到代码上,不断的去调整优化实现最好的结果,这个过程也是需要反复磨炼的。
最后一个方向是产品应用,这个首先大家要有一定的开发能力,不管是移动开发还是 Web 开发,同时要提升自己 AI 产品场景的理解和应用。实际上很多AI产品跟传统的产品是有很大的理解上的区别,大家可能要更新自己的这种想法,多去看一些 AI 产品目前是怎么做的,有没有好的点子,多去试用体会。同时如果我们想把一个 AI 的模型变成百万级、千万级用户使用的流行产品,我们还需要有系统构建能力和优化能力。
所以在这三个领域都可以思考。关于怎么去学习计算机视觉的一些知识,这里有一些资料。首先斯坦福大学的一些课程是非常好的,可以利用这个作为切入点,把关键的知识点搞懂。如果不喜欢看电脑的话也可以看其他的几本书。都是我觉得不错的不同的作者写的书。右边是一些比较常见的,每天都会用到。底层还有一些打包好的更高级的书。
Q&A
Q:在视觉这块的话前期讲过焦躁问题。如果是人为的加入噪音的话,处理的话是不是特别麻烦?它的效果和原对比有什么区别?
A:降噪其实是一个很复杂的问题,就像你说的这种情况,如果噪音不是自然噪音,是手动添加噪音,你要找它的模式才能去比较有针对性的调整,我没有对这块有特别深的研究。我的感觉是你可以用一些深度学习比较发达,利用深度学习的模型去做。比如去马赛克这块,打造马赛克的一些照片,利用深度学习算法就能恢复到原照片,或者把一些第一分辨率的照片变成高分辨率的。
Q:我想请问的问题是,PPT中关于多模态识别那一块,现在无论是无人驾驶还是多模态识别都是有(英文)融入到图片当中,我就想问一下这块有那些工作是可以做的?比如说一个图片里面一个男的和女的,男的拿着戒指,这是个求婚的场景。从图片中的内容里面它是体现不了特征信息的,就是关于这块的。
A:由于这个图片它可能主要的内容不是那么明显,其实这难点是在于语义识别这块。你要能提取戒指这个关键词可能跟什么有关。这就变成自然语言识别这块的事了,应该有一个词库,可能去做搜索。所以这块我觉得难点不在于图像而在于后续。
问答
相关阅读
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/dev...
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在云加社区!