近200FPS的高帧数多人姿态检测,cs231n学习笔记

澳门新葡萄京997755 11

原标题:ECCV 2018丨YOLO遇上OpenPose,近200FPS的高帧数多人姿态检测

cs231n学习笔记-CNN-目标检测、定位、分割

伊瓢 发自 凹非寺

cite from:

在高帧数下,如何实现人体姿态检测?

1. 基本概念

下面这条刷屏的twitter视频给出了答案。

1)CNN:Convolutional Neural Networks

这是今年ECCV上的一篇名为《Pose Proposal
Networks》的论文,作者是日本柯尼卡美能达公司的関井大気(Taiki
SEKII),结合了去年CVPR上的YOLO和CMU的OpenPose,创造出的新方法,能够实现高帧数视频中的多人姿态检测。

2)FC:Fully Connected

高帧数,无压力

3)IoU:Intersection over Union (IoU的值定义:Region Proposal与Ground
Truth的窗口的交集比并集的比值,如果IoU低于0.5,那么相当于目标还是没有检测到)

澳门新葡萄京997755 1

4)ICCV:International Conference on Computer Vision

澳门新葡萄京997755 2

5)R-CNN:Region-based Convolutional Neural Networks

而其他方法,比如NIPS 2017 的AE(Associative embedding)、ICCV
2017的RMPE(Regional multi-person pose estimation)、CVPR
2017的PAF(Realtime multi-person 2D pose estimation using part affinity
fields),都无法实现高帧数尤其是100以上帧数视频的姿态检测。

6)AR:Average Recall

澳门新葡萄京997755 3

7)mAP:mean Average Precision

在COCO数据集上也不虚,相比谷歌PersonLab能在更高帧数下运行。

8)RPN:Region Proposal Networks

澳门新葡萄京997755 4

9)FAIR:Facebook AI Research

来看下具体数据,在头、肩、肘部位和整体上半身识别中超过了其他方法,整体得分也不虚。

10)w.r.t.:with respect to

神奇“体位”大冒险

11)Image Classification(what?):图像分类

另外,常规的姿态检测十分容易出错的“体位”中,该方法也可以规避。

12)Object Detection(what+where?)、Localization、Segmentation:对角检测、定位、分割

比如从天上跳伞下来这种奇怪的姿势:

2. CNN基本知识

澳门新葡萄京997755 5

2.1 CNN的卷积流程

人数过多的拥挤场景:

卷积计算过程如下图所示:

澳门新葡萄京997755 6

我们刚才描述的即是卷积。可以把卷积想象为信号处理中的一种奇特乘法。也可将两个矩阵生成点积想象为两个函数。图像就是底层函数,而过滤器就是在其上“卷过”的函数。

还有,两个人重叠的图像。

图像的主要问题在于其高维度,原因是对高维度的处理时间和运算能力成本很高。卷积网络就是为了通过各种方式降低图像的维度而设计的。过滤器步幅即是减少维度的一种方法,另一种方法是降采样。

澳门新葡萄京997755 7

2.2 Activations
maps的个数与Filter的个数一致

注意,右侧站立的女子和她前面在瑜伽垫上的人,完完全全分开了,不会闹出下面这种胳膊腿儿搞错的笑话。

2.3
输入层与Filter、Padding、Stride、参数和输出层的关系

澳门新葡萄京997755 8

1) 参数个数由Filter定义及Filter个数决定,其公式为:

原理

The number of parameters = (FxFxD + 1) * K

澳门新葡萄京997755 9

2)一个Activation Map共享一个Filter及其权重和偏差

这是基于ResNet-18的PPN对多人姿势检测的过程:

3)Activation Map个数与Filter个数相同

a) 输入图像;

2.4 Pooling(池化/降采样)过程

b) 从输入图像中检测部分边界框;

1)  Pooling在每个Activation Map上单独做,在Pooling之后,Activation
Map数量不变

c) 检测出肢体;

Pooling层一般用于降维,将一个kxk的区域内取平均或取最大值,作为这一个小区域内的特征,传递到下一层。传统的Pooling层是不重叠的,使Pooling层重叠可以降低错误率,而且对防止过拟合有一定的效果。

d) 区分图中每个人。

2)Pooling过程描述(Pooling过程不需要参数)

