本文经过案例引入计算机视觉基本知识,并浅析其基本任务中的图像分类、图像分割进展及应用。
历史文章回顾: HBase Replication详解
先上几个计算机视觉应用的案例:
算法
6月6日至8日,在第23届圣彼得堡国际经济论坛上,新华社、俄罗斯塔斯社和搜狗公司联合推出了全球首个俄语AI合成主播,将来它将被应用于塔斯社的新闻报道中。塔斯社是俄罗斯的国家通信社,做为全球五大通信社之一,对外向115个国家和地区提供新闻信息,在全球范围都具备普遍影响力。网络
MAGIC短视频智能生产平台由新华社和阿里巴巴联合成立的新华智云科技有限公司独立研发。在世界杯期间,经过MAGIC生产的短视频达到了37581 条,平均一条视频耗时50.7秒,全网实现了116604975次播放!而其中制做速度 快的一段视频《俄罗斯2:0领先埃及》,仅耗时6秒!架构
上面的人脸都是AI生成的假脸,这些人都是不存在的,是英伟达的利用GAN模型(生成对抗网络)生成的数据。并发
计算机视觉的研究目标是使计算机程序可以解读和理解图片,不只是理解图片的颜色,并且是更高层地理解图片的语义及特征,通俗的点说就是让计算机睁眼“看”世界。人类大脑皮层的70%活动都在处理视觉信息,因此从感知的角度来说,视觉是重要的信息感知功能。框架
以下几件事推进了视觉的发展:机器学习
一、深度学习领域的突破,深度学习搭建在神经网络之上,而神经网络的概念则脱胎于上世纪50年代科研人员对人类脑神经系统的研究和模拟。神经网络的理论在上世纪50年代就有了,可是一直处于浅层的应用状态,人们没有想到多层会带来什么新的变化。ide
二、英伟达研发了GPU,持续的提升了算力,因为自然的并行计算和矩阵处理能力,大大加速了图像处理的过程和神经网络的计算过程。至今,在2012 年训练AlexNet模型须要使用两块GPU,花费6天时间,到今天作一样的事情只须要一块 新GPU,十几分钟就能搞定。性能
三、斯坦福大学教授李飞飞建立了ImageNet,她把数百万张照片发到了网络上并发动群众作了标注。真正引发你们注意的就是2012年斯坦福的实验,过去实验的图像样本数可能是“万”这个级别,斯坦福用了1000万,用多层神经网络来作,结果发如今人脸、人体、猫脸三个图像类别中,这个模型的识别率大概有7%-10%的提升。这给你们很是大的震动,由于一般识别率要提升1%要作好多努力,如今只是把层数增长了,居然发生两大变化,一个是识别率提升这么多;第二个是能处理这么大数据。这两个变化给你们很是大的鼓舞,况且在2012年以前,人工智能没有解决过实际问题。2015 年12月,微软经过152层的深度网络,将图像识别错误率在ImageNet上降至3.57%,低于人类的误识率5.1%。学习
下图是ImageNet上图片分类的进展状况,柱状图越低表明错误率越低:测试
咱们如今处于人工智能的第三次崛起。前两波发生在1950-1960年代和1980-1990 年代,当时都产生了至关大的影响,却也都慢慢冷却下来。这是由于当时的神经网络既没有实现本该达成的性能提高,也没有帮助咱们理解生物的视觉系统。第三次浪潮21世纪初至今,这次与前两次不一样,深度学习在不少基准测试和现实应用上已经大幅超越了生物的能力。
深度学习通常是指的深度神经网络,也称DNN(Deep Neural Networks),神经网络在20世纪50年代就被提出来了,可是因为他自己固有的梯度消失,大量参数致使过拟合和计算量太大等问题,致使实际应用效果一直很差。所以在此以前机器学习几乎一直是SVM一统天下的局面。
深度学习是在2006年Hinton等人被提出以来的,可是其真正的兴起,或者说重大影响工做的出现,是在2012年以后,好比,Krizhevsky等用深度学习大幅度提升了图片分类的准确率,也就是Alex Net的工做。
深度学习在图像领域应用技术主要是卷积神经网络CNN(Convolutional Neural Network)。之因此CNN在计算机视觉应用的很是成功,传统机器学习方法基本被弃之不用。其中 大的一个缘由就是,图像数据的特征设计,即特征描述,一直是计算机视觉头痛的问题,在深度学习突破以前10多年, 成功的图像特征设计(hand crafted feature)是SIFT,还有著名的BOW(bag ofvisual words),这些都是花了很长时间,须要很是专业的领域知识才设计出来的,这些高成本的模型迭代,使得的过去视觉算法的发展很是缓慢。能够参考以下的流程图,上面是传统的机器学习流程:
关于深度学习的热门的应用领域能够参考下图(2018年根据paperswithcode的统计结果)
如今深度学习应该比较成功的领域是计算机视觉、语音识别和自研语言处理,随着AlphaGo和OpenAI的成功,加强学习也慢慢在兴起。
计算机视觉领域包含不少任务,可是基本的任务是图像分类、图像检测/定位,图像关键点定位,图像分割,这些任务已经发展多年,并且由于其基础的地位,会深入影响其余领域(好比人脸识别、OCR)的发展,下面分别简单的介绍下各个任务的新进展状况。
图像分类是指给定一张输入图像,判断该图像所属类别,通俗点说就是让机器理解这个图像是什么或者说有什么(猫、狗等)。图像分类是计算机视觉中基础的一个任务,也是几乎全部的基准模型进行比较的任务。从 开始比较简单的10分类的灰度图像手写数字识别任务mnist,到后来更大一点的10 分类的cifar10和100分类的cifar100 任务,到后来的imagenet 任务,图像分类模型伴随着数据集的增加,一步一步提高到了今天的水平。如今,在 imagenet 这样的超过1000万图像,超过2万类的数据集中,计算机的图像分类水准已经超过了人类。
根据图片内容的不一样,能够分为物体分类、场景分类和行为事件分类。
根据分类的精细程度,能够分为粗粒度分类和细粒度分类。
根据分类标签的相关性,能够分为单标签分类和多标签分类。
图像分类问题的困难和挑战:刚体&非刚体的变化、多视角、尺度、遮挡、光照条件、类内差别,参考下图:
单标签分类是 简单的分类任务,图片的内容相对简单,只包含一个物体或者场景。ImageNet就属于单标签分类的数据集。下面经过ImageNet比赛的时间脉络,介绍下单标签分类的进展状况。
AlexNet:2012年提出的AlexNet网络结构模型引爆了神经网络的应用热潮,并赢得了2012届图像识别大赛的冠军,使得CNN成为在图像分类上的核心算法模型。
ZFNet:2013年ILSVRC分类任务冠军网络是Clarifai,不过更为咱们熟知的是ZFNet。Hinton的学生Zeiler和Fergus在研究中利用反卷积技术引入了神经网络的可视化,对网络的中间特征层进行了可视化,为研究人员检验不一样特征激活及其与输入空间的关系成为了可能。在这个指导下对AlexNet网络进行了简单改进,包括使用了更小的卷积核和步长,将11x11的卷积核变成7x7的卷积核,将stride从4变成了2,性能超过了原始的AlexNet网络。
VGGNet:2014年的亚军,VGGNet包括16层和19层两个版本,共包含参数约为550M。所有使用3×3的卷积核和2×2的 大池化核,简化了卷积神经网络的结构。VGGNet很好的展现了如何在先前网络架构的基础上经过简单地增长网络层数和深度就能够提升网络的性能。虽然简单,可是却异常的有效,在今天,VGGNet仍然被不少的任务选为基准模型。
GoogLeNet:来自于Google的Christian Szegedy等人提出的22层的网络,其top-5分类错误率只有6.7%。GoogleNet的核心是Inception Module,它采用并行的方式。一个经典的inception结构,包括有四个成分。1×1卷积,3×3卷积,5×5卷积,3×3大池化,后对四个成分运算结果进行通道上组合。这就是Inception Module的核心思想。经过多个卷积核提取图像不一样尺度的信息而后进行融合,能够获得图像更好的表征。自此,深度学习模型的分类准确率已经达到了人类的水平(5%~10%)。
ResNet:2015年得到了分类任务冠军。它以3.57%的错误率表现超过了人类的识别水平,并以152层的网络架构创造了新的模型记录。因为ResNet 采用了跨层链接的方式,它成功的缓解了深层神经网络中的梯度消散问题,为上千层的网络训练提供了可能。
ResNeXt:2016年依旧诞生了许多经典的模型,包括赢得分类比赛第二名的ResNeXt,101层的ResNeXt能够达到ResNet152的精确度,却在复杂度上只有后者的一半,核心思想为分组卷积。即首先将输入通道进行分组,通过若干并行分支的非线性变换,后合并。
DenseNet:在ResNet基础上,密集链接的DenseNet在前馈过程当中将每一层与其余的层都链接起来。对于每一层网络来讲,前面全部网络的特征图都被做为输入,同时其特征图也都被后面的网络层做为输入所利用。DenseNet中的密集链接还能够缓解梯度消失的问题,同时相比ResNet,能够更强化特征传播和特征的复用,并减小了参数的数目。DenseNet相较于ResNet所需的内存和计算资源更少,并达到更好的性能。
SeNet:2017年也是ILSVRC图像分类比赛的 后一年,SeNet得到了冠军。这个结构,仅仅使用了“特征重标定”的策略来对特征进行处理,经过学习获取每一个特征通道的重要程度,根据重要性去下降或者提高相应的特征通道的权重。
至此,图像分类的比赛基本落幕,也接近算法的极限。可是,在实际的应用中,却面临着比比赛中更加复杂和现实的问题,须要你们不断积累经验。
目前,随着NASNet(Neural Architecture Search Network)的崛起,效果好的基本都是这些网络好比:NASNet、PNasNet、AmoebaNet,尤为是近Google新出的EfficientNet,更是对其余网络有碾压式的提高,下面的图片一目了然:
细粒度图像分类 (Fine-Grained Image Categorization),是对属于同一基础类别的图像(汽车、狗、花、鸟等)进行更加细致的子类划分(好比:区分狗的种类萨摩仍是哈士奇)。细粒度分类有不少实际的应用场景,好比区分在交通监控中,识别不一样的车型。
因为分类的粒度很小,子类之间差别细微,只在某个局部上有细微差别(如狗的眼睛),甚至在某些类别上甚至专家都难以区分,再加上子类内部差别巨大,如姿态、背景带来的差别,还有受视角、背景、遮挡的干扰等,因此细粒度图像分类比粗粒度分类要困难,也所以仍是目前比较热门的研究领域。
因为深度卷积网络可以学习到很是鲁棒的图像特征表示,对图像进行细粒度分类的方法,大多都是以深度卷积网络为基础的,这些方法大体能够分为如下四个方向:
一、基于常规图像分类网络的微调方法
这一类方法大多直接采用常见的深度卷积网络来直接进行图像细粒度分类,好比ResNet、DenseNet、SENet等。因为这些分类网络具备较强的特征表示能力,所以在常规图像分类中能取得较好的效果。然而在细粒度分类中,不一样物种之间的差别其实十分细微,所以,直接将常规的图像分类网络用于对细粒度图像的分类,效果并不理想。受迁移学习理论启发,一种方法是将大规模数据上训练好的网络迁移到细粒度分类识别任务中来。经常使用的解决方法是采用在ImageNet上预训练过的网络权值做为初始权值,而后再经过在细粒度分类数据集上对网络的权值进行微调(FineTune),获得 终的分类网络。
二、基于基于网络集成的方法
比较有表明性的是双线性卷积神经网络模型(Bilinear CNN),该方法使用VGG-D和VGG-M两个网络做为基准网络,经过Bilinear Pooling获得两个特征融合后的向量,进而用来分类。在不使用Bounding Box (边框)标注信息的状况下,在CUB200-2011数据集上到达了84.1%的分类精度,而使用
BoundingBox时,其分类精度高达85.1%。
三、基于目标块的检测(part detection)和对齐(alignment)的方法
基于目标块(object part)检测的方法思路是:先在图像中检测出目标所在的位置,而后再检测出目标中有区分性区域的位置,而后将目标图像(即前景)以及具备区分性的目标区域块同时送入深度卷积网络进行分类。可是,基于目标块检测的方法,每每在训练过程当中须要用到目标的Bounding box标注信息,甚至是目标图像中的关键特征点信息,而在实际应用中,要想获取到这些标注信息是很是困难的。比较有表明性的是2014年ECCV中提出来的Part-RCNN方法。
四、基于视觉注意机制(visual attention)的方法
视觉注意机制(Vision Attention Mechanism)是人类视觉所特有的信号处理机制。具体表现为视觉系统在看东西的时候,先经过快速扫描全局图像得到须要关注的目标区域,然后抑制其余无用信息以获取感兴趣的目标。在深度卷积网络中,一样可以利用注意模型来寻找图像中的感兴趣区域或区分性区域,而且对于不一样的任务,卷积网络关注的感兴趣区域是不一样的。因为基于视觉注意模型(Vision Attention Model)的方法能够在不须要额外标注信息(好比目标位置标注框和重要部件的位置标注信息)的状况下,定位出图像中有区分性的区域,近年来被普遍应用于图像的细粒度分类领域。表明性的工做是17年CVPR中提出的循环注意卷积神经网络(Recurrent Attention Convolutional Neural Network, RA-CNN)。
目前全部细粒度图像识别任务均需借助大量、甚至海量的标注数据。对于细粒度图像而言,其图像收集和标注成本巨大。如此便限制了细粒度研究相关的发展及其在现实场景下的应用。反观人类,咱们则具有在极少监督信息的条件下学习新概念的能力,例如,对于一个普通成年人可仅借助几张图像便学会识别鸟类的一个新物种。为了使细粒度级别图像识别模型也能像人类同样拥有少许训练样本下的学习能力,研究人员也在研究细粒度级别图像识别的少许样本学习任务,这可能也是未来的发展趋势。
前面所说的分类,所有都是单标签分类问题,即每个图只对应一个类别,而不少的任务,实际上是多标签分类问题,一张图能够对应多个标签,相比于多类别图像分类,多标签任务的难度更大,由于其输出空间随着类别数目呈指数增大。多标签分类问题一般有以下的策略:一阶策略:朴素的方法,忽略和其它标签的相关性,分离地看待各个目标,好比把多标签分解成多个独立的二分类问题(简单高效)。
二阶策略:考虑标签之间的成对关联,好比为相关标签和不相关标签排序。
高阶策略:考虑多个标签之间的关联,好比对每一个标签考虑全部其它标签的影响(效果优)。
稍微展开讲讲高阶策略:因为现实世界中不少物体一般会同时出现,所以对标签之间的相关性进行建模就成了多标签图像识别的关键,以下图所示:
大致上有两个方向,能够对多个角度探索标签之间相关性进行建模。一个是基于几率图模型或循环神经网络(RNN),显式地对标签依赖性进行建模。另外一个是经过注意力机制来对标签相关性进行隐式建模。该方法考虑的是图像中被注意区域之间的关系(可视为局部相关性)。不过即使如此,该方法仍是忽略了图像中标签之间的全局相关性(全局相关性须要经过单张图像以外的知识才能推断出来)。
例如:ML-GCN使用图(Graph)来对标签之间的相互依赖关系进行建模。可以灵活地获取标签空间中的拓扑结构,在MS-COCO和VOC2007测试集上都取得了 有的结果。
目标检测任务的目标是给定一张图像或是一个视频帧,让计算机找出其中全部目标的位置,并给出每一个目标的具体类别,它结合了目标分类和定位两个任务,通俗的说就是要机器告诉图片中有什么同时告诉在哪里。检测是不少计算机视觉应用的基础,好比实例分割、人体关键点提取、人脸识别等。现代大多数目标检测器的框架是Two-Stage,其中目标检测被定义为一个多任务学习问题:
(1)区分前景物体框与背景并为它们分配适当的类别标签;
(2)回归一组系数使得大化检测框和目标框之间的交并比(IoU)或其它指标。后,经过一个 NMS 过程移除冗余的边界框(对同一目标的重复检测)。
Anchor-Based方法
传统Anchor-Based方法,都是用策略提出一些候选框(prior box or anchor box),而后对这些候选框作分类和位置的归回。方法是对这些框所对应的 featuremap向量做分类(softmax)或者回归(线性回归),获得box的位置和类别。
OneStage算法是直接在网络中提取特征来预测物体分类和位置,Two Stage算法是指首先生成proposal,而后进行细粒度的物体检测。
现代大多数目标检测器的框架是两步进行:
(1)RPN:区分前景物体框与背景并为它们分配适当的类别标签;
(2)回归一组系数使得大化检测框和目标框之间的交并比(IoU)或其它指标后,经过一个 NMS 过程移除冗余的边界框(对同一目标的重复检测)。
目标检测的重要技术路线图以下图描述的很清晰:
图中的里程碑检测器: VJ Det, HOG Det,DPM, RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO, SSD, PyramidNetworks,RetinaNet。
以下是各个检测模型在VOC0七、VOC12和MS-COCO数据集上的检测结果图:
篇幅所限,之后有机会再对每一个具体的检测器作具体的展开讲解。
Anchor-Free方法
自从去年8月CornerNet开始,Anchor-Free的目标检测模型层出不穷,近开始热门起来。所谓Anchor-Free是指检测时不用现预设一些参考的Anchor-
Box,而是直接经过模型预测目标的位置和类别,好比经过关键点的方式。
其实 Anchor-Free并非一个新概念了, 早能够追溯的百度的DenseBox模型(此模型2015年提出,比Fast-RCNN还要早),大火的YOLO也算是目标检测领域的Anchor-Free模型,而 近的Anchor-Free模型如FASF、FCOS、FoveaBox都能看到DenseBox的影子。比较有表明性的Anchor-Free模型有:DenseBox、YOLO、CornerNet、ExtremeNet、FSAF、FCOS、FoveaBox。
虽然目前Anchor-Free的方法尚未彻底赛过传统的Anchor-Based方法,可是确实提供一种可行新的检测流程,主要的是对于BoundingBox是不是检测的 合理的表达,提出了挑战,后面随着Anchor-Free模型的演进,可能会产生出搞好的目标表达方式。
图像分割就是把图像分红若干个特定的、具备独特性质的区域并提出感兴趣目标的技术和过程,能够被看做是一个逐像素的图像分类问题。分割任务主要分为语义分割(semantic segmentation)、实例分割(instancesegmentation)以及今年刚兴起的新领域全景分割(panoptic segmentation),上图展现了不一样分割的区别。
稍微展开说明一下不一样分割任务:
语义分割:语义分割更注重「类别之间的区分」,语义分割会重点将前景里的人群和背景里树木、天空和草地分割开,可是它不区分人群的单独个体,如图中的人所有标记为红色,致使右边黄色框中的人没法辨别是一我的仍是不一样的人。主要模型有U-Net、SegNet、DeepLab系列、FCN、ENet、ICNet、ShelfNet、BiseNet、DFN和CCNet等网络。
实例分割:更注重「个体之间的区分」,实例分割这个问题近几年的发展在很大程度上是由 COCO 数据集和比赛推进的。从 MNC,FCIS 到PANet,都是在 COCO instance segmentation track 上拿第一名的方法。主要模型有FCIS、DeepMask、MaskR-CNN 、Hybrid Task Cascade(HTC)、PANet 等网络。
全景分割:新的子任务, 先由FAIR与德国海德堡大学联合提出,能够说是语义分割和实例分割的结合,全景分割任务下,图像内的每一个像素点都有其对应的语义标签和实例标签,从而可以大程度上地理解整幅图像。主要模型有JSIS-Net、TASCNet等。
图像分割大致框架或者说流程以下:
下采样+上采样:Convlution + Deconvlution/Resize。
多尺度特征融合:特征逐点相加/特征channel维度拼接。
得到像素级别的segement map:对每个像素点进行判断类别。
下图展现了图像分割进展的技术图谱:
一、FullyConvolutional Networks (FCN):这是神经网络作语义分割的开山之做,提出了全卷积网络。将全链接网络替换成了卷积网络,使得网络能够接受任意大小的图片,并输出和原图同样大小的分割图。只有这样,才能为每一个像素作分类。使用了反卷积层(Deconvolution),特征图进行上采样。
二、SegNet在FCN的基础上增长了解码器,造成目前分割任务中 流行的编解码结构,并给出了不一样解码器对效果的影响和缘由。
三、DeepLabv1/v2/v3:引入了带洞卷积(Dilated Convolution or Atrous Convolution),使得视野更大了。
四、PSPNet:核心贡献是全局金字塔池化(Global Pyramid Pooling),将特征图缩放到几个不一样的尺寸,使得特征具备更好地全局和多尺度信息。
五、MaskR-CNN:将Object Detection与SemanticSegmentation合在了一块儿作,提出了RoiAlign用来替换RoiPooling,消除了取整致使的偏移问题,提升了检测精度。
六、U-Net:采用了编解码结构,编码部分,每通过一个池化层就构造一个新的尺度,包括原图尺度一共有5个尺度。解码部分,每上采样一次,就和特征提取部分对应的通道数相同尺度融合。这样就得到了更丰富的上下文信息,在Decode的过程当中经过多尺度的融合丰富了细节信息,提升分割的精度。
Matting也是一类前背景分割问题,可是matting不是硬分割,而是软分割(Soft Segmentation),像玻璃、头发这类前景,对应像素点的颜色不仅是由前景自己的颜色决定,而是前背景颜色融合的结果,matting问题的目标就是,找出前背景颜色,以及它们之间的融合程度。
抠图(ImageMatting)只将图片分红前景和背景两块,目的是拿到前景,好的抠图算法会对于头发等细节的处理效果比较精确。抠图和分割的重要区别是分割是返回像素分类结果,分类结果是整型;而抠图返回的是属于前景或背景的几率p,在前景与背景交互区域会产生渐变的效果,使得抠图更加天然。
抠图技术的核心问题是解公式:I = αF + (1-α)B,其中I是图像当前可观察的像素,为已知量;α是透明度,F是前景像素,B是背景像素,这三个变量为未知量。对于这个公式的理解,能够把原始图像看作是前景和背景按照必定权重(α透明度)叠加组成的。对于彻底肯定是前景的像素,α = 1;对于彻底肯定是背景的像素,α = 0;对于不肯定是前景仍是背景的像素,α是介于0到1之间的浮点数。
优秀的抠图算法是有能力将前景中很是细小的毛发细节都能提取出的好算法,这点是传统图像分割技术作不到的。
如今深度学习也慢慢引入了Image Matting,基本上用的方法也是Encoder-Decoder框架,只是训练数据的GroundTruth变成了trimap。比较有表明性的是adobe搞的end to end的方案DeepImage Matting。
因为应用场景没有其余分割普遍,再加上数据集和benchmark的欠缺,致使Matting技术没有其余的分割技术热度高。
固然计算机视觉不止这些任务,分类、检测和分割只是计算机视觉的最基础的任务,而这些任务由于其基础性和通用性,在其余任务中都会用的到。好比人脸领域,也会用到检测和分类,在作特效的时候也会用到分割。而文中介绍的基础的网络结构,好比ResNet、GoogleNet等,在其余任务中也会用到。
深度视觉领域,除了这些还有不少没有涉及到,好比关键点检测、视频分类、视频检测和追踪、生成对抗网络(GAN)、自动学习(AutoML),垂直领域的人脸识别、光学字符识别(OCR)、行人再识别,包括经常使用的深度学习框架tensorflow、pytorch等,还有一直在研究的无/弱监督学习、自监督学习,加强学习等,每一个子领域展开讲都须要很大的篇幅,后面会再介绍这些方向的进展。
参考资料:
一、https://blog.csdn.net/xys430381_1/article/details/89640699
二、https://medium.com/atlas-ml/state-of-deep-learning-h2-2018-review-cc3e490f1679
三、https://zhuanlan.zhihu.com/p/57643009
四、https://zhuanlan.zhihu.com/p/62212910
五、https://cloud.tencent.com/developer/article/1428956
本文首发于公众“小米云技术”,转载请标明出处,点击查看原文连接。