原文: 计算机视觉八大任务全概述:PaddlePaddle工程师详解热门视觉模型 - 2019.03.22

出处:量子位 - 微信公众号

本文转载自 PaddlePaddle.

编者按:

来自百度的深度学习工程师,围绕计算机视觉领域的八大任务,包括:图像分类、目标检测、图像语义分割、场景文字识别、图像生成、人体关键点检测、视频分类、度量学习等,进行了较为详细的综述并形成此文.

这篇综述中,介绍了这些任务的基本情况,以及目前的技术进展、主要的模型和性能对比等. 而且还逐一附上了GitHub传送门,用于更进一步的学习与安装实践指南. 其中不少教程还是用中文写成,非常友好.

总之,这篇综述全程干货,推荐收藏阅读.

计算机视觉(Computer Vision)是研究如何使机器“看”的科学,更进一步的说,是使用摄像机机和电脑代替人眼对目标进行识别、跟踪和测量等的机器视觉,并通过电脑处理成为更适合人眼观察或传送给仪器检测的图像.

形象地说,就是给计算机安装上眼睛(摄像机)和大脑(算法),让计算机像人一样去看、去感知环境.

计算机视觉技术作为人工智能的重要核心技术之一,已广泛应用于安防、金融、硬件、营销、驾驶、医疗等领域.

本文中,一方面,介绍基于PaddlePaddle的计算机视觉技术在图像分类、目标检测、图像语义分割、场景文字识别四大基本任务场景下,如何帮助计算机从单个或者一系列的图片中提取分析和理解的关键信息及其相关的深度学习模型.

另一方面,视频在人们生活中越来越重要,伴随着技术成熟度的提高,计算机视觉技术的突破也从静态图像识别的“看到”转向了视频理解的“看懂”,故还介绍了基于PaddlePaddle的图像生成、人体关键点检测、视频分类相关的深度学习模型.

一. 图像分类

图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉中重要的基础问题,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层视觉任务的基础.

图像分类在许多领域都有着广泛的应用. 如:安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等.

1.1. 模型结构

得益于深度学习的推动,图像分类的准确率大幅度提升. 在经典的数据集ImageNet上,训练图像分类任务常用的模型,包括AlexNet、VGG、GoogLeNet、ResNet、Inception-v4、MobileNet、MobileNetV2、DPN(Dual Path Network)、SE-ResNeXt、ShuffleNet等.

image

AlexNet

image

VGG

image

GoogLeNet

image

ResNet

image

Inception-v4

image

MobileNet

image

SE-ResNeXt

image

ShuffleNet

1.2. 精度对比

PaddlePaddle - 预训练模型下载,及 PaddlePaddle Fluid 文档:

(还包括将Caffe模型转换为PaddlePaddle Fluid模型配置和参数文件的工具. )

https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/image_classification

模型的结构和复杂程度都不一样,最终得到的准确率也有所区别. 下面这个表格中,列出了在ImageNet 2012数据集上,不同模型的top-1/top-5验证准确率.

modeltop-1/top-5 accuracy(PIL)top-1/top-5 accuracy(CV2)
AlexNet56.71%/79.18%55.88%/78.65%
VGG1169.22%/89.09%69.01%/88.90%
VGG1370.14%/89.48%69.83%/89.13%
VGG1672.08%/90.63%71.65%/90.57%
VGG1972.56%/90.83%72.32%/90.98%
MobileNetV170.91%/89.54%70.51%/89.35%
MobileNetV271.90%/90.55%71.53%/90.41%
ResNet5076.35%/92.80%76.22%/92.92%
ResNet10177.49%/93.57%77.56%/93.64%
ResNet15278.12%/93.93%77.92%/93.87%
SE_ResNeXt50_32x4d78.50%/94.01%78.44%/93.96%
SE_ResNeXt101_32x4d79.26%/94.22%79.12%/94.20%

图像分类系列模型评估结果

二. 目标检测