澳门新葡萄京997755 10

2.5 深度革命2015

这篇论文的方法是先将图片分割为较小的网格,使用较小的网络对每一幅网格图片进行单次物体检测范例,之后通过区域提议(region
proposal)框架将姿态检测重定义为目标检测问题。

1)深度革命中遇到的问题:

之后,使用单次CNN直接检测肢体,通过新颖的概率贪婪解析步骤,生成姿势提议。

随着CNN网络的发展,尤其的VGG网络的提出,大家发现网络的层数是一个关键因素,貌似越深的网络效果越好。但是随着网络层数的增加,问题也随之而来。

区域提案部分被定义为边界框检测(Bounding Box
Detections),大小和被检测人身材成比例,并且可以仅使用公共关键点注释进行监督。

(1)第一个问题: vanishing/exploding
gradients(即梯度消失或爆炸):这就导致训练难以收敛。但是随着 normalized
initialization and BN(Batch
Normalization)的提出,解决了梯度消失或爆炸问题。

整个架构由单个完全CNN构成,具有相对较低分辨率的特征图,并使用专为姿势检测性能设计的损耗函数直接进行端到端优化,此架构称为姿态提议网络(Pose
Proposal Network,PPN)
。PPN借鉴了YOLO的优点。

(2)第二个问题:网络越深,训练误差和测试误差越大。在收敛问题解决后,又一个问题暴露出来:随着网络深度的增加,系统精度得到饱和之后,迅速的下滑。让人意外的是这个性能下降不是过拟合导致的。对一个合适深度的模型加入额外的层数导致训练误差变大。如下图所示,可通过Deep
Residual Learning 框架来解决这种因为深度增加而导致准确性下降问题。

传送门

3. 空间定位与检测

论文:

参考信息《基于深度学习的目标检测研究进展》

3.1 计算机视觉任务

Poster:

3.2 传统目标检测方法

传统目标检测流程:

至于code嘛,暂时没有。

1)区域选择(穷举策略:采用滑动窗口,且设置不同的大小,不同的长宽比对图像进行遍历,时间复杂度高)

2)特征提取(SIFT、HOG等;形态多样性、光照变化多样性、背景多样性使得特征鲁棒性差)

澳门新葡萄京997755 11

3)分类器(主要有SVM、Adaboost等)

华为云•普惠AI,让开发充满AI!

传统目标检测的主要问题:

爱上你的代码,爱做 “改变世界”的行动派!

1)基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余

大会将首次发布AI开发框架,从AI模型训练到AI模型部署的全套开发一站式完成!让AI开发触手可及!返回搜狐,查看更多

2)手工设计的特征对于多样性的变化没有很好的鲁棒性

责任编辑:

3.3 基于侯选区域(Region
Proposal)的深度学习目标检测法

3.3.1 R-CNN (CVPR2014,
TPAMI2015)

1)Region Proposal:可以解决滑动窗口的问题

候选区域(Region
Proposal):是预先找出图中目标可能出现的位置。它利用了图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千甚至几百)的情况下保持较高的召回率(Recall)。

常用的Region
Proposal有(详见”What

makes for effective detection proposals?”):

-Selective Search

-Edge Boxes

2)R-CNN:可以解决特征鲁棒性的问题

参考信息

(1) 输入测试图像

(2) 利用selective
search算法在图像中从下到上提取2000个左右的Region
Proposal

(3) 将每个Region
Proposal缩放(warp)成227×227的大小并输入到CNN,将CNN的fc7层的输出作为特征

(4) 将每个Region Proposal提取到的CNN特征输入到SVM进行分类

注:1)对每个Region
Proposal缩放到同一尺度是因为CNN全连接层输入需要保证维度固定。

2)上图少画了一个过程——对于SVM分好类的Region
Proposal做边框回归(bounding-box

regression),边框回归是对region
proposal进行纠正的线性回归算法,为了让region

proposal提取到的窗口跟目标真实窗口更吻合。因为region
proposal提取到的窗口不可能跟人手工标记那么准,如果region

proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region

proposal与Ground
Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。

3)R-CNN缺点:

