前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于深度学习的图像目标检测(下)

基于深度学习的图像目标检测(下)

作者头像
企鹅号小编
发布2018-01-11 10:47:57
1.7K0
发布2018-01-11 10:47:57
举报
文章被收录于专栏:人工智能人工智能

依然要感激如此美丽的封面图片。 在“基于深度学习的图像目标检测(上)”里面, 我们详细介绍了R-CNN走到端到端模型的Faster R-CNN的进化流程。 这里, 我们介绍, 后续如何变得更快、更强!

前言

天下武功唯快不破!

所以在如何让检测更快? 主要有两种思路:

1. 把好的方法改进的更快!

前面我们提到了从R-CNN到Faster R-CNN主要的技术思想就是避免特征计算浪费。 所以要把ConvNet特征计算前移,只做一次计算。 而把区域操作后移。 我们也提到Faster R-CNN在RoI之后还有部分ConvNet的计算。 有没有可能把ROI之上的计算进一步前移?R-FCN(Region-based Fully Convolutional Networks) 基于这个思路,做到了,所以更快, 某种意义上,是Fatest R-CNN。

R-FCN

2. 把快的方法,改进的更好!

前面我们谈到overfeat的效果一般, 但是overfeat基于滑动窗口和回归思想的速度很快。 从效果上来说, overfeat 的效果一般, 对于重叠情况很多不能识别的情况。 如何将基于回归的思想,做到逼近区域推荐的效果?YOLO把分而治之和IoU的思想集成进来了。 而SSD把多尺度Anchor Box的思想集成进来了。

除了快还有什么?当然是做优做强

Faster R-NN有三大主要部件,RPN 做区域推荐, RoI Pooling类似特征Pyramid,改善极大极小重叠, 分类和Box回归的Log 加 Smoothed L1 损失, 针对定位修正。 如何要做优做强?

能否比RPN做的更优?

前面我们提到RPN能够达到Selective Search的效果, 那么假如还要更好, 怎么能够做到?AttractioNet利用了NMS(non-maxima suppression)效果。 AttentionNet利用了弱注意力集中的机制。

能否比RoI Pooling做的更优?

前面我们提到RoI Pooling能够做到和HoG Pyramid和DPM空间限制类似的SPM的效果, 那么加入还要更好, 怎么能够做到? ION(Inside-Outside Net)提出了四方向上下文的思想, FPN提出了特征Pyramid网络。

能否比RoI Pooling做的更强?

前面我们提到RoI Pooling是建立在RoI基础上的, 对应的区域推荐, 如何进一步对齐到像素点? Mask R-CNN提出了RoI Align的思想。 在误差计算中,除了分类, Box回归基础上再加入像素点Mask Branch距离的思想。

那么, 什么是FCN(Fully Convolutional Networks), IoU, NMS, Weak Attention Narrowing, ION, FPN, RoI Align 和 Mask Branch思想?理解了这些, 你对厦门这个图,就不再陌生!

下面, 开启下半场的路程!

R-FCN

前面我们提到, Faster R-CNN打通前后端成为端到端的模型的同时, ConvNet模型也换成了VGG-16的模型。 但是在GoogLeNet和ResNet网络结构上, 全连接FC层就只有一层了, 最后一层,为Softmax分类服务了。

那么, 如果要把GoogLeNet和ResNet应用到Faster R-CNN中去,就面临一个现象,去掉最后一层FC层, 因为那是用来做分类的。 需要换到新的尾部网络, 能够兼容分类和Box回归。

这样, 我们再来看RoI Pooling的使用, 那么RoI Pooling后面的FC层也要换成卷积层。 这样, 卷积层就被RoI Pooling层隔断了。 而且这种隔断使得RoI Pooling后面的ConvNet重复计算了。

