更新图片
|
Before Width: | Height: | Size: 290 KiB After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 190 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 809 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -71,7 +71,7 @@
|
||||||
|
|
||||||
R-CNN作为R-CNN系列的第一代算法,其实没有过多的使用“深度学习”思想,而是将“深度学习”和传统的“计算机视觉”的知识相结合。比如R-CNN pipeline中的第二步和第四步其实就属于传统的“计算机视觉”技术。使用selective search提取region proposals,使用SVM实现分类。
|
R-CNN作为R-CNN系列的第一代算法,其实没有过多的使用“深度学习”思想,而是将“深度学习”和传统的“计算机视觉”的知识相结合。比如R-CNN pipeline中的第二步和第四步其实就属于传统的“计算机视觉”技术。使用selective search提取region proposals,使用SVM实现分类。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
原论文中R-CNN pipeline只有4个步骤,光看上图无法深刻理解R-CNN处理机制,下面结合图示补充相应文字
|
原论文中R-CNN pipeline只有4个步骤,光看上图无法深刻理解R-CNN处理机制,下面结合图示补充相应文字
|
||||||
|
|
||||||
|
|
@ -111,7 +111,7 @@ R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测
|
||||||
|
|
||||||
将候选区域直接应用于特征图,并使用ROI池化将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图
|
将候选区域直接应用于特征图,并使用ROI池化将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**RoI Pooling层详解**
|
**RoI Pooling层详解**
|
||||||
|
|
||||||
|
|
@ -123,7 +123,7 @@ RoI Pooling 是Pooling层的一种,而且是针对RoI的Pooling,其特点是
|
||||||
|
|
||||||
RoI是Region of Interest的简写,一般是指图像上的区域框,但这里指的是由Selective Search提取的候选框。
|
RoI是Region of Interest的简写,一般是指图像上的区域框,但这里指的是由Selective Search提取的候选框。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
往往经过rpn后输出的不止一个矩形框,所以这里我们是对多个RoI进行Pooling。
|
往往经过rpn后输出的不止一个矩形框,所以这里我们是对多个RoI进行Pooling。
|
||||||
|
|
||||||
|
|
@ -160,36 +160,24 @@ RoI是Region of Interest的简写,一般是指图像上的区域框,但这
|
||||||
|
|
||||||
### 8.2.3 Faster R-CNN
|
### 8.2.3 Faster R-CNN
|
||||||
|
|
||||||
**标题:《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》**
|
|
||||||
|
|
||||||
**时间:2015**
|
|
||||||
|
|
||||||
**出版源:NIPS 2015**
|
|
||||||
|
|
||||||
**主要链接:**
|
|
||||||
|
|
||||||
- arXiv:http://arxiv.org/abs/1506.01497
|
|
||||||
- github(official, Matlab):https://github.com/ShaoqingRen/faster_rcnn
|
|
||||||
- github(official, Caffe):https://github.com/rbgirshick/py-faster-rcnn
|
|
||||||
|
|
||||||
**Fast R-CNN有哪些创新点?**
|
**Fast R-CNN有哪些创新点?**
|
||||||
|
|
||||||
Fast R-CNN依赖于外部候选区域方法,如选择性搜索。但这些算法在CPU上运行且速度很慢。在测试中,Fast R-CNN需要2.3秒来进行预测,其中2秒用于生成2000个ROI。Faster R-CNN采用与Fast R-CNN相同的设计,只是它用内部深层网络代替了候选区域方法。新的候选区域网络(RPN)在生成ROI时效率更高,并且以每幅图像10毫秒的速度运行。
|
Fast R-CNN依赖于外部候选区域方法,如选择性搜索。但这些算法在CPU上运行且速度很慢。在测试中,Fast R-CNN需要2.3秒来进行预测,其中2秒用于生成2000个ROI。Faster R-CNN采用与Fast R-CNN相同的设计,只是它用内部深层网络代替了候选区域方法。新的候选区域网络(RPN)在生成ROI时效率更高,并且以每幅图像10毫秒的速度运行。
|
||||||

|

|
||||||
|
|
||||||
图8.1.13 Faster R-CNN的流程图
|
图8.1.13 Faster R-CNN的流程图
|
||||||
Faster R-CNN的流程图与Fast R-CNN相同,采用外部候选区域方法代替了内部深层网络。
|
Faster R-CNN的流程图与Fast R-CNN相同,采用外部候选区域方法代替了内部深层网络。
|
||||||

|

