前言:来自百度的深度学习工程师,围绕计算机视觉领域的八大任务,包括:图像分类、目标检测、图像语义分割、场景文字识别、图像生成、人体关键点检测、视频分类、度量学习等,进行了较为详细的综述并形成此文。
这篇综述中,介绍了这些任务的基本情况,以及目前的技术进展、主要的模型和性能对比等。而且还逐一附上了GitHub传送门,用于更进一步的学习与安装实践指南。其中不少教程还是用中文写成,非常友好。这篇综述全程干货,推荐收藏阅读。
上篇
计算机视觉(Computer Vision)是研究如何使机器“看”的科学,更进一步的说,是使用摄像机机和电脑代替人眼对目标进行识别、跟踪和测量等的机器视觉,并通过电脑处理成为更适合人眼观察或传送给仪器检测的图像。
形象地说,就是给计算机安装上眼睛(摄像机)和大脑(算法),让计算机像人一样去看、去感知环境。计算机视觉技术作为人工智能的重要核心技术之一,已广泛应用于安防、金融、硬件、营销、驾驶、医疗等领域。本文上篇中,我们将介绍基于PaddlePaddle的四种计算机视觉技术及其相关的深度学习模型。
一、图像分类
图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉中重要的基础问题,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层视觉任务的基础。
图像分类在许多领域都有着广泛的应用。如:安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。
得益于深度学习的推动,图像分类的准确率大幅度提升。在经典的数据集ImageNet上,训练图像分类任务常用的模型,包括AlexNet、VGG、GoogLeNet、ResNet、Inception-v4、MobileNet、MobileNetV2、DPN(Dual Path Network)、SE-ResNeXt、ShuffleNet等。
△ AlexNet
△ VGG
△ GoogLeNet
△ ResNet
△ Inception-v4
△ MobileNet
△ SE-ResNeXt
△ ShuffleNet
模型的结构和复杂程度都不一样,最终得到的准确率也有所区别。下面这个表格中,列出了在ImageNet 2012数据集上,不同模型的top-1/top-5验证准确率。
△ 图像分类系列模型评估结果
在我们的GitHub页面上,提供上述与训练模型的下载。以及详细介绍了如何使用PaddlePaddle Fluid进行图像分类任务。包括安装、数据准备、模型训练、评估等等全部过程。还有将Caffe模型转换为PaddlePaddle Fluid模型配置和参数文件的工具。
上述页面的传送门在此:
https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/image_classification
目标检测任务的目标是给定一张图像或是一个视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别。
对于人类来说,目标检测是一个非常简单的任务。然而,计算机能够“看到”的是图像被编码之后的数字,很难解图像或是视频帧中出现了人或是物体这样的高层语义概念,也就更加难以定位目标出现在图像中哪个区域。
与此同时,由于目标会出现在图像或是视频帧中的任何位置,目标的形态千变万化,图像或是视频帧的背景千差万别,诸多因素都使得目标检测对计算机来说是一个具有挑战性的问题。
在目标检测任务中,我们主要介绍如何基于PASCAL VOC、MS COCO数据训练通用物体检测模型,包括SSD模型、PyramidBox模型、R-CNN模型。
• SSD模型,Single Shot MultiBox Detector,是一种单阶段的目标检测器。与两阶段的检测方法不同,单阶段目标检测并不进行区域推荐,而是直接从特征图回归出目标的边界框和分类概率。SSD 运用了这种单阶段检测的思想,并且对其进行改进:在不同尺度的特征图上检测对应尺度的目标,是目标检测领域较新且效果较好的检测算法之一,具有检测速度快且检测精度高的特点。
△ SSD目标检测模型结构
△ SSD目标检测可视化
△ 目标检测SSD模型评估结果
在GitHub上,我们更详细的介绍了如何下载、训练、使用这一模型。
传送门在此:
https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/object_detection
• PyramidBox模型,百度自主研发的人脸检测模型,是一种语境辅助的单次人脸检测新方法,能够解决在不受控制的环境中检测小的、模糊的及部分遮挡的人脸时的问题,模型于18年3月份在WIDER Face数据集上取得第一名。
△ Pyramidbox 人脸检测模型
△ Pyramidbox 预测可视化
△ PyramidBox模型评估结果
如果想进一步了解这个模型,传送门在此(而且是全中文指导):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/face_detection
• R-CNN系列模型,区域卷积神经网络(R-CNN)系列模型是典型的两阶段目标检测器,相较于传统提取区域的方法,R-CNN中RPN网络通过共享卷积层参数大幅提高提取区域的效率,并提出高质量的候选区域。Faster R-CNN和Mask R-CNN是R-CNN系列的典型模型。
Faster R-CNN 区域生成网络(RPN)+Fast R-CNN的实现,将候选区域生成、特征提取、分类、位置精修统一到一个深度网络框架,大大提高运行速度。
Mask R-CNN在原有Faster R-CNN模型基础上添加分割分支,得到掩码结果,实现了掩码和类别预测关系的解藕,是经典的实例分割模型。
△ Faster R-CNN 结构
△ Faster R-CNN 预测可视化
△ Mask R-CNN结构
△ Mask R-CNN 预测可视化
△ Faster R-CNN评估结果
同样,如果你想进一步学习R-CNN安装、准备、训练等,可以前往下面这个传送门:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/rcnn
三、图像语义分割
图像语意分割,顾名思义是将图像像素按照表达的语义含义的不同进行分组/分割。
图像语义是指对图像内容的理解,例如,能够描绘出什么物体在哪里做了什么事情等,分割是指对图片中的每个像素点进行标注,标注属于哪一类别。近年来用在无人车驾驶技术中分割街景来避让行人和车辆、医疗影像分析中辅助诊断等。
分割任务主要分为实例分割和语义分割,实例分割是物体检测加上语义分割的综合体,上文介绍的Mask R-CNN是实例分割的经典网络结构之一。在图像语义分割任务中,我们主要介绍兼顾准确率和速度的ICNet,DeepLab中最新、执行效果最好的DeepLab v3+。
• DeepLab v3+,DeepLab语义分割系列网络的最新作,通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。
△ DeepLab v3+ 基本结构
△ DeepLab v3+ 评估结果
照例,GitHub传送门在此(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/deeplabv3%2B
• ICNet,Image Cascade Network,主要用于图像实时语义分割,主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。
△ ICNet网络结构
△ ICNet可视化
△ ICNet评估结果
进一步上手实践的传送门在此(也是中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/icnet
四、场景文字识别
许多场景图像中包含着丰富的文本信息,对理解图像信息有着重要作用,能够极大地帮助人们认知和理解场景图像的内容。场景文字识别是在图像背景复杂、分辨率低下、字体多样、分布随意等情况下,将图像信息转化为文字序列的过程,可认为是一种特别的翻译过程:将图像输入翻译为自然语言输出。场景图像文字识别技术的发展也促进了一些新型应用的产生,如通过自动识别路牌中的文字帮助街景应用获取更加准确的地址信息等。
在场景文字识别任务中,我们介绍如何将基于CNN的图像特征提取和基于RNN的序列翻译技术结合,免除人工定义特征,避免字符分割,使用自动学习到的图像特征,完成字符识别。这里主要介绍CRNN-CTC模型和基于注意力机制的序列到序列模型。
• CRNN-CTC模型,采取CNN+RNN+CTC架构,卷积层使用CNN,从输入图像中提取特征序列、循环层使用RNN,预测从卷积层获取的特征序列的标签(真实值)分布、转录层使用CTC,把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果。
• 基于注意力机制的序列到序列模型,提出了基于attention机制的文本识别方法,不需要检测,直接输入图片进行识别,对于识别字符类别数很少的场景很实用,例如车牌识别、自然场景图片的主要关键词提取等。同时也不要求识别文本必须单行排列,双行排列,多行排列都可以。在训练过程中则不需要文本框的标注,训练数据的收集变得很方便。
△ CRNN-CTC模型结构
△ 基于注意力机制的序列到序列模型结构
△ OCR模型评估结果
GitHub传送门在此(中文友好):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/ocr_recognition
下篇
上篇中我们介绍了计算机视觉技术在图像分类、目标检测、图像语义分割、场景文字识别四大基本任务场景下,如何帮助计算机从单个或者一系列的图片中提取分析和理解的关键信息。当下,视频在人们生活中越来越重要,伴随着技术成熟度的提高,计算机视觉技术的突破也从静态图像识别的“看到”转向了视频理解的“看懂”。
接下来,我们一起探索基于PaddlePaddle的图像生成、人体关键点检测、视频分类相关的深度学习模型。
一、图像生成
图像生成是指根据输入向量,生成目标图像。这里的输入向量可以是随机的噪声或用户指定的条件向量。具体的应用场景有:手写体生成、人脸合成、风格迁移、图像修复、超分重建等。当前的图像生成任务主要是借助生成对抗网络(GAN)来实现。
生成对抗网络(GAN)由两种子网络组成:生成器和识别器。生成器的输入是随机噪声或条件向量,输出是目标图像。识别器是一个分类器,输入是一张图像,输出是该图像是否是真实的图像。在训练过程中,生成器和识别器通过不断的相互博弈提升自己的能力。
在图像生成任务中,我们主要介绍如何使用DCGAN和ConditioanlGAN来进行手写数字的生成,另外还介绍了用于风格迁移的CycleGAN。
• ConditioanlGAN,顾名思义是带条件约束的生成对抗模型,它在生成模型和判别模型的建模中均引入了额外的条件变量,对于生成器对数据的生成具有指导作用。ConditioanlGAN是把无监督的GAN变成有监督模型的改进,为后续的工作提供了指导作用。
△ ConditioanlGAN结构
△ ConditioanlGAN预测效果图
传送门(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan
• DCGAN,为了填补CNN在监督学习和无监督学习之间的gap,此篇论文提出了将CNN和GAN结合的DCGAN(深度卷积生成对抗网络),并且DCGAN在无监督学习中取得不错的结果。
△ DCGAN结构
△ DCGAN预测效果图
传送门(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan
• CycleGAN,将一类图片转换成另一类图片。传统的 GAN 是单向生成,CycleGAN 是互相生成,本质上是两个镜像对称的GAN,构成了一个环形网络,所以命名为 Cycle。风格迁移类任务一般都需要两个域中具有相同内容的成对图片作为训练数据,CycleGAN的创新点就在于其能够在没有成对训练数据的情况下,将图片内容从源域迁移到目标域。
△ CycleGAN 结构
△ CycleGAN预测可视化
传送门(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/cycle_gan
二、人体关键点检测
人体关键点检测,通过人体关键节点的组合和追踪来识别人的运动和行为,对于描述人体姿态,预测人体行为至关重要,是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及自动驾驶等等,也为游戏、视频等提供新的交互方式。
在人体关键点检测任务中,我们主要介绍网络结构简单的coco2018关键点检测项目的亚军方案。
• Simple Baselines for Human Pose Estimation in Fluid,coco2018关键点检测项目的亚军方案,没有华丽的技巧,仅仅是在ResNet中插入了几层反卷积,将低分辨率的特征图扩张为原图大小,以此生成预测关键点需要的Heatmap。没有任何的特征融合,网络结构非常简单,但是达到了state of the art效果。
△ 视频Demo: Bruno Mars - That’s What I Like [官方视频]
△ Simple Baselines for Human Pose Estimation in Fluid 评估结果
GitHub传送门:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/human_pose_estimation
三、视频分类
视频分类是视频理解任务的基础,与图像分类不同的是,分类的对象不再是静止的图像,而是一个由多帧图像构成的、包含语音数据、包含运动信息等的视频对象,因此理解视频需要获得更多的上下文信息,不仅要理解每帧图像是什么、包含什么,还需要结合不同帧,知道上下文的关联信息。
视频分类方法主要包含基于卷积神经网络、基于循环神经网络、或将这两者结合的方法。
在视频分类任务中,我们主要介绍视频分类方向的多个主流领先模型,其中Attention LSTM,Attention Cluster和NeXtVLAD是比较流行的特征序列模型,TSN和StNet是两个End-to-End的视频分类模型。
Attention LSTM模型速度快精度高,NeXtVLAD是2nd-Youtube-8M比赛中最好的单模型, TSN是基于2D-CNN的经典解决方案。Attention Cluster和StNet是百度自研模型,分别发表于CVPR2018和AAAI2019,是Kinetics600比赛第一名中使用到的模型。
• Attention Cluster模型为ActivityNet Kinetics Challenge 2017中最佳序列模型,通过带Shifting Opeation的Attention Clusters处理已抽取好的RGB、Flow、Audio数据。
△ Attention Cluster模型结构
Attention LSTM 模型,采用了双向长短记忆网络(LSTM),将视频的所有帧特征依次编码。与传统方法直接采用LSTM最后一个时刻的输出不同,该模型增加了一个Attention层,每个时刻的隐状态输出都有一个自适应权重,然后线性加权得到最终特征向量。
△ Attention LSTM 模型结构
• NeXtVLAD模型,第二届Youtube-8M视频理解竞赛中效果最好的单模型,提供了一种将桢级别的视频特征转化并压缩成特征向量,以适用于大尺寸视频文件的分类的方法。其基本出发点是在NetVLAD模型的基础上,将高维度的特征先进行分组,通过引入attention机制聚合提取时间维度的信息,这样既可以获得较高的准确率,又可以使用更少的参数量。
△ NeXtVLAD模型结构
• StNet模型,框架为ActivityNet Kinetics Challenge 2018中夺冠的基础网络框架,提出“super-image”的概念,在super-image上进行2D卷积,建模视频中局部时空相关性。另外通过temporal modeling block建模视频的全局时空依赖,最后用一个temporal Xception block对抽取的特征序列进行长时序建模。
△ StNet模型结构
• Temporal Segment Network (TSN) ,视频分类领域经典的基于2D-CNN的解决方案,主要解决视频的长时间行为判断问题,通过稀疏采样视频帧的方式代替稠密采样,既能捕获视频全局信息,也能去除冗余,降低计算量。最终将每帧特征平均融合后得到视频的整体特征,并用于分类。
△ TSN模型结构
△ 基于Youtube-8M数据集的视频分类模型 评估结果
△ 基于Kinetics数据集的视频分类模型 评估结果
这部分的详情,可以移步GitHub,全程中文。传送门:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/video
四、度量学习
度量学习也称作距离度量学习、相似度学习,通过学习对象之间的距离,度量学习能够用于分析对象时间的关联、比较关系,在实际问题中应用较为广泛,可应用于辅助分类、聚类问题,也广泛用于图像检索、人脸识别等领域。
以往,针对不同的任务,需要选择合适的特征并手动构建距离函数,而度量学习可根据不同的任务来自主学习出针对特定任务的度量距离函数。度量学习和深度学习的结合,在人脸识别/验证、行人再识别(human Re-ID)、图像检索等领域均取得较好的性能,在这个任务中我们主要介绍基于Fluid的深度度量学习模型,包含了三元组、四元组等损失函数。
△ 度量学习模型 评估结果
GitHub的页面上有安装、准备、训练等方面的指导,传送门:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/metric_learning