软件开发架构师

朋友圈爆款背后的计算机视觉技术与应用

人工智能 23 2019-03-11 11:06

本次分享系统介绍计算机视觉的基础知识,如何利用这些识别算法实现一个应用,同时进行部署、推广这一整套流程。主要包括以下六个部分:

1、朋友圈爆款活动背后的秘密;

2、计算机视觉基础;

3、曾经的图像处理方法 - 传统学习方法;

4、图像处理的爆发 - 深度学习方法;

5、解析云端 AI 能力支撑;

6、技能进阶。

一、朋友圈爆款活动背后的秘密

下图是五四青年节的活动,一个人脸匹配的游戏,其中使用的就是人脸识别的算法。大家上传自己的照片,就能匹配到民国时期的一些人物,然后以一种有趣的方式分享出来。为了实现这个服务,采用了一套非常有延展性的云架构。

image

那如果想要做一个像刚才那样的艺术活动,需要哪些基础知识?下面我们进行详细介绍。

二、计算机视觉基础

2.1 计算机视觉定义

计算机视觉是研究如何从图像视频中获取高级、抽象的信息。从工程角度来讲,计算机视觉可以使模仿视觉任务自动化。计算机视觉包含以下一些分支:物体识别(Instance Recognition)、对象检测(Object Detection),语义分割(Sementic Segmentation),运动和跟踪(Motion & Tracking),三维重建(3D Reconstruction),视觉问答(Visual Question & Answering),动作识别(Action Recognition)等。

image

由于计算机视觉已经慢慢的趋于成熟,所以它能够颠覆的领域越来越多。基本上我们用人眼和传统的方法能够去识别的东西,计算机视觉都会逐步的改变。左图是比较常见的人脸识别,比如我们现在各种刷脸购物、刷脸进园区,这个刷脸其实就是识别(recognition),根据我们人脸的一些特征点,进行人脸匹配,就能知道是谁。

第二个是现在非常热门的无人驾驶,这个是一个比较复杂的、真实的任务,它可以通过不同的方式去解决,后面会详细介绍。

第三个是语义分割。我们人类看大自然的时候,从视网膜成像以后,知道有不同的颜色。机器是通过 RGB-alpha 去理解这个世界上颜色的。这里 RGB 就是红绿蓝三原色。一般说的真彩色叫 32 位彩色,rgb 占 24 位,剩下的 8 位是 alpha chanel,代表一个像素是不是透明的。

image

右边的三张图,最上面是灰度图,本身没有色彩。第二个是全彩图,只有 RBG 没有 alpha 透明通道。最后一张是真彩图,它有 alpha 通道,一共有 32 位。

2.2 计算机视觉成像

我们经常要处理的是一些更加复杂的图片,比如像航拍图,热成像图,还有 X 光图、ct 图、分子细胞图,为了能够处理它们采用了各种 filter。

image

2.3 计算机视觉处理分级

为了更好的理解计算机视觉处理,进行了一个划分:low level, mid level, high level。low level 的东西一般比较细节,比如降噪,优化、压缩、边缘检测。mid level 包括分类、分割、对象检测,验证,语义分割等。High level 更高纬、更加宏观一些,包括情景理解、人脸识别、无人驾驶、多模态问题等。

2.3.1 low level processing

下图左边是胸部的 X 光图。左上原图中很难看清楚骨骼血管;左下是经过强化的,图中的骨骼、神经脉络和血管都看得很清楚。

中上是 pcb 的电路板图。原图上面有很多的噪点,经过降噪(denoise),图像变得非常平滑,就可以进行下一步的处理。

中下是航拍图。由于雾霾或者雾气的原因整张图泛白。如果直接去做一些处理,比如地图上的一些目标识别,效果会非常差。所以先做强化(enhancement),提高对比度,图像变清晰之后再做进一步处理。

右图是 registration,就是把不同角度的图片进行匹配。

image

2.3.2 mid level processing

下图是从斯坦福大学李飞飞教授的一门课借鉴过来的。以小猫、小狗分类为例。它对图像到底属于哪个类别作一个区分。知道了对象的分类,进一步定位图像中对象的位置,这就是单目标识别(single object detection)。如果图片中有很多不同的对象,比如说小猫、小狗、小鸭子,称为目标识别(object detection)。目标识别就是把这个图片上所有的对象都识别出来。这个图片上面用不同的框子能区分出不同的对象,这样只知道对象大概在什么位置,若要精确到像素,就要作对象划分(instance segmentation)。

右图是更高级别的处理,语义分割或者叫情景分割。在很多领域都有语义分割这个概念,比如在 NLP 中,一般指的是一句话中不同的语素成份,从文字的角度进行的一个切分。而在图像领域是对图片里面不同的要素进行切分,比如下图右里的道路是灰色,行人是红色,植物是绿色,车是蓝色,这就从颜色对图片汇总所有同类的对象进行很精确地划分。