一个问题, 能不能直接把后面FCs变成ResNet之后的ConvNet直接丢弃? 不行, 这样的效果会打折扣, 为什么? 我们在Fast R-CNN继承SPPNet的SPM技术, 演绎出RoI Pooling的时候讲了,RoI Pooling只是相当于最细分的区域固定, 那么粗粒度的部分,可以由后续的多层FCs来达到类似的效果。 如果去掉, 就少了金字塔结构了,或者少了深度了。

那么,如何把RoI后面的卷积计算也移到前面去?就是R-FCN解决的问题!一方面要保留空间限制, 另一方面要有一定特征层次。 R-FCN提出了Position-Sensitive RoI Pooling。

Position-Sensitive RoI Pooling的思想, 正式将位置并行起来, 是一种结合了空间信息的的注意力机制。 每个小的子框数据来源一个和特点位置绑定的ConvNet特征层。

一旦和位置绑定了, 那么特征计算, 就从以前的中心点, 变成了一系列从上下左右的不同子框去看的特征图。 那么再把这些组合起来。 即暗含了不同空间信息。类别的说,就是你先上下左右的看这个山峰, 回头把看的拼接起来, 判断山峰有没有认错。 选择好不同位子的特征,再整合起来, 得到在不同位子点确认的特征, 再做Pooling,通过Pooling进行投票。

这样的效果就是, 把特征计算放在前面, 而把位置信息拼接投票放在最后处理。 而不是先通过位置划出特征, 然后把带位置的特征先融合,再做分类和回归。 这里直接进行位置投票。 要注意的PS RoI Pooling和RoI Pooling并不是一个Pooling。

R-FCN优点:

清楚的关联了速度提升和ConvNet特征共享的关系。

通过不同位置为注意力的并行特征计算,再极好的利用Pooling来投票, 取代了RoI Pooling后续计算的计算要求。

速度快, 效果好的均衡下的推荐选择。

R-FCN问题:

依然无法实现视频基本的实时(每秒24帧图像)。

功能上没有涉及到像素级别的实例分割

YOLO

其实, 我们前面提到了Overfeat效果不好, 一个很大原因就是Overfeat没有专门为了提高召回率的区域推荐机制。 而有区域推荐RPN的Faster R-CNN慢的一个重要原因,就是RPN的计算量基本也够计算Overfeat了。 所以它是两个阶段。

Overfeat开启了一个阶段端到端的神话, 但是效果却不好。 如果不使用区域推荐机制的情况下, 仅仅依靠分类和回归的话, 如何进一步提升召回率呢?

如何改善滑动窗口呢?

1. 分而治之判断类别

2. 分而治之, 预测框

3. 合并类别和不同框

这里面一个问题,就是如何选择框, 用到IoU(intersection over union)。 有两个步骤:

先根据类别数预测不同的框, 譬如3个物体(狗,自行车,和车), 那么就会对应到回归3个框。

2. 判断是物体应该对应哪个框呢?这个交集占并集比会决定应该用哪个框。

根据经验, 发现对于VOC2007的数据分析有如下结论:

这样YOLO的损失函数考虑了,1)框回归, 2)是否有物体, 和有哪个物体, 3)另外就是区域最合适的物体。

前面我们提到, Faster R-CNN 已经很快了, 但是做不到实时, 因为视频要求1秒24帧以上。 既然YOLO很快, 那么必然用到视频中去了。 如果再视频中, 还可以进一步优化YOLO到Fast YOLO更快。 更快,就是共享! 对的,共享了类别的概率图Class Prob. Map。通过修正而不是重新学习。 所以更快!

YOLO优点:

1. 典型的回归加分类模型和单一的CNN网络

2. 分治思想很好

3. 实时性很好, 基本上接近1秒24帧的标准。

4. 比Select Search找的框少很多(区域推荐更看重召回率)

YOLO问题:

1. 准确率不高, 不如Faster R-CNN和R-FCN

2. 小物体,不规则物体识别差

3. 定位精度不高

YOLO-v2