|
||||||
|
|
||||||
图8.1.14
|
图8.1.14
|
||||||
**候选区域网络**
|
**候选区域网络**
|
||||||
|
|
||||||
候选区域网络(RPN)将第一个卷积网络的输出特征图作为输入。它在特征图上滑动一个3×3的卷积核,以使用卷积网络(如下所示的ZF网络)构建与类别无关的候选区域。其他深度网络(如VGG或ResNet)可用于更全面的特征提取,但这需要以速度为代价。ZF网络最后会输出256个值,它们将馈送到两个独立的全连接层,以预测边界框和两个objectness分数,这两个objectness分数度量了边界框是否包含目标。我们其实可以使用回归器计算单个objectness分数,但为简洁起见,Faster R-CNN使用只有两个类别的分类器:即带有目标的类别和不带有目标的类别。
|
候选区域网络(RPN)将第一个卷积网络的输出特征图作为输入。它在特征图上滑动一个3×3的卷积核,以使用卷积网络(如下所示的ZF网络)构建与类别无关的候选区域。其他深度网络(如VGG或ResNet)可用于更全面的特征提取,但这需要以速度为代价。ZF网络最后会输出256个值,它们将馈送到两个独立的全连接层,以预测边界框和两个objectness分数,这两个objectness分数度量了边界框是否包含目标。我们其实可以使用回归器计算单个objectness分数,但为简洁起见,Faster R-CNN使用只有两个类别的分类器:即带有目标的类别和不带有目标的类别。
|
||||||

|

|
||||||
|
|
||||||
图8.1.15
|
图8.1.15
|
||||||
对于特征图中的每一个位置,RPN会做k次预测。因此,RPN将输出4×k个坐标和每个位置上2×k个得分。下图展示了8×8的特征图,且有一个3×3的卷积核执行运算,它最后输出8×8×3个ROI(其中k=3)。下图(右)展示了单个位置的3个候选区域。
|
对于特征图中的每一个位置,RPN会做k次预测。因此,RPN将输出4×k个坐标和每个位置上2×k个得分。下图展示了8×8的特征图,且有一个3×3的卷积核执行运算,它最后输出8×8×3个ROI(其中k=3)。下图(右)展示了单个位置的3个候选区域。
|
||||||

|

|
||||||
|
|
||||||
图8.1.16
|
图8.1.16
|
||||||
假设最好涵盖不同的形状和大小。因此,Faster R-CNN不会创建随机边界框。相反,它会预测一些与左上角名为锚点的参考框相关的偏移量(如x, y)。我们限制这些偏移量的值,因此我们的猜想仍然类似于锚点。
|
假设最好涵盖不同的形状和大小。因此,Faster R-CNN不会创建随机边界框。相反,它会预测一些与左上角名为锚点的参考框相关的偏移量(如x, y)。我们限制这些偏移量的值,因此我们的猜想仍然类似于锚点。
|
||||||
|
|
@ -197,11 +185,11 @@ Faster R-CNN的流程图与Fast R-CNN相同,采用外部候选区域方法代
|
||||||
|
|
||||||
图8.1.17
|
图8.1.17
|
||||||
要对每个位置进行k个预测,我们需要以每个位置为中心的k个锚点。每个预测与特定锚点相关联,但不同位置共享相同形状的锚点。
|
要对每个位置进行k个预测,我们需要以每个位置为中心的k个锚点。每个预测与特定锚点相关联,但不同位置共享相同形状的锚点。
|
||||||

|

|
||||||
|
|
||||||
图8.1.18
|
图8.1.18
|
||||||
这些锚点是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的现实目标。这使得我们可以用更好的猜想来指导初始训练,并允许每个预测专门用于特定的形状。该策略使早期训练更加稳定和简便。
|
这些锚点是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的现实目标。这使得我们可以用更好的猜想来指导初始训练,并允许每个预测专门用于特定的形状。该策略使早期训练更加稳定和简便。
|
||||||

|