image

2.3.3 High Level Processing

目前公司在全力研究的方向基本上都是 High Level 领域。因为 high level 有一些宏观特性,它解决的问题都是跟大家直接相关的。下图左上是人脸识别,我们用算法抓取人脸上的特征点(feature points),然后跟数据库里已经处理好的特征去匹配,从而识别谁是谁。因为保存在库里的图片和要识别的图片不一定是同一角度,光线也可能会有区别,所以这是个模糊匹配的过程。

左下是无人驾驶。业内现在有两种方式解决无人驾驶问题:一种是采用激光雷达(lidar);还有一种是采集视频,辅一些传感器,比如声呐传感器、红外传感器。并没有说一个方式一定优于另外一种。因为雷达的成本非常高,导致整车价格很高,整车价格高代表着销量会低,那收集到的数据就少。而机器学习是非常依赖于收集到的高质量的标注数据,这就成了悖论。因此有的只采用图像识别的方式去接近雷达的效能,这样就能节省成本、进而收集到比较多的数据。

中间是一个情景识别(scene understanding)。图上有两个小孩在打球,他们方向不同,穿着不一样,有些微动作也不一样。通过情景识别,我们要求是可以从图片中识别一个对象,包括他的穿着和所持的物品。然后我们还要推测它的意图什么,比如说 play ball、walk。右边是我们识别得到的一个带颜色的树。不同的颜色代表不同的主谓宾,还有定状语。通过这种方式,我们提取到图片里面所有的信息,不仅仅知道有谁,而且他在做什么,也可以进行预测。

然后右图是一个 3D 血管图。医生做心血管手术之前,通过扫描得到的数据对血管进行 3D 重建。在做手术之前医生通过看 3D 模型就能够知道每个血管的厚度是多少,在哪里可能有风险。用这种方式大大降低了手术的风险。这都是已经落地的项目。

image

还有一些其他比较常见的例子,包括多人脸识别。就我们拍照的时候会对人脸方向进行重重聚焦。中间的图是文本识别(OCR),图上是用激光笔进行扫描,扫描完了以后再去识别,是很老的一种文本识别方式。现在由于整个 OCR 的技术相当成熟,基本上是大家提供一个比较清晰的照片,然后全部识别出来。右边是车牌识别,这在国内是非常常用的技术。

image

2.4 目标跟踪

目标跟踪是非常有潜力,非常有挑战、有前景的一个话题。以下图 NBA 视频为例,追踪球员在场地上的位置。中间是球员动作有形变;右边是由于高光打在球员身上,整个人的样子都发生了变化。下图中存在的问题是:目标快速移动时抓拍速度不够快的话,目标就会模糊;如果背景色跟前景色非常接近时,会出现干扰。以上这些问题可能会在目标跟踪过程中同时出现,目前也没有哪种方法可以很完美的解决,仍不断有新的方法出现。

image

在追踪不会动的人脸时,也会出现各种问题,如人脸会垂直旋转;也会部分在画面、部分不在画面;也可能发生遮挡。目前做目标跟踪比较好的方式就是在不同的情景下使用不同的算法。

image

2.5 多模态问题

多模态问题就是将计算机视觉、NLP、语音识别整合起来才能解决的问题。比如可视化问答。以下图宝宝为例,问题是宝宝坐在哪,就是宝宝在图像中的位置。首先要做图片的情景识别,理解图片上面有什么东西,比如宝宝坐在哪里;另外还要有 nlp 的引擎去理解这个的问题,它问的是孩子坐在哪儿,不是问他干什么;最后通过理解用户的问题和图像里面的因素,进一步的匹配。所以这个例子中包含三个模态,这就是一个典型的多模态问题。

image

还有一个多模态问题的例子,就是根据一幅图片去理解图片情景进而生成一段文字描述。这里第一要理解图片里面有什么;第二,要能根据图片里面提取出来因素去生成一个描述的语句、故事。这里面至少有两个模型。同时,为了训练生成的内容描述,要输入不同的训练集,这样就会变得更加的复杂。

image

三、曾经的图像处理方法 - 传统方法

传统的图像处理方法,包括滤波、分类、分割和目标检测。常用的滤波方法包括空间滤波器、傅里叶、小波滤波器等;特征设计方法包括 SIFT、HOG 等;分类方法包括 SVM、AdaBoost、Bayesian 等;分割和目标检测方法包括分水岭、水平集、主观模型等。

3.1 特征设计 - 边缘检测

识别图像,首先要让机器能够读到它的一些特征。从这个角度讲,需要进行图像特征设计。比较容易想到的特征提取方法就是边缘特征。以下图为例,要识别图中所有的硬币,可以把硬币的边缘和花纹的边缘提取出来,作为一个图像特征。