目标检测任务的目标是给定一张图像或是一个视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别.

对于人类来说,目标检测是一个非常简单的任务. 然而,计算机能够“看到”的是图像被编码之后的数字,很难解图像或是视频帧中出现了人或是物体这样的高层语义概念,也就更加难以定位目标出现在图像中哪个区域.

与此同时,由于目标会出现在图像或是视频帧中的任何位置,目标的形态千变万化,图像或是视频帧的背景千差万别,诸多因素都使得目标检测对计算机来说是一个具有挑战性的问题.

在目标检测任务中,主要介绍如何基于PASCAL VOC、MS COCO数据训练通用物体检测模型,包括SSD模型、PyramidBox模型、R-CNN模型.

2.1. SSD模型

Single Shot MultiBox Detector,是一种单阶段的目标检测器. 与两阶段的检测方法不同,单阶段目标检测并不进行区域推荐,而是直接从特征图回归出目标的边界框和分类概率. SSD 运用了这种单阶段检测的思想,并且对其进行改进:在不同尺度的特征图上检测对应尺度的目标,是目标检测领域较新且效果较好的检测算法之一,具有检测速度快且检测精度高的特点.

image

SSD目标检测模型结构

image

SSD目标检测可视化

SSD 模型下载、训练与使用:

https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/object_detection

ModelPre-trained ModelTraining dataTest datamAP
MobileNet-v1-SSD 300x300COCO MobileNet SSDVOC07+12 trainvalVOC07 test73.32%

目标检测SSD模型评估结果

2.2. PyramidBox模型

PyramidBox模型 是百度自主研发的人脸检测模型,是一种语境辅助的单次人脸检测新方法,能够解决在不受控制的环境中检测小的、模糊的及部分遮挡的人脸时的问题,模型于18年3月份在WIDER Face数据集上取得第一名.

image

△ Pyramidbox 人脸检测模型

image

△ Pyramidbox 预测可视化

Pyramidbox 模型(全中文文档):

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/face_detection

模型预训练模型训练数据测试数据mAP
Pyramidbox-v1-SSD 640x640VGGNetWIDER FACE trainWIDER FACE Val96.0%/ 94.8%/ 88.8%

PyramidBox模型评估结果

2.3. 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模型基础上添加分割分支,得到掩码结果,实现了掩码和类别预测关系的解藕,是经典的实例分割模型.

image

Faster R-CNN 结构

image

Faster R-CNN 预测可视化

image

Mask R-CNN结构

image

Mask R-CNN 预测可视化

R-CNN安装、准备、训练等:

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/rcnn

ModelRoI functionBatch sizeMax iterationmAP
Fluid RoIPool minibatch paddingRoIPool81800000.316
Fluid RoIPool no paddingRoIPool81800000.318
Fluid RoIAlign no paddingRoIAlign81800000.348
Fluid RoIAlign no padding 2xRoIAlign83600000.367

Faster R-CNN评估结果

ModelBatch sizeMax iterationbox mAPmask mAP
Fluid mask no padding81800000.3590.314

Mask R-CNN评估结果

2.4. YOLOV3 模型

YOLOv3 是一阶段End2End的目标检测器。其目标检测原理如下图所示:

image

YOLOv3 检测原理

YOLOv3 将输入图像分成 SxS 个格子,每个格子预测 B 个bounding box,每个bounding box预测内容包括: Location(x, y, w, h)、Confidence Score和C个类别的概率,因此 YOLOv3 输出层的 channel 数为SxSxBx(5 + C).

YOLOv3 的 loss 函数也有三部分组成:Location误差,Confidence误差和分类误差.

YOLOv3的网络结构如下图所示:

image

△ YOLOv3 网络结构

YOLOv3 的网络结构由基础特征提取网络、multi-scale特征融合层和输出层组成。

[1] - 特征提取网络

YOLOv3使用 DarkNet53作为特征提取网络:DarkNet53 基本采用了全卷积网络,用步长为2的卷积操作替代了池化层,同时添加了 Residual 单元,避免在网络层数过深时发生梯度弥散。