如何进一步提高YOLO的准确度呢?记得RPN里面利用了各种框的长宽比先验知识么? Anchor Box。 大概5种左右的框就占据了60%的情况。

这样,把单纯的框预测, 变成带先验的框预测, 就是长度和宽度拥有一定的先验。

其他一系列改进技巧, 使得YOLOv2 要比YOLO好!你会看到下面, 提升最大的是dimension priors。 所以尺度计算一个先验分布的帮助很大!

然后采用了DarkNet19的网络, 速度变得更快。

YOLO9000, 分层的物体标签实现wordtree。

YOLO-v2优点:

1. 引入BN(Batch normalization) (%2 mAP改进)

2. 高分辨率图片(448x448), 改善小物体识别 (4% mAP改进)

3. 更细化的分块(13x13) (1% mAP改进)

4. 引入Anchor框 ( K-means ) (81% 召回 到 88% 召回)

YOLO-9000优点:

5. 分层的结果标签 COCO ImageNet

YOLO-v2问题:

1. 没有实现实例分割。

SSD

和Anchor Box思想和Pyramid思想一致, 引入多尺度和多默认比例。

多尺度CNN网络采用类似GoogLeNet的那种分层输出模式。

所以结合起来,就有了SSD如下网络:

从SSD的网络可以看到, 这个多尺度是并行实现的。

SSD优点:

1. 在YOLO基础上引入多尺度特征映射, 并且分成ConvNet并行实现

2. 引入Anchor Box机制

3. 和YOLO比效果更好, 速度更快

SSD问题:

1. 效果很难突破R-FCN和Faster R-CNN

AttentionNet

主力集中的思想比较简单:

和区域推荐相比有一定优势:

而这个注意力迁移的过程, 可以解读为左上点和右下点相互尽可能靠近的一个过程:

整个过程循环迭代, 直到检测的比较精准为止。

这种注意力移动的过程,也必须和具体目标对应起来, 才能应用到多目标的情况下:

所以说, 不同类别就可以配置成并行的结构框架。

这样的话, 多个目标实例都要拥有一个这样的注意力移动的过程。 而多个实例,就也可以并行实现。

这样的话, 采用两阶段过程, 第一步先找到每个实例对应的一个大框, 第二步, 细化找到准确的框。

AttentionNet优点:

全新的区域查找方式

对比R-CNN,效果有提升

AttentionNet问题:

多实例的方式较为复杂

移动迭代,计算量过大

AttractioNet

(Act)ive Box Proposal Generation via (I)n-(O)ut Localization (Net)work, 如何框优化?

一) 更集中注意!

二) 更细化定位

如何细化定位?

通过对物体分布概率的在横轴和纵轴上的裁剪。

对应的网络结构ARN(Attend & Refine),然后反复迭代, 最后通过NMS矫正。 这个过程是不是和RPN结构加RoI Pooling迭代过程有点类似。 不一样的地方, 每个ARN的框推荐都会被用上,使用NMS进行修正。

而ARN和之前RPN结构不太一样, 它的横轴和纵轴是分别细化,然后通过In-Out 最大似然度来定义的, 也就是前面的那个细化的示意图。

上面解释了ARN, 那么NMS是什么呢?其实就是一个局部求最值的过程!

NMS修正的过程,效果能从多个框中找到一个最符合的框, 有点类似投票。

AttractioNet优点:

实现提出迭代优化区域思想

AttractioNet 要比Selective Search效果更好

基于CNN网络上的区域推荐

AttractioNet问题:

反复迭代会降低运行速度

网络结构复杂, 不如RPN简单

G-CNN

Grid-CNN 吸收了YOLO分而治之的思想。 然后进行区域合并。

但是它不是简单的合并, 而是采用迭代优化的思路。

这个过程和NMS非常不一样, 通过反复的IoU计算, 优化迭代。