image

3.1.1 特征设计 -Harr 特征

当对象边缘不清晰时,比较经典的方法是 Harr 特征。它是把图像上不同位置的灰度变化用黑白方框表示出来。上面两行代表垂直和水平的灰度变化,它只有上下左右四个方向。右下角对角线的方式是进一步优化的 harr 方法,可以表示 45 度方向的灰度变化。

image

3.1.2 特征设计 - 对称

很多识别对象有一定的局部对称性,比如人、房屋,因此可以利用对称的特点解决问题。它是根据越靠近对象的重心点的位置越亮,越靠近边缘的话越暗,用重心这个特征去代表这个对象。

image

3.1.3 特征设计 - 尺度不变特征

除了 harr 特征、对称性两种特征,目标检测中常用的还有尺度不变特征(sift)。尺度空间其实是描述我们从远到近去看一个东西从模糊慢慢变清晰的一个过程。尺度不变特征就是在图片上提取一些关键的尺度点,在每个方向上去获得一些向量参数。然后利用这些方向向量去匹配一些角度或是旋转之后都不太一样的照片。即使这个图片可能会有一些遮挡,只要它的尺度点没有被遮蔽,一样进行匹配。

image

3.1.4 特征设计 - 方向梯度直方图(HOG)

另外一种跟灰度有关的特征方法叫做方向梯度直方图(HOG)。下图中人和的背景正好有一些灰度上的区分,就可以用方法识别。图中的绿色线条代表着图片上灰度变化最小的方向。这个图上人穿的是黑色的衣服,几乎没有灰度变化,所以整个线条以垂直的方式不断延伸。而背景由于它的光线从各个方向都有,所以它的方向梯度直方图比较比较杂乱的。因此通过方向梯度直方图我们就可以把人识别出来。

image

3.2 分割和目标检测

3.2.1 分水岭算法

首先对整个图片进行扫描,得到灰度的曲线图。然后往灰度曲线图去灌水,自然会有两个相邻的谷底要联通,这时建个水坝,不让它们联通。然后继续贯水,直到又有两个相邻的灰度区域要连通,继续建坝。重复这个过程,最终整个曲线图上有多个水坝,每个水坝的位置其实就是边缘的划分。

image

3.2.2 主观形状模型

另外一个传统的对象检测方法叫做主观形状模型。我们把对象的边缘全部提取出来,进行各种形变,然后和要识别的目标进行匹配。一旦匹配上了,我们就实现目的。这种方法局限性就是输入的图片角度的变化,或者说我们今天穿着打扮不一样,不一定完全匹配上。

image

四、图像处理的爆发 - 深度学习方法

4.1 深度学习之神经网络

深度学习指的就是深度神经网络。左边是一个简单的两层神经网络,看起来是三层,但一般不算输入层。神经网络分三种不同的层:input layer,hidden layer,output layer。input layer 一般是获取用户各种输入;hidden layer 做各种不同的运算;output layer 产生结果。那神经网络和 SVM、逻辑回归有什么关系?其实逻辑回归和 SVM 是一种特殊的单层神经网络。

image

上图是简单的神经网络架构,实际上真实的神经网络会远比上面复杂。下图是人脸检测的一个神经网络。hidden layer 在进行处理时要区分不同的变量,不同变量针对不同方面的问题。最后通过 output layer 汇总。

image

神经网络除了金字塔形,还有下图中的其他形式。这些都是根据不同的问题提出的不同的网络结构。在传统机器学习中,我们是在想用哪种算法,如何调参能够把模型适用这个产品。到了深度学习的时候,算法科学家的大部分研究是在产品上使用什么样的神经网络,哪种类型神经网络,怎么设计它每一层的作用,怎么设计它的激活因子,怎么去设计 output layer,怎么去做聚合,思维的方式发生了很大的变化。

image

· 卷积神经网络

在 CV 领域,比较常见的深度神经网络叫卷积神经网络。首先介绍卷积层(convolutional layer)。在传统机器学习,我们要做特征提取(feature design),这 cnn 中就是通过卷积层来实现。卷积层之后是池化层。池化层的作用就是找出重要的特征,或者把几个不的重要特征合并再传递下去,这样可以减少数据的运算量。最后一层叫做全连接层(full connection layer),它的作用就是把之前所有数据的进行聚合,产生结果。

image

实际使用中会不断进化出新的架构,比如下图的 faster r-cnn,做了很多的优化,其中最重要的优化是 RPN(region proposal network)的加入。由于原始 cnn 是在图像上做全量搜索,这在图像非常大情况下运算量会很大,速度就会很慢。为了增快速度,首先把图片上没有目标的区域排除掉,然后在剩下的区域内跑真正的 r-cnn,这样整体速度就提高了很多。

image

