编者按:环信开源国内首本免费深度学习理论和实战专著《深度学习理论与实战:提高篇 》,内容涵盖听觉,视觉,语言和强化学习,七百多页详尽的理论和代码分析。本文节选自《深度学习理论与实战:提高篇 》一书,原文链接http://fancyerii.github.io/2019/03/14/dl-book/ 。作者李理,环信人工智能研发中心vp,有十多年自然语言处理和人工智能研发经验,主持研发过多款智能硬件的问答和对话系统,负责环信中文语义分析开放平台和环信智能机器人的设计与研发。
目录
R-CNN
Fast R-CNN
Faster R-CNN
Mask R-CNN
前面逐个的介绍了Fast R-CNN、Faster R-CNN和Mask R-CNN这一系列算法,这里再通过的图片总结一下它们的演进过程。这些图片来自这篇文章。
R-CNN
首先是R-CNN,如下图所示。它的输入是一种图片,通过Region Proposal之后得到3个候选区域。由于区域大小不同,所以需要缩放(wrap)成固定的大小,然后使用CNN来进行分类和Bounding box回归。注意原始论文只用CNN来提取特征,用SVM来分类,用另外一个单独的模型来回归,但这个图是改进的版本,直接用神经网络来进行分类和回归。它预测的时候每一个候选区域都需要用CNN来提取特征,速度慢。
图:R-CNN Family之R-CNN
网络流图如下图所示,这里的分类器和回归也是原始论文的SVM和单独的回归模型。
图:R-CNN Family之R-CNN
Fast R-CNN
接下来是Fast R-CNN,如下图所示。它不需要对每个Region Proposal都进行特征提取,而是对整个图片进行一次特征提取,然后每个RoI找到对于的特征区域。由于每个RoI大小不一样,因此得到的特征区域也是不一样,所有需要通过一个RoI Pool层把它们变成大小一样,之后就没有什么不同了。
图:R-CNN Family之Fast R-CNN
网络流图如下图所示:
图:R-CNN Family之Fast R-CNN
RoI Pooling如下图所示,注意这里和前面介绍的稍有出入,前面哪个狗狗图片在RoI Pooling时20/7=2了,这里5x7的的要Pooling成2x2。如果按照之前的方法,应该每个格子都是2x3的,然后第5行和第7列被忽略。这里的方法稍微不同,它切分的4个格子大小都不同,分别是2x3、2x4、3x3和3x4的,这样的好处是利用了所有的信息。这在检测上会有帮助,但前者的实现上更简单一点。
图:R-CNN Family之RoI Pooling
Mask R-CNN
Mask R-CNN如下图所示。它把RoI Pooling变成了RoI Align,然后输出多了一个分支用来预测每个像素是否属于目标物体的Mask。
图:Mask R-CNN
它的网络流图为:
图:Mask R-CNN
得到候选区域后用于分类、回归和mask的网络叫作head(与之对应的之前的网络叫backbone),论文使用了两种head,如下图所示。
图:Mask R-CNN的两种head网络结构