|
||||||
|
|
||||||
图8.1.19
|
图8.1.19
|
||||||
Faster R-CNN使用更多的锚点。它部署9个锚点框:3个不同宽高比的3个不同大小的锚点框。每一个位置使用9个锚点,每个位置会生成2×9个objectness分数和4×9个坐标。
|
Faster R-CNN使用更多的锚点。它部署9个锚点框:3个不同宽高比的3个不同大小的锚点框。每一个位置使用9个锚点,每个位置会生成2×9个objectness分数和4×9个坐标。
|
||||||
|
|
@ -224,23 +212,23 @@ ResNet-101+R-FCN:83.6% in PASCAL VOC 2007 test datasets
|
||||||
既提高了mAP,又加快了检测速度
|
既提高了mAP,又加快了检测速度
|
||||||
|
|
||||||
假设我们只有一个特征图用来检测右眼。那么我们可以使用它定位人脸吗?应该可以。因为右眼应该在人脸图像的左上角,所以我们可以利用这一点定位整个人脸。如果我们还有其他用来检测左眼、鼻子或嘴巴的特征图,那么我们可以将检测结果结合起来,更好地定位人脸。现在我们回顾一下所有问题。在Faster R-CNN中,检测器使用了多个全连接层进行预测。如果有2000个ROI,那么成本非常高。R-FCN通过减少每个ROI所需的工作量实现加速。上面基于区域的特征图与ROI是独立的,可以在每个ROI之外单独计算。剩下的工作就比较简单了,因此R-FCN的速度比Faster R-CNN快。
|
假设我们只有一个特征图用来检测右眼。那么我们可以使用它定位人脸吗?应该可以。因为右眼应该在人脸图像的左上角,所以我们可以利用这一点定位整个人脸。如果我们还有其他用来检测左眼、鼻子或嘴巴的特征图,那么我们可以将检测结果结合起来,更好地定位人脸。现在我们回顾一下所有问题。在Faster R-CNN中,检测器使用了多个全连接层进行预测。如果有2000个ROI,那么成本非常高。R-FCN通过减少每个ROI所需的工作量实现加速。上面基于区域的特征图与ROI是独立的,可以在每个ROI之外单独计算。剩下的工作就比较简单了,因此R-FCN的速度比Faster R-CNN快。
|
||||||

|

|
||||||
|
|
||||||
图8.2.1 人脸检测
|
图8.2.1 人脸检测
|
||||||
现在我们来看一下5×5的特征图M,内部包含一个蓝色方块。我们将方块平均分成3×3个区域。现在,我们在M中创建了一个新的特征图,来检测方块的左上角(TL)。这个新的特征图如下图(右)所示。只有黄色的网格单元[2,2]处于激活状态。在左侧创建一个新的特征图,用于检测目标的左上角。
|
现在我们来看一下5×5的特征图M,内部包含一个蓝色方块。我们将方块平均分成3×3个区域。现在,我们在M中创建了一个新的特征图,来检测方块的左上角(TL)。这个新的特征图如下图(右)所示。只有黄色的网格单元[2,2]处于激活状态。在左侧创建一个新的特征图,用于检测目标的左上角。
|
||||||

|

|
||||||
|
|
||||||
图8.2.2 检测示例
|
图8.2.2 检测示例
|
||||||
我们将方块分成9个部分,由此创建了9个特征图,每个用来检测对应的目标区域。这些特征图叫做位置敏感得分图(position-sensitive score map),因为每个图检测目标的子区域(计算其得分)。
|
我们将方块分成9个部分,由此创建了9个特征图,每个用来检测对应的目标区域。这些特征图叫做位置敏感得分图(position-sensitive score map),因为每个图检测目标的子区域(计算其得分)。
|
||||||

|

|
||||||
|
|
||||||
图8.2.3生成9个得分图
|
图8.2.3生成9个得分图
|
||||||
下图中红色虚线矩形是建议的ROI。我们将其分割成3×3个区域,并询问每个区域包含目标对应部分的概率是多少。例如,左上角ROI区域包含左眼的概率。我们将结果存储成3×3 vote数组,如下图(右)所示。例如,vote_array[0][0]包含左上角区域是否包含目标对应部分的得分。
|
下图中红色虚线矩形是建议的ROI。我们将其分割成3×3个区域,并询问每个区域包含目标对应部分的概率是多少。例如,左上角ROI区域包含左眼的概率。我们将结果存储成3×3 vote数组,如下图(右)所示。例如,vote_array[0][0]包含左上角区域是否包含目标对应部分的得分。
|
||||||

|

|
||||||
|
|
||||||
图8.2.4
|
图8.2.4
|
||||||
将ROI应用到特征图上,输出一个3x3数组。将得分图和ROI映射到vote数组的过程叫做位置敏感ROI池化(position-sensitive ROI-pool)。该过程与前面讨论过的ROI池化非常接近。
|
将ROI应用到特征图上,输出一个3x3数组。将得分图和ROI映射到vote数组的过程叫做位置敏感ROI池化(position-sensitive ROI-pool)。该过程与前面讨论过的ROI池化非常接近。
|
||||||

|

|
||||||
|
|
||||||
图8.2.5
|
图8.2.5
|
||||||
将ROI的一部分叠加到对应的得分图上,计算V[i][j]。在计算出位置敏感ROI池化的所有值后,类别得分是其所有元素得分的平均值。
|
将ROI的一部分叠加到对应的得分图上,计算V[i][j]。在计算出位置敏感ROI池化的所有值后,类别得分是其所有元素得分的平均值。
|
||||||
|
|
|
||||||