(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器

(2) 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件

(3) 速度慢: 使用GPU, VGG16模型处理一张图像需要47s。

(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算

(5) SVM和回归是事后操作:在SVM和回归过程中CNN特征没有被学习更新

针对速度慢的这个问题,SPP-NET给出了很好的解决方案。

3.3.2 SPP-NET (ECCV2014,
TPAMI2015)

SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for
Visual Recognition

先看一下R-CNN为什么检测速度这么慢,一张图都需要47s!仔细看下R-CNN框架发现,对图像提完Region

Proposal(2000个左右)之后将每个Proposal当成一张图像进行后续处理(CNN提特征+SVM分类),实际上对一张图像进行了2000

次提特征和分类的过程!这2000个Region

Proposal不都是图像的一部分吗,那么我们完全可以对图像提一次卷积层特征,然后只需要将Region

Proposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个Region

Proposal的卷积层特征输入到全连接层做后续操作。(对于CNN来说,大部分运算都耗在卷积操作上,这样做可以节省大量时间)。

现在的问题是每个Region
Proposal的尺度不一样,直接这样输入全连接层肯定是不行的,因为全连接层输入必须是固定的长度。SPP-NET恰好可以解决这个问题。

由于传统的CNN限制了输入必须固定大小(比如AlexNet是224×224),所以在实际使用中往往需要对原图片进行crop或者warp的操作:

– crop:截取原图片的一个固定大小的patch

– warp:将原图片的ROI缩放到一个固定大小的patch

无论是crop还是warp,都无法保证在不失真的情况下将图片传入到CNN当中:

– crop:物体可能会产生截断,尤其是长宽比大的图片。

– warp:物体被拉伸,失去“原形”,尤其是长宽比大的图片

SPP为的就是解决上述的问题,做到的效果为:不管输入的图片是什么尺度,都能够正确的传入网络。

具体思路为:CNN的卷积层是可以处理任意尺度的输入的,只是在全连接层处有限制尺度——换句话说,如果找到一个方法,在全连接层之前将其输入限制到等长,那么就解决了这个问题。

澳门新葡萄京997755 ,具体方案如下图所示:

如果原图输入是224×224,对于conv5出来后的输出,是13x13x256的,可以理解成有256个这样的filter,每个filter对应一张13×13的activation
map。如果像上图那样将activationmap pooling成4×4 2×2 1×1三张子图,做max
pooling后,出来的特征就是固定长度的(16+4+1)x256那么多的维度了。如果原图的输入不是224×224,出来的特征依然是(16+4+1)x256;直觉地说,可以理解成将原来固定大小为(3×3)窗口的pool5改成了自适应窗口大小,窗口的大小和activation
map成比例,保证了经过pooling后出来的feature的长度是一致的。

使用SPP-NET相比于R-CNN可以大大加快目标检测的速度,但是依然存在着很多问题:

(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练训练边框回归器

(2)
SPP-NET在微调网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)

针对这两个问题,RBG又提出Fast R-CNN, 一个精简而快速的目标检测框架。

3.3.3 Fast R-CNN(ICCV2015)

有了前边R-CNN和SPP-NET的介绍,我们直接看Fast R-CNN的框架图:

与R-CNN框架图对比,可以发现主要有两处不同:一是最后一个卷积层后加了一个ROI
pooling layer,二是损失函数使用了多任务损失函数(multi-task
loss),将边框回归直接加入到CNN网络中训练。

(1) ROI pooling

layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI
pooling

layer只需要下采样到一个7×7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有region

proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。

(2) R-CNN训练过程分为了三个阶段,而Fast
R-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去region
proposal提取阶段)。

(3) Fast
R-CNN在网络微调的过程中,将部分卷积层也进行了微调,取得了更好的检测效果。

性能对比数据:

1)Fast R-CNN优点:

Fast
R-CNN融合了R-CNN和SPP-NET的精髓,并且引入多任务损失函数,使整个网络的训练和测试变得十分方便。在Pascal
VOC2007训练集上训练,在VOC2007测试的结果为66.9%(mAP),如果使用VOC2007+2012训练集训练,在VOC2007上测试结果为70%(数据集的扩充能大幅提高目标检测性能)。使用VGG16每张图像总共需要3s左右。

2)Fast R-CNN 缺点:

Region Proposal的提取使用selective
search,目标检测时间大多消耗在这上面(提Region
Proposal2~3s,而提特征分类只需0.32s),无法满足实时应用,而且并没有实现真正意义上的端到端训练测试(region
proposal使用selective
search先提取处来)。那么有没有可能直接使用CNN直接产生Region
Proposal并对其分类?Faster R-CNN框架就是符合这样需要的目标检测框架。

3.3.4  Faster R-CNN(NIPS2015)

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal
Networks

在Region Proposal +

CNN分类的这种目标检测框架中,Region

Proposal质量好坏直接影响到目标检测任务的精度。如果找到一种方法只提取几百个或者更少的高质量的假选窗口,而且召回率很高,这不但能加快目标检

测速度,还能提高目标检测的性能(假阳例少)。RPN(Region Proposal
Networks)网络应运而生。

1)RPN的核心思想

是使用卷积神经网络直接产生Region
Proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,因为Anchor机制和边框回归可以得到多尺度多长宽比的Region
Proposal。

2)Faster
R-CNN架构

3)RPN架构

RPN采用任意大小的的图像作为输入,并输出一组候选的矩形,每个矩形都有一个对象分数。

RPN被用于训练直接产生候选区域,不需要外部的候选区域。

Anchor是滑动窗口的中心,它与尺度和长宽比相关,默认采3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1),则在每一个滑动位置k=9
anchors。

我们直接看上边的RPN网络结构图(使用了ZF模型),给定输入图像(假设分辨率为600*1000),经过卷积操作得到最后一层的卷积特征图(大小约为40*60)。在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,最后一层卷积层共有256个feature

map,那么这个3*3的区域卷积后可以获得一个256维的特征向量,后边接cls
layer(box-classification layer)和reg layer(box-regression
layer)分别用于分类和边框回归(跟Fast
R-CNN类似,只不过这里的类别只有目标和背景两个类别)。3*3滑窗对应的每个特征区域同时预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的region

proposal,这种映射的机制称为anchor。所以对于这个40*60的feature
map,总共有约20000(40*60*9)个anchor,也就是预测20000个region
proposal。

这样设计的好处是什么呢?虽然现在也是用的滑动窗口策略,但是:滑动窗口操作是在卷积层特征图上进行的,维度较原始图像降低了16*16倍(中间经过了4

次2*2的pooling操作);多尺度采用了9种anchor,对应了三种尺度和三种长宽比,加上后边接了边框回归,所以即便是这9种anchor外的

窗口也能得到一个跟目标比较接近的region proposal。

4)总结

Faster R-CNN将一直以来分离的region
proposal和CNN分类融合到了一起,使用端到端的网络进行目标检测,无论在速度上还是精度上都得到了不错的提高。然而Faster
R-CNN还是达不到实时的目标检测,预先获取Region
Proposal,然后在对每个Proposal分类计算量还是比较大。比较幸运的是YOLO这类目标检测方法的出现让实时性也变的成为可能。

总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster
R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于Region
Proposal的R-CNN系列目标检测方法是当前目标最主要的一个分支。

3.3.5 R-FCN(2016.5)

《R-FCN: Object Detection via Region-based Fully Convolutional
Networks》

顾名思议:全卷积网络,就是全部是卷积层,而没有全连接层(fc)。

R-FCN(基于区域的检测器)的方法是:在整个图像上共享计算,通过移除最后的fc层实现(即删除了所有的子网络)。使用“位置敏感的得分图”来解决了图像分类平移不变性与对象检测平移变化之间的矛盾。

此矛盾为:物体分类要求平移不变性越大越好
(图像中物体的移动不用区分),而物体检测要求有平移变化。所以,ImageNet
分类领先的结果证明尽可能有平移不变性的全卷积结构更受亲睐。另一方面,物体检测任务需要一些平移变化的定位表示。比如,物体的平移应该使网络产生响应,这些响应对描述候选框覆盖真实物体的好坏是有意义的。我们假设图像分类网络的卷积层越深,则该网络对平移越不敏感。

CNN随着网络深度的增加,网络对于位置(Position)的敏感度越来越低,也就是所谓的translation-invariance,但是在Detection的时候,需要对位置信息有很强的的敏感度。

那么ResNet-101的detection是怎么做的?

发表评论

电子邮件地址不会被公开。 必填项已用*标注