[2] - 特征融合层

为了解决之前YOLO版本对小目标不敏感的问题,YOLOv3采用了3个不同尺度的特征图来进行目标检测,分别为13x13,26x26,52x52,用来检测大、中、小三种目标。特征融合层选取 DarkNet 产出的三种尺度特征图作为输入,借鉴了FPN(feature pyramid networks)的思想,通过一系列的卷积层和上采样对各尺度的特征图进行融合。

[3] - 输出层

同样使用了全卷积结构,其中最后一个卷积层的卷积核个数是255:3*(80+4+1)=255,3表示一个grid cell包含3个bounding box,4表示框的4个坐标信息,1表示Confidence Score,80表示COCO数据集中80个类别的概率。

image

△ YOLOv3 可视化检测结果

PaddlePaddle YOLOV3 实现:

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/yolov3

input size608x608416x416320x320
infer speed50 ms/frame29 ms/frame24 ms/frame

三. 图像语义分割

图像语义分割,顾名思义是将图像像素按照表达的语义含义的不同进行分组/分割.

图像语义是指对图像内容的理解,例如,能够描绘出什么物体在哪里做了什么事情等,分割是指对图片中的每个像素点进行标注,标注属于哪一类别. 近年来用在无人车驾驶技术中分割街景来避让行人和车辆、医疗影像分析中辅助诊断等.

分割任务主要分为实例分割和语义分割.

实例分割是物体检测加上语义分割的综合体.Mask R-CNN是实例分割的经典网络结构之一.

在图像语义分割任务中,主要介绍兼顾准确率和速度的 ICNet,DeepLab中最新、执行效果最好的DeepLab v3+.

3.1. DeepLab v3+

DeepLab v3+,DeepLab语义分割系列网络的最新作,通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU.

image

DeepLab v3+ 基本结构

DeepLab v3+ - PaddlePaddle 实现:

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/deeplabv3%2B

数据集norm typepretrained modeltrained modelmean IoU
CityScapebatch normdeeplabv3plus_xception65_initialize.tgzdeeplabv3plus.tgz0.7873
CityScapegroup normdeeplabv3plus_gn_init.tgzdeeplabv3plus_gn.tgz0.7881

DeepLab v3+ 评估结果

3.2. ICNet

ICNet, Image Cascade Network,主要用于图像实时语义分割,主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并. ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡.

image

ICNet网络结构

image

ICNet可视化

ICNet - PaddlePaddle 实现(中文文档):

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/icnet

数据集pretrained modelmean IoU
CityScapepretrained_model0.67

ICNet评估结果

四. 场景文字识别

许多场景图像中包含着丰富的文本信息,对理解图像信息有着重要作用,能够极大地帮助人们认知和理解场景图像的内容.

场景文字识别是在图像背景复杂、分辨率低下、字体多样、分布随意等情况下,将图像信息转化为文字序列的过程,可认为是一种特别的翻译过程:将图像输入翻译为自然语言输出.

场景图像文字识别技术的发展也促进了一些新型应用的产生,如通过自动识别路牌中的文字帮助街景应用获取更加准确的地址信息等.

在场景文字识别任务中,介绍如何将基于CNN的图像特征提取和基于RNN的序列翻译技术结合,免除人工定义特征,避免字符分割,使用自动学习到的图像特征,完成字符识别. 这里主要介绍CRNN-CTC 模型和基于注意力机制的序列到序列模型.

4.1. CRNN-CTC模型

CRNN-CTC模型, 采取CNN+RNN+CTC架构,卷积层使用CNN,从输入图像中提取特征序列、循环层使用RNN,预测从卷积层获取的特征序列的标签(真实值)分布、转录层使用CTC,把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果.

4.2. 基于注意力机制的序列到序列模型