为了避免特征的反复计算,它把特征计算作为全局步骤, 而把回归反复优化的部分称为回归部分。

你可以看到回归框的移动过程:

G-CNN优点:

通过迭代优化替换了类似NMS的简单的合并。

效果比Faster R-CNN要好点

通过分而治之, 速度要比Faster R-CNN快点。

G-CNN问题:

速度依然太慢,难以实时应用

ION

Inside-Outside Net是提出基于RNN的上下文的目标检测方法。 对于图像上下左右移动像素, 用RNN来编码, 称为这个方向上的上下文。

这样, 实现了4方向RNN上下文, 用来提取上下文特征。

并且设置了RNN堆栈来强化不同粒度的上下文。

所以R-FCN里面对空间限制进行迭代编码类似, 不过这次不是人为划分框的位置, 而是通过IRNN直接编码。

对比添加上下文和没有上下文的网络设置区别。 对比得到IRNN可以提高2个mAP的提升。

ION优点:

提出RNN上下文的概念

对小物体的识别的效果提升

比R-FCN效果要佳。

ION问题:

RNN计算量增加,速度变慢

FPN

如何将特征金字塔融合成神经网络,为了避免重复计算。

提出FPN网络, 通过卷积和拼接得到特征金字塔网络

有了特征金字塔,有什么好处呢? 对于不同大小的物体可以在不同缩放上进行分割。

这样,在每个层次就可以利用类似的尺度来发现目标物体。

做到各个尺度的兼容:

FPN优点:

多尺度和小物体的融合考虑

速度和准确率的兼容

可以广泛的结合, 提高不同模型的效果

FPN问题:

需要多层计算,增加计算量

Mask R-CNN

稍微回顾一下, 第一次提出RoI, 再R-CNN里面

第一次提出RoI Pooling在Fast R-CNN里面

第一次提出 RPN在Faster R-CNN里面:

到了Mask R-CNN, 做了什么改进呢?提出了RoI Align , 方便后面增加的Mask Branch, 对应到像素点。

什么是mask?

有了Mask之后, 我们能实现实例分割了

那么, RoI Pooling和RoI Align的区别在于哪里呢?如何能够精确的反向找到对应像素点边缘? 这样的话,就要求对Pooling的划分不能按照Pooling的边缘, 而是要按照像素点缩放后的边缘。

而用Pooling的话, 就会有偏差, 这种偏差对应到像素的Mask上就会找不准边界, 之前有人利用RoI Wrapping进行插值矫正。

对于Mask和分类,回归学习, 即可以基于FPN或者就是RoI Align的特征

Mask计算的先驱:

1. MNC(Multi-task Network Cascade)的RoI Wrapping, 插值估算

2. FCIS (Fully Convolutional Instance Segmentation)的positional aware sliding masks

RoI Align要比Segment要好很多!

在加上人体姿势的17个关键点

Mask R-CNN优点:

ROIPool 到 ROIAlign (借鉴了ROI Wrapping)

Mask的预测 (借鉴了MNC和FCIS)

State-of-Art的效果

轻微调整可以做人体姿态识别

Mask R-CNN问题:

速度不够快

像素预测需要大量训练数据

Mask X R-CNN

带Transfer learning的Mask R-CNN。

效果提升:

小结

给一个概要的takeaway

速度优先:SSD算法速度和效果均衡: R-FCN算法效果优先:Faster R-CNN, Mask R-CNN一网多用:Mask R-CNN

对于实践开发

另外matterport公司在github上对Mask R-CNN的开源实现,

https://github.com/matterport/Mask_RCNN 。

参考:

Ross Girshick, “CVPR 2017 Tutorial on Deep Learning for Objects and Scenes”

https://www.robots.ox.ac.uk/~vgg/rg/slides/vgg_rg_16_feb_2017_rfcn.pdf

本文来自企鹅号 - AI2ML人工智能to机器学习媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - AI2ML人工智能to机器学习媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档