从 CNN 到 Faster-RCNN 都是同样一种解决问题的思维方式,叫对象识别的方式。那回归到分类的方式解决问题,就提出了一种新的网络 -yolo。

image

4.2 图像 AI 应用案例分析

  • 案例一

刚开始展示的五四青年节活动是这样做的。首先有几百张民国时期有志青年的照片,提取其中的一些特征,把这些特征数据向量化。每个人标注好标签。训练后就可以生成一个模型。在实际使用时,后台会提取上传照片的特征值,和模型里面已有的进行匹配,然后返回值是一个分类加上一个置信度(score)。最后再合成一个页面,供大家在朋友圈转发。

image

  • 案例二

第二个是另外一个特别热门例子,人脸融合。大家经常看军装照、古代照,都是人脸融合算法的结果。它原理是这样的:首先用户上传照片,但上传的照片往往不是百分之百正位的,可能会有角度,幅度,为了让融合结果更加的平滑,会进行关键点定位,对人脸进行一些对齐矫正。然后利用算法把人脸抠出来,和模板图进行融合。融合图其实并不是那么自然,所以更多的工作是图片校正,比如曲线调优,边缘融合,色彩调节。这样大家能看到自己回到民国、或者清朝时候的一个照片。

image

  • 案例三

第三个例子是根据图片讲故事。这个引擎的用到了不同的算法。整个训练过程基本上是无监督学习,除了训练讲故事的文本库。它适用场景非常广泛。通过改变不同的文本库,比如从浪漫小说改为科幻小说,那生成的文本就会从浪漫范变成科幻范,灵活性非常强。

image

4.3 计算机视觉算法前沿分析

这里推荐一个你不想错过的论文库:www.arxiv.org

前面提到了有两种不同的方式实现无人驾驶,一种是用激光雷达,还有一种是用单目照片,或者双目照片。百度、谷歌主要使用激光雷达。而特斯拉使用照片,它主要是从成本来考虑,所以它搜集到非常多的数据。

image

目前这两种方法都在进行中,特斯拉现在通过不断的优化,目前驾驶能力已经达到 L3,慢慢接近有雷达的车的效果。而且随着数据量越来越大,有可能它的效果会无限接近于雷达的效果。雷达的意义在于什么?因为雷达都是在车顶,它在扫描的时候,拿到的是鸟瞰图,是一个 3d 图。它拿到周围所有物体相对车的位置,还有它的外形,甚至可以 3D 建模出来。

image

而普通的单目照片只是一个平面图,没有距离信息。最近有个算法叫正交特征变换(OFT),它对静态图片上不同的对象,先进行正交化的特征提取,然后利用这种方式去识别不同对象之间的相对位置。通过一系列的计算,就把单目图变成一个 3D 图。基本上实现了激光雷达的效果。OFT 在目前所有提出来的单目转成 3D 图方法中效果最好。

image

五、解析云端 AI 能力支撑

我们做一个产品,首先不仅要有算法模型,还有一个非常健壮的架构去支撑这算法模型,让千万级或者上亿级的用户可以稳定的使用这个模型算法。这个情况下我们需要用到云架构,下图是我们的云服务架构。

image

下图是腾讯云的方案矩阵。大概分几个不同的领域:人脸(计算机视觉)。这个里面包括人脸和声,身份证识别,还有各种基于场景的,比如智能门禁物;语音领域,我们也有 ASR(语音 - 文字)和 TTS(文字 - 语音)的能力。底层有机器学习的平台和大数据的平台去支撑。基础建设就包括我们刚才提到的 CPU、GPU,还有 FPGA 的各种服务器。

image

我们目前计算机视觉的产品大概分四类,其中包括云智的慧眼,它是实名认证的身份核验的产品。神荼是关于多场景的人脸的识别,比如考勤签到,还有我们支付用的人脸识别。明视是图像结构化分析,它包括我们的身份证识别,银行卡识别名片识别这些。魔镜主要是内容审核,比如识别各种视频图片的鉴黄鉴恐鉴暴等敏感信息。

image

下面是我们一个私有化的视频管理平台,叫云智平台(TIMatrix)。它是针对各种智能楼宇园区的一个产品。它可以帮助一个主题公园,一个厂区或者一个公司快速地搭建起一整套的视频监控体系。我们背后也有各种的 A.I. 引擎去做大数据的分析,客户画像热力图等,非常适合 to B 的一些场景。

image

六、技能进阶

image

image

作者介绍:

叶聪,腾讯技术专家。前美国亚马逊 AWS 人工智能技术经理。在多年的云计算系统研发经历中,负责了领导了多个百万用户级产品的架构设计和开发,并且具有丰富的跨国团队和项目管理经验。 硕士毕业于美国明尼苏达大学电子工程及计算机系,后在斯坦福大学攻读 AI 研究生证书。

文章评论