基于注意力机制的序列到序列模型, 提出了基于attention机制的文本识别方法,不需要检测,直接输入图片进行识别,对于识别字符类别数很少的场景很实用,例如车牌识别、自然场景图片的主要关键词提取等. 同时也不要求识别文本必须单行排列,双行排列,多行排列都可以. 在训练过程中则不需要文本框的标注,训练数据的收集变得很方便.

image

CRNN-CTC模型结构

image

基于注意力机制的序列到序列模型结构

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/ocr_recognition

模型错误率
ocr_ctc_params22.3%
ocr_attention_params15.8%

OCR模型评估结果

五. 图像生成

图像生成是指根据输入向量,生成目标图像. 这里的输入向量可以是随机的噪声或用户指定的条件向量. 具体的应用场景有:手写体生成、人脸合成、风格迁移、图像修复、超分重建等. 当前的图像生成任务主要是借助生成对抗网络(GAN)来实现.

生成对抗网络(GAN)由两种子网络组成:生成器识别器. 生成器的输入是随机噪声或条件向量,输出是目标图像. 识别器是一个分类器,输入是一张图像,输出是该图像是否是真实的图像. 在训练过程中,生成器和识别器通过不断的相互博弈提升自己的能力.

在图像生成任务中,主要介绍如何使用 DCGAN 和 ConditioanlGAN 来进行手写数字的生成,另外还介绍了用于风格迁移的CycleGAN.

5.1. ConditioanlGAN

ConditioanlGAN ,顾名思义是带条件约束的生成对抗模型,它在生成模型和判别模型的建模中均引入了额外的条件变量,对于生成器对数据的生成具有指导作用. ConditioanlGAN是把无监督的GAN变成有监督模型的改进,为后续的工作提供了指导作用.

image

ConditioanlGAN结构

image

ConditioanlGAN预测效果图

中文文档:

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan

5.2. DCGAN

DCGAN,为了填补CNN在监督学习和无监督学习之间的gap,此篇论文提出了将CNN和GAN结合的DCGAN(深度卷积生成对抗网络),并且DCGAN在无监督学习中取得不错的结果.

image

DCGAN结构

image

DCGAN预测效果图

中文文档:

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan

5.3. CycleGAN

CycleGAN,将一类图片转换成另一类图片. 传统的 GAN 是单向生成,CycleGAN 是互相生成,本质上是两个镜像对称的GAN,构成了一个环形网络,所以命名为 Cycle. 风格迁移类任务一般都需要两个域中具有相同内容的成对图片作为训练数据,CycleGAN的创新点就在于其能够在没有成对训练数据的情况下,将图片内容从源域迁移到目标域.

image

CycleGAN 结构

image

CycleGAN预测可视化

中文文档:

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/cycle_gan

六. 人体关键点检测

人体关键点检测,通过人体关键节点的组合和追踪来识别人的运动和行为,对于描述人体姿态,预测人体行为至关重要,是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及自动驾驶等等,也为游戏、视频等提供新的交互方式.

在人体关键点检测任务中,主要介绍网络结构简单的coco2018关键点检测项目的亚军方案.

6.1. Simple Baselines for Human Pose Estimation in Fluid

Simple Baselines for Human Pose Estimation in Fluid,coco2018关键点检测项目的亚军方案,没有华丽的技巧,仅仅是在ResNet中插入了几层反卷积,将低分辨率的特征图扩张为原图大小,以此生成预测关键点需要的Heatmap. 没有任何的特征融合,网络结构非常简单,但是达到了state of the art 效果.

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/human_pose_estimation

ArchHeadShoulderElbowWristHipKneeAnkleMeanMean@0.1Models
383x384_pose_resnet_50 in PyTorch96.65895.75489.79084.61488.52384.66679.28789.06638.046-
383x384_pose_resnet_50 in Fluid96.24895.34689.80784.87388.29883.67978.64988.76737.374link

△ Simple Baselines for Human Pose Estimation in Fluid 评估结果

七. 视频分类

