fix some tiny error about object detection methods

This commit is contained in:
caowenlong 2019-04-25 01:02:51 +08:00
parent 64eca3c0fc
commit 13fc5c6866
1 changed files with 20 additions and 19 deletions

View File

@ -109,7 +109,7 @@ R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测
Fast R-CNN是基于R-CNN和SPPnets进行的改进。SPPnets其创新点在于计算整幅图像的the shared feature map然后根据object proposal在shared feature map上映射到对应的feature vector就是不用重复计算feature map了。当然SPPnets也有缺点和R-CNN一样训练是多阶段multiple-stage pipeline速度还是不够"快",特征还要保存到本地磁盘中。
将候选区域直接应用于特征图并使用ROI池化将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图
将候选区域直接应用于特征图并使用RoI池化将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图
![](./img/ch8/8.2.2-1.png)
@ -125,7 +125,7 @@ RoI是Region of Interest的简写一般是指图像上的区域框但这
![](./img/ch8/8.2.2-2.png)
往往经过rpn后输出的不止一个矩形框所以这里我们是对多个RoI进行Pooling。
往往经过RPN后输出的不止一个矩形框所以这里我们是对多个RoI进行Pooling。
**RoI Pooling的输入**
@ -148,7 +148,7 @@ RoI是Region of Interest的简写一般是指图像上的区域框但这
3. 对每个sections进行max pooling操作
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是输出的feature maps的大小不取决于ROI和卷积feature maps大小。RoI Pooling 最大的好处就在于极大地提高了处理速度。
**RoI Pooling的输出**
@ -160,7 +160,7 @@ RoI是Region of Interest的简写一般是指图像上的区域框但这
### 8.2.3 Faster R-CNN
**Fast R-CNN有哪些创新点**
**Faster R-CNN有哪些创新点**
Fast R-CNN依赖于外部候选区域方法如选择性搜索。但这些算法在CPU上运行且速度很慢。在测试中Fast R-CNN需要2.3秒来进行预测其中2秒用于生成2000个ROI。Faster R-CNN采用与Fast R-CNN相同的设计只是它用内部深层网络代替了候选区域方法。新的候选区域网络RPN在生成ROI时效率更高并且以每幅图像10毫秒的速度运行。
![](./img/ch8/8.2.3-1.png)
@ -192,7 +192,7 @@ Faster R-CNN的流程图与Fast R-CNN相同采用外部候选区域方法代
![](./img/ch8/8.2.3-7.png)
图8.1.19
Faster R-CNN使用更多的锚点。它部署9个锚点框3个不同宽高比的3个不同大小的锚点框。每一个位置使用9个锚点每个位置会生成2×9个objectness分数和4×9个坐标。
Faster R-CNN使用更多的锚点。它部署9个锚点框3个不同宽高比的3个不同大小的锚点Anchor框。每一个位置使用9个锚点每个位置会生成2×9个objectness分数和4×9个坐标。
### 8.2.4 R-FCN
@ -259,7 +259,7 @@ ResNet-101+R-FCN83.6% in PASCAL VOC 2007 test datasets
2. 如何设计通用的特征表示来解决物体检测中的多个子问题?如 object proposal, box localization, instance segmentation.
3. 如何高效计算多尺度的特征表示?
FPN网络直接在Faster R-CNN单网络上做修改每个分辨率的 feature map 引入后一分辨率缩放两倍的 feature map 做 element-wise 相加的操作。通过这样的连接,每一层预测所用的 feature map 都融合了不同分辨率、不同语义强度的特征,融合的不同分辨率的 feature map 分别做对应分辨率大小的物体检测。这样保证了每一层都有合适的分辨率以及强语义rich semantic特征。同时由于此方法只是在原网络基础上加上了额外的跨层连接在实际应用中几乎不增加额外的时间和计算量。作者接下来实验了将 FPN 应用在 Faster RCNN 上的性能,在 COCO 上达到了 state-of-the-art 的单模型精度。在RPN上FPN增加了8.0个点的平均召回率average recallAR在后面目标检测上对于COCO数据集FPN增加了2.3个点的平均精确率average precisionAP对于VOC数据集FPN增加了3.8个点的AP。
FPN网络直接在Faster R-CNN单网络上做修改每个分辨率的 feature map 引入后一分辨率缩放两倍的 feature map 做 element-wise 相加的操作。通过这样的连接,每一层预测所用的 feature map 都融合了不同分辨率、不同语义强度的特征,融合的不同分辨率的 feature map 分别做对应分辨率大小的物体检测。这样保证了每一层都有合适的分辨率以及强语义rich semantic特征。同时由于此方法只是在原网络基础上加上了额外的跨层连接在实际应用中几乎不增加额外的时间和计算量。作者接下来实验了将 FPN 应用在 Faster RCNN 上的性能,在 COCO 上达到了 state-of-the-art 的单模型精度。在RPN上FPN增加了8.0个点的平均召回率average recallAR在后面目标检测上对于COCO数据集FPN增加了2.3个点的平均精确率average precisionAP对于VOC数据集FPN增加了3.8个点的AP。
@ -330,11 +330,11 @@ ROI Align 是在Mask-RCNN中提出的一种区域特征聚集方式很好地
在常见的两级检测框架比如Fast-RCNNFaster-RCNNRFCNRoI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图以便进行后续的分类和包围框回归操作。由于预选框的位置通常是由模型回归得到的一般来讲是浮点数而池化后的特征图要求尺寸固定。故RoI Pooling这一操作存在两次量化的过程。
- 将候选框边界量化为整数点坐标值。
- 将量化后的边界区域平均分割成 k x k 个单元(bin),对每一个单元的边界进行量化。
- 将量化后的边界区域平均分割成 $k\times k$ 个单元(bin),对每一个单元的边界进行量化。
事实上经过上述两次量化此时的候选框已经和最开始回归出来的位置有一定的偏差这个偏差会影响检测或者分割的准确度。在论文里作者把它总结为“不匹配问题misalignment
事实上经过上述两次量化此时的候选框已经和最开始回归出来的位置有一定的偏差这个偏差会影响检测或者分割的准确度。在论文里作者把它总结为“不匹配问题misalignment
下面我们用直观的例子具体分析一下上述区域不匹配问题。如下图所示这是一个Faster-RCNN检测框架。输入一张800x800的图片图片上有一个665x665的包围框(框着一只狗)。图片经过主干网络提取特征后特征图缩放步长stride为32。因此图像和包围框的边长都是输入时的1/32。800正好可以被32整除变为25。但665除以32以后得到20.78带有小数于是RoI Pooling 直接将它量化成20。接下来需要把框内的特征池化7*7的大小因此将上述包围框平均分割成7x7个矩形区域。显然每个矩形区域的边长为2.86又含有小数。于是ROI Pooling 再次把它量化到2。经过这两次量化候选区域已经出现了较明显的偏差如图中绿色部分所示。更重要的是该层特征图上0.1个像素的偏差缩放到原图就是3.2个像素。那么0.8的偏差在原图上就是接近30个像素点的差别这一差别不容小觑。
下面我们用直观的例子具体分析一下上述区域不匹配问题。如下图所示这是一个Faster-RCNN检测框架。输入一张$800\times 800$的图片,图片上有一个$665\times 665$的包围框(框着一只狗)。图片经过主干网络提取特征后特征图缩放步长stride为32。因此图像和包围框的边长都是输入时的1/32。800正好可以被32整除变为25。但665除以32以后得到20.78带有小数于是RoI Pooling 直接将它量化成20。接下来需要把框内的特征池化$7\times 7$的大小,因此将上述包围框平均分割成$7\times 7$个矩形区域。显然每个矩形区域的边长为2.86又含有小数。于是ROI Pooling 再次把它量化到2。经过这两次量化候选区域已经出现了较明显的偏差如图中绿色部分所示。更重要的是该层特征图上0.1个像素的偏差缩放到原图就是3.2个像素。那么0.8的偏差在原图上就是接近30个像素点的差别这一差别不容小觑。
![](img/ch8/Mask R-CNN-02.png)
@ -346,7 +346,7 @@ RoI Align的思路很简单取消量化操作使用双线性内插的方
1. 遍历每一个候选区域,保持浮点数边界不做量化。
2. 将候选区域分割成kxk个单元,每个单元的边界也不做量化。
2. 将候选区域分割成$k\times k$个单元,每个单元的边界也不做量化。
3. 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。
@ -388,7 +388,7 @@ SSD在训练的时候只需要输入图像和图像中每个目标对应的groun
**3. 怎样得到预测的检测结果?**
最后分别在所选的特征层上使用3x3卷积核预测不同default boxes所属的类别分数及其预测的边界框location。由于对于每个box需要预测该box属于每个类别的置信度假设有c类包括背景和该box对应的预测边界框的location(包含4个值即该box的中心坐标和宽高)则每个box需要预测c+4个值。所以对于某个所选的特征层该层的卷积核个数为c+4x该层的default box个数.最后将每个层得到的卷积结果进行拼接。对于得到的每个预测框取其类别置信度的最大值若该最大值大于置信度阈值则最大值所对应的类别即为该预测框的类别否则过滤掉此框。对于保留的预测框根据它对应的先验框进行解码得到其真实的位置参数这里还需注意要防止预测框位置超出图片然后根据所属类别置信度进行降序排列取top-k个预测框最后进行NMS过滤掉重叠度较大的预测框最后得到检测结果。
最后分别在所选的特征层上使用3x3卷积核预测不同default boxes所属的类别分数及其预测的边界框location。由于对于每个box需要预测该box属于每个类别的置信度假设有c类包括背景例如20class的数据集合c=21和该box对应的预测边界框的location(包含4个值即该box的中心坐标和宽高)则每个box需要预测c+4个值。所以对于某个所选的特征层该层的卷积核个数为c+4x 该层的default box个数.最后将每个层得到的卷积结果进行拼接。对于得到的每个预测框取其类别置信度的最大值若该最大值大于置信度阈值则最大值所对应的类别即为该预测框的类别否则过滤掉此框。对于保留的预测框根据它对应的先验框进行解码得到其真实的位置参数这里还需注意要防止预测框位置超出图片然后根据所属类别置信度进行降序排列取top-k个预测框最后进行NMS过滤掉重叠度较大的预测框最后得到检测结果。
SSD优势是速度比较快整个过程只需要一步首先在图片不同位置按照不同尺度和宽高比进行密集抽样然后利用CNN提取特征后直接进行分类与回归所以速度比较快但均匀密集采样会造成正负样本不均衡的情况使得训练比较困难导致模型准确度有所降低。另外SSD对小目标的检测没有大目标好因为随着网络的加深在高层特征图中小目标的信息丢失掉了适当增大输入图片的尺寸可以提升小目标的检测效果。
@ -438,7 +438,7 @@ YOLO创造性的将物体检测任务直接当作回归问题regression probl
**1. 网络结构是怎样的?**
YOLO网络借鉴了GoogleNet分类网络结构不同的是YOLO使用1x1卷积层和3x3卷积层替代inception module。如下图所示整个检测网络包括24个卷积层和2个全连接层。其中卷积层用来提取图像特征全连接层用来预测图像位置和类别概率值。
YOLO网络借鉴了GoogLeNet分类网络结构不同的是YOLO使用1x1卷积层和3x3卷积层替代inception module。如下图所示整个检测网络包括24个卷积层和2个全连接层。其中卷积层用来提取图像特征全连接层用来预测图像位置和类别概率值。
![](./img/ch8/YOLOv1-02.png)
@ -483,7 +483,7 @@ YOLO最后采用非极大值抑制NMS算法从输出结果中提取最有
3.返回步骤2继续处理下一类对象。
YOLO将识别与定位合二为一结构简便检测速度快更快的Fast YOLO可以达到155FPS。相对于RNN系列, YOLO的整个流程中都能看到整张图像的信息因此它在检测物体时能很好的利用上下文信息从而不容易在背景上预测出错误的物体信息。同时YOLO可以学习到高度泛化的特征能将一个域上学到的特征迁移到不同但相关的域上如在自然图像上做训练的YOLO在艺术图片上可以得到较好的测试结果。
YOLO将识别与定位合二为一结构简便检测速度快更快的Fast YOLO可以达到155FPS。相对于R-CNN系列, YOLO的整个流程中都能看到整张图像的信息因此它在检测物体时能很好的利用上下文信息从而不容易在背景上预测出错误的物体信息。同时YOLO可以学习到高度泛化的特征能将一个域上学到的特征迁移到不同但相关的域上如在自然图像上做训练的YOLO在艺术图片上可以得到较好的测试结果。
由于YOLO网格设置比较稀疏且每个网格只预测2个边界框其总体预测精度不高略低于Fast RCNN。其对小物体的检测效果较差尤其是对密集的小物体表现比较差。
@ -545,10 +545,10 @@ YOLOv2借鉴了很多其它目标检测方法的一些技巧如Faster R-CNN
**YOLOv2的训练**
YOLOv2的训练主要包括三个阶段。
第一阶段先在ImageNet分类数据集上预训练Darknet-19此时模型输入为224*224,共训练160个epochs。
第二阶段:将网络的输入调整为448*448,继续在ImageNet数据集上finetune分类模型训练10个epochs此时分类模型的top-1准确度为76.5%而top-5准确度为93.3%。
第一阶段先在ImageNet分类数据集上预训练Darknet-19此时模型输入为$224\times 224$,共训练160个epochs。
第二阶段:将网络的输入调整为$448\times 448$,继续在ImageNet数据集上finetune分类模型训练10个epochs此时分类模型的top-1准确度为76.5%而top-5准确度为93.3%。
第三个阶段修改Darknet-19分类模型为检测模型并在检测数据集上继续finetune网络。
网络修改包括网路结构可视化移除最后一个卷积层、global avgpooling层以及softmax层并且新增了三个3*3*2014卷积层同时增加了一个passthrough层最后使用1*1卷积层输出预测结果。
网络修改包括网路结构可视化移除最后一个卷积层、global avgpooling层以及softmax层并且新增了三个$3\times 3 \times 2014$卷积层同时增加了一个passthrough层最后使用$1\times 1$卷积层输出预测结果。
### 8.3.5 YOLO9000
@ -814,8 +814,9 @@ TUM不同于FPN和RetinaNetTUM采用简化的U形结构如上图c
**SFAM**
SFAM旨在将由TUM生成的多级多尺度特征聚合成多级特征金字塔如下图所示。SFAM的第一阶段是沿着信道维度将等效尺度的特征连接在一起。聚合特征金字塔可以表示为X = [X1,X2,...,Xi]其中Xi = Concat(x1i,x2i,...,xLi
) ∈ RWi×Hi×C指的是尺度第i个最大的特征。这里聚合金字塔中的每个比例都包含来自多级深度的特征。但是简单的连接操作不太适合。在第二阶段引入了通道注意模块以促使特征集中在最有益的通道。在SE区块之后使用全局平均池化来在挤压步骤中生成通道统计z∈RC。
SFAM旨在将由TUM生成的多级多尺度特征聚合成多级特征金字塔如下图所示。SFAM的第一阶段是沿着信道维度将等效尺度的特征连接在一起。聚合特征金字塔可以表示为$X = [X_1,X_2,...,X_i,...,X_L]$,其中
$$X_i = Concat(X_{1i}, X_{2i}, ...., X_{Li}) \in R^{W_i \times H_i \times C}$$
指的是尺度第i个最大的特征。这里聚合金字塔中的每个比例都包含来自多级深度的特征。但是简单的连接操作不太适合。在第二阶段引入了通道注意模块以促使特征集中在最有益的通道。在SE区块之后使用全局平均池化来在挤压步骤中生成通道统计z∈RC。
![](img/ch8/M2Det-03.png)
@ -859,7 +860,7 @@ SFAM旨在将由TUM生成的多级多尺度特征聚合成多级特征金字塔
1缩放图片大小。不过也可以通过缩放滑动窗的方式基于深度学习的滑动窗人脸检测方式效率会很慢存在多次重复卷积所以要采用全卷积神经网络FCN用FCN将不能用滑动窗的方法。
2通过anchor box的方法如图8.3所示不要和图8.2混淆这里是通过特征图预测原图的anchorbox区域具体在facebox中有描述
2通过anchor box的方法如图8.3所示不要和图8.2混淆这里是通过特征图预测原图的anchor box区域具体在facebox中有描述
![](./img/ch8/8.4.3.png)