视频分类是视频理解任务的基础,与图像分类不同的是,分类的对象不再是静止的图像,而是一个由多帧图像构成的、包含语音数据、包含运动信息等的视频对象,因此理解视频需要获得更多的上下文信息,不仅要理解每帧图像是什么、包含什么,还需要结合不同帧,知道上下文的关联信息.

视频分类方法主要包含基于卷积神经网络、基于循环神经网络、或将这两者结合的方法.

在视频分类任务中,主要介绍视频分类方向的多个主流领先模型,其中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比赛第一名中使用到的模型.

7.1. Attention Cluster模型

Attention Cluster模型为ActivityNet Kinetics Challenge 2017中最佳序列模型,通过带Shifting Opeation的Attention Clusters处理已抽取好的RGB、Flow、Audio数据.

image

Attention Cluster模型结构

Attention LSTM 模型,采用了双向长短记忆网络(LSTM),将视频的所有帧特征依次编码. 与传统方法直接采用LSTM最后一个时刻的输出不同,该模型增加了一个Attention层,每个时刻的隐状态输出都有一个自适应权重,然后线性加权得到最终特征向量.

image

Attention LSTM 模型结构

7.2. NeXtVLAD模型

NeXtVLAD模型,第二届Youtube-8M视频理解竞赛中效果最好的单模型,提供了一种将桢级别的视频特征转化并压缩成特征向量,以适用于大尺寸视频文件的分类的方法. 其基本出发点是在NetVLAD模型的基础上,将高维度的特征先进行分组,通过引入attention机制聚合提取时间维度的信息,这样既可以获得较高的准确率,又可以使用更少的参数量.

image

NeXtVLAD模型结构

7.3. StNet模型

StNet模型,框架为ActivityNet Kinetics Challenge 2018中夺冠的基础网络框架,提出“super-image”的概念,在super-image上进行2D卷积,建模视频中局部时空相关性. 另外通过temporal modeling block建模视频的全局时空依赖,最后用一个temporal Xception block对抽取的特征序列进行长时序建模.

image

StNet模型结构

7.4. Temporal Segment Network (TSN)

Temporal Segment Network (TSN) ,视频分类领域经典的基于2D-CNN的解决方案,主要解决视频的长时间行为判断问题,通过稀疏采样视频帧的方式代替稠密采样,既能捕获视频全局信息,也能去除冗余,降低计算量. 最终将每帧特征平均融合后得到视频的整体特征,并用于分类.

image

TSN模型结构

中文文档:

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/video

模型Batch Size环境配置cuDNN版本GAP下载链接
Attention Cluster20488卡P407.10.84model
Attention LSTM10248卡P407.10.86model
NeXtVLAD1604卡P407.10.87model

基于Youtube-8M数据集的视频分类模型 评估结果

模型Batch Size环境配置cuDNN版本Top-1下载链接
StNet1288卡P405.10.69model
TSN2568卡P407.10.67model

基于Kinetics数据集的视频分类模型 评估结果

八. 度量学习

度量学习也称作距离度量学习、相似度学习,通过学习对象之间的距离,度量学习能够用于分析对象时间的关联、比较关系,在实际问题中应用较为广泛,可应用于辅助分类、聚类问题,也广泛用于图像检索、人脸识别等领域.

以往,针对不同的任务,需要选择合适的特征并手动构建距离函数,而度量学习可根据不同的任务来自主学习出针对特定任务的度量距离函数. 度量学习和深度学习的结合,在人脸识别/验证、行人再识别(human Re-ID)、图像检索等领域均取得较好的性能,在这个任务中我们主要介绍基于Fluid的深度度量学习模型,包含了三元组、四元组等损失函数.

https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/metric_learning

pretrain modelsoftmaxarcmargin
without fine-tuned77.42%78.11%
fine-tuned with triplet78.37%79.21%
fine-tuned with quadruplet78.10%79.59%
fine-tuned with eml79.32%80.11%

度量学习模型 评估结果

Last modification:April 8th, 2019 at 06:46 pm