Update 第八章_目标检测.md

This commit is contained in:
袁笛 2018-10-31 20:00:21 +08:00 committed by GitHub
parent 3ac4bdfb64
commit 32ad5fe867
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 38 additions and 38 deletions

View File

@ -60,29 +60,29 @@
自从AlexNet获得ILSVRC 2012挑战赛的冠军之后采用卷积神经网络Convolutional Neural Network, CNN进行分类任务就逐渐成为了主流研究方向。最常见的一种采用暴力方法进行目标检测的思路是在图片上从左向右、从上至下通过滑动窗口利用分类思想进行目标识别。为了能够在不同的观察距离检测不同的目标类型通常使用不同大小和宽高比的滑动窗口。 自从AlexNet获得ILSVRC 2012挑战赛的冠军之后采用卷积神经网络Convolutional Neural Network, CNN进行分类任务就逐渐成为了主流研究方向。最常见的一种采用暴力方法进行目标检测的思路是在图片上从左向右、从上至下通过滑动窗口利用分类思想进行目标识别。为了能够在不同的观察距离检测不同的目标类型通常使用不同大小和宽高比的滑动窗口。
<center><img src="../img/8.1.1.png"></center> <center><img src="./img/ch8/8.1.1.png"></center>
图8.1.1 滑动窗口示意图(从右向左,从上至下) 图8.1.1 滑动窗口示意图(从右向左,从上至下)
采用滑动窗口从图像中剪切相应的图像块。由于很多分类器只能采用固定大小的图像块,因此这些图像块大多是原始图像块经过变形转换得到的。尽管如此,这样的操作并不影响分类的准确率,因为分类器可以处理变形后的图像块。 采用滑动窗口从图像中剪切相应的图像块。由于很多分类器只能采用固定大小的图像块,因此这些图像块大多是原始图像块经过变形转换得到的。尽管如此,这样的操作并不影响分类的准确率,因为分类器可以处理变形后的图像块。
<center><img src="../img/8.1.2.png"></center> <center><img src="./img/ch8/8.1.2.png"></center>
图8.1.2 将图像转换成固定尺寸的图像 图8.1.2 将图像转换成固定尺寸的图像
经过变形后的图像块被输入到CNN分类器中用来提取出4096维特征。之后使用SVM分类器识别该图像的类别并且采用线性回归输出该图像的边界框。 经过变形后的图像块被输入到CNN分类器中用来提取出4096维特征。之后使用SVM分类器识别该图像的类别并且采用线性回归输出该图像的边界框。
<center><img src="../img/8.1.3.png"></center> <center><img src="./img/ch8/8.1.3.png"></center>
图8.1.3 滑动窗口检测器的系统工作流程图 图8.1.3 滑动窗口检测器的系统工作流程图
### 8.1.2 选择性搜索 ### 8.1.2 选择性搜索
除了暴力检测方法之外选择性搜索也是一种常见的目标检测方法。采用候选区域方法region proposal method创建目标检测的感兴趣区域ROI。在选择性搜索selective searchSS假设现在图像上有n个预分割的区域,表示为R={R1, R2, ..., Rn},计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时候图像上还剩下n-1个区域;重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,知道最后所有的区域都合并称为了同一个区域(即此过程进行了n-1次,区域总数目最后变成了1).算法的流程图如下图所示: 除了暴力检测方法之外选择性搜索也是一种常见的目标检测方法。采用候选区域方法region proposal method创建目标检测的感兴趣区域ROI。在选择性搜索selective searchSS假设现在图像上有n个预分割的区域,表示为R={R1, R2, ..., Rn},计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时候图像上还剩下n-1个区域;重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,知道最后所有的区域都合并称为了同一个区域(即此过程进行了n-1次,区域总数目最后变成了1).算法的流程图如下图所示:
<center><img src="../img/al8.1.png"></center> <center><img src="./img/ch8/al8.1.png"></center>
下图第一行展示了如何使区域增长第二行中的蓝色矩形代表合并过程中所有可能的ROI。 下图第一行展示了如何使区域增长第二行中的蓝色矩形代表合并过程中所有可能的ROI。
<center><img src="../img/8.1.4.png"></center> <center><img src="./img/ch8g/8.1.4.png"></center>
图8.1.4 选择性搜索 图8.1.4 选择性搜索
### 8.1.3 R-CNN系列 ### 8.1.3 R-CNN系列
@ -90,11 +90,11 @@
#### 8.1.3.1 R-CNN #### 8.1.3.1 R-CNN
从2014年CNN就成为用于目标检测的极热门的工具CNN可以很好地帮我们完成图像识别的任务我们只需要添加一些额外的功能来完成目标的定位任务即可。使用一个高容量的卷积神经网络将region proposals自底而上的传播用来定位目标是很好的选择如果有标签的训练数据比较少可以使用训练好的参数作为辅助进行fine-tuning能够得到非常好的定位效果提升。R-CNN利用候选区域方法创建了约2000个ROI。这些区域被转换为固定大小的图像并分别馈送到卷积神经网络中。该网络结构后面会跟有几个全连接层以实现目标分类并提炼出目标的边界框。 从2014年CNN就成为用于目标检测的极热门的工具CNN可以很好地帮我们完成图像识别的任务我们只需要添加一些额外的功能来完成目标的定位任务即可。使用一个高容量的卷积神经网络将region proposals自底而上的传播用来定位目标是很好的选择如果有标签的训练数据比较少可以使用训练好的参数作为辅助进行fine-tuning能够得到非常好的定位效果提升。R-CNN利用候选区域方法创建了约2000个ROI。这些区域被转换为固定大小的图像并分别馈送到卷积神经网络中。该网络结构后面会跟有几个全连接层以实现目标分类并提炼出目标的边界框。
<center><img src="../img/8.1.5.png"></center> <center><img src="./img/ch8/8.1.5.png"></center>
图8.1.5 使用候选区域、CNN、仿射层来定位目标 图8.1.5 使用候选区域、CNN、仿射层来定位目标
使用RCNN进行目标检测主要分三个部分1产生不依赖与特定类别的region proposals这些region proposals定义了一个整个检测器可以获得的候选目标2一个大的卷积神经网络对每个region产生一个固定长度的特征向量3一系列特定类别的线性SVM分类器。以下是R-CNN整个系统的流程图 使用RCNN进行目标检测主要分三个部分1产生不依赖与特定类别的region proposals这些region proposals定义了一个整个检测器可以获得的候选目标2一个大的卷积神经网络对每个region产生一个固定长度的特征向量3一系列特定类别的线性SVM分类器。以下是R-CNN整个系统的流程图
<center><img src="../img/8.1.6.png"></center> <center><img src="./img/ch8/8.1.6.png"></center>
图8.1.6 采用R-CNN进行目标检测的流程图 图8.1.6 采用R-CNN进行目标检测的流程图
通过使用更少且更高质量的ROI采用R-CNN能够比采用滑动窗口方法更快速、更准确地进行目标检测。 通过使用更少且更高质量的ROI采用R-CNN能够比采用滑动窗口方法更快速、更准确地进行目标检测。
@ -102,25 +102,25 @@
##### 边界框回归器 ##### 边界框回归器
采用候选区域方法进行目标检测具有非常高的计算复杂度。为了加速这个过程通常会使用计算量较少的候选区域选择方法构建ROI并在后面使用线性回归器使用全连接层进一步提炼边界框。 采用候选区域方法进行目标检测具有非常高的计算复杂度。为了加速这个过程通常会使用计算量较少的候选区域选择方法构建ROI并在后面使用线性回归器使用全连接层进一步提炼边界框。
<center><img src="../img/8.1.7.png"></center> <center><img src="./img/ch8/8.1.7.png"></center>
图8.1.7 使用回归方法将蓝色的原始边界框提炼为红色 图8.1.7 使用回归方法将蓝色的原始边界框提炼为红色
#### 8.1.3.2 Fast R-CNN #### 8.1.3.2 Fast R-CNN
R-CNN需要非常多的候选区域以提升目标检测的准确度但其实有很多区域是彼此重叠的因此使得R-CNN的训练和推断速度非常慢。如果我们有2000个候选区域且每个候选区域都需要独立地馈送到CNN中那么对于不同的ROI我们需要重复提取2000次特征。此外CNN中的特征图以一种密集的方式表征空间特征是否能直接使用特征图代替原图来检测目标。 R-CNN需要非常多的候选区域以提升目标检测的准确度但其实有很多区域是彼此重叠的因此使得R-CNN的训练和推断速度非常慢。如果我们有2000个候选区域且每个候选区域都需要独立地馈送到CNN中那么对于不同的ROI我们需要重复提取2000次特征。此外CNN中的特征图以一种密集的方式表征空间特征是否能直接使用特征图代替原图来检测目标。
<center><img src="../img/8.1.8.png"></center> <center><img src="./img/ch8/8.1.8.png"></center>
图8.1.8 图像特征图 图8.1.8 图像特征图
<center><img src="../img/8.1.9.png"></center> <center><img src="./img/ch8/8.1.9.png"></center>
图8.1.9 直接利用特征图计算ROI 图8.1.9 直接利用特征图计算ROI
Fast R-CNN使用特征提取器CNN提取整个图像的特征而不是从头开始对每个图像块提取多次。可以将创建候选区域的方法直接应用到提取到的特征图上。例如Fast R-CNN选择VGG16中的卷积层Conv5来生成ROI这些关注区域随后会结合对应的特征图以裁剪为特征图块并用于目标检测任务中。我们使用ROI池化将特征图块转换为固定的大小并馈送到全连接层进行分类和定位。因为Fast-RCNN不会重复提取特征因此它能显著地减少处理时间。 Fast R-CNN使用特征提取器CNN提取整个图像的特征而不是从头开始对每个图像块提取多次。可以将创建候选区域的方法直接应用到提取到的特征图上。例如Fast R-CNN选择VGG16中的卷积层Conv5来生成ROI这些关注区域随后会结合对应的特征图以裁剪为特征图块并用于目标检测任务中。我们使用ROI池化将特征图块转换为固定的大小并馈送到全连接层进行分类和定位。因为Fast-RCNN不会重复提取特征因此它能显著地减少处理时间。
<center><img src="../img/8.1.10.png"></center> <center><img src="./img/ch8/8.1.10.png"></center>
图8.1.10 图8.1.10
将候选区域直接应用于特征图并使用ROI池化将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图 将候选区域直接应用于特征图并使用ROI池化将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图
<center><img src="../img/8.1.11.png"></center> <center><img src="./img/ch8/8.1.11.png"></center>
图8.1.11 Fast R-CNN流程图 图8.1.11 Fast R-CNN流程图
Fast R-CNN最重要的一点就是包含特征提取器、分类器和边界框回归器在内的整个网络能通过多任务损失函数进行端到端的训练这种多任务损失即结合了分类损失和定位损失的方法大大提升了模型准确度。 Fast R-CNN最重要的一点就是包含特征提取器、分类器和边界框回归器在内的整个网络能通过多任务损失函数进行端到端的训练这种多任务损失即结合了分类损失和定位损失的方法大大提升了模型准确度。
@ -128,7 +128,7 @@
##### ROI池化 ##### ROI池化
因为Fast R-CNN使用全连接层所以应用ROI池化将不同大小的ROI转换为固定大小。为简洁起见我们先将8×8特征图转换为预定义的2×2大小。下图左上角特征图。右上角将ROI蓝色区域与特征图重叠。左下角将ROI拆分为目标维度。例如对于2×2目标我们将ROI分割为4个大小相似或相等的部分。右下角找到每个部分的最大值得到变换后的特征图。 因为Fast R-CNN使用全连接层所以应用ROI池化将不同大小的ROI转换为固定大小。为简洁起见我们先将8×8特征图转换为预定义的2×2大小。下图左上角特征图。右上角将ROI蓝色区域与特征图重叠。左下角将ROI拆分为目标维度。例如对于2×2目标我们将ROI分割为4个大小相似或相等的部分。右下角找到每个部分的最大值得到变换后的特征图。
<center><img src="../img/8.1.12.png"></center> <center><img src="./img/ch8/8.1.12.png"></center>
图7.1.12 ROI池化 图7.1.12 ROI池化
输入特征图左上输出特征图右下ROI(右上,蓝色框)。按上述步骤得到一个2×2的特征图块可以馈送至分类器和边界框的回归器中。 输入特征图左上输出特征图右下ROI(右上,蓝色框)。按上述步骤得到一个2×2的特征图块可以馈送至分类器和边界框的回归器中。
@ -136,34 +136,34 @@
#### 8.1.3.3 Faster R-CNN #### 8.1.3.3 Faster 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毫秒的速度运行。
<center><img src="../img/8.1.13.png"></center> <center><img src="./img/ch8/8.1.13.png"></center>
图8.1.13 Faster R-CNN的流程图 图8.1.13 Faster R-CNN的流程图
Faster R-CNN的流程图与Fast R-CNN相同采用外部候选区域方法代替了内部深层网络。 Faster R-CNN的流程图与Fast R-CNN相同采用外部候选区域方法代替了内部深层网络。
<center><img src="../img/8.1.14.png"></center> <center><img src="./img/ch8/8.1.14.png"></center>
图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使用只有两个类别的分类器即带有目标的类别和不带有目标的类别。
<center><img src="../img/8.1.15.png"></center> <center><img src="./img/ch8/8.1.15.png"></center>
图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个候选区域。
<center><img src="../img/8.1.16.png"></center> <center><img src="./img/ch8/8.1.16.png"></center>
图8.1.16 图8.1.16
假设最好涵盖不同的形状和大小。因此Faster R-CNN不会创建随机边界框。相反它会预测一些与左上角名为锚点的参考框相关的偏移量如x, y。我们限制这些偏移量的值因此我们的猜想仍然类似于锚点。 假设最好涵盖不同的形状和大小。因此Faster R-CNN不会创建随机边界框。相反它会预测一些与左上角名为锚点的参考框相关的偏移量如x, y。我们限制这些偏移量的值因此我们的猜想仍然类似于锚点。
<center><img src="../img/8.1.17.png"></center> <center><img src="./img/ch8/8.1.17.png"></center>
图8.1.17 图8.1.17
要对每个位置进行k个预测我们需要以每个位置为中心的k个锚点。每个预测与特定锚点相关联但不同位置共享相同形状的锚点。 要对每个位置进行k个预测我们需要以每个位置为中心的k个锚点。每个预测与特定锚点相关联但不同位置共享相同形状的锚点。
<center><img src="../img/8.1.18.png"></center> <center><img src="./img/ch8/8.1.18.png"></center>
图8.1.18 图8.1.18
这些锚点是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的现实目标。这使得我们可以用更好的猜想来指导初始训练,并允许每个预测专门用于特定的形状。该策略使早期训练更加稳定和简便。 这些锚点是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的现实目标。这使得我们可以用更好的猜想来指导初始训练,并允许每个预测专门用于特定的形状。该策略使早期训练更加稳定和简便。
<center><img src="../img/8.1.19.png"></center> <center><img src="./img/ch8/8.1.19.png"></center>
图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个坐标。
@ -171,7 +171,7 @@
#### 8.1.3.4 R-CNN方法的性能 #### 8.1.3.4 R-CNN方法的性能
如下图所示Faster R-CNN的速度要快得多。 如下图所示Faster R-CNN的速度要快得多。
<center><img src="../img/8.1.20.png"></center> <center><img src="./img/ch8/8.1.20.png"></center>
图8.1.20性能对比 图8.1.20性能对比
@ -182,31 +182,31 @@
## 8.2 基于区域的全卷积神经网络R-FCN ## 8.2 基于区域的全卷积神经网络R-FCN
假设我们只有一个特征图用来检测右眼。那么我们可以使用它定位人脸吗应该可以。因为右眼应该在人脸图像的左上角所以我们可以利用这一点定位整个人脸。如果我们还有其他用来检测左眼、鼻子或嘴巴的特征图那么我们可以将检测结果结合起来更好地定位人脸。现在我们回顾一下所有问题。在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快。
<center><img src="../img/8.2.1.png"></center> <center><img src="./img/ch8/8.2.1.png"></center>
图8.2.1 人脸检测 图8.2.1 人脸检测
现在我们来看一下5×5的特征图M内部包含一个蓝色方块。我们将方块平均分成3×3个区域。现在我们在M中创建了一个新的特征图来检测方块的左上角TL。这个新的特征图如下图所示。只有黄色的网格单元[2,2]处于激活状态。在左侧创建一个新的特征图,用于检测目标的左上角。 现在我们来看一下5×5的特征图M内部包含一个蓝色方块。我们将方块平均分成3×3个区域。现在我们在M中创建了一个新的特征图来检测方块的左上角TL。这个新的特征图如下图所示。只有黄色的网格单元[2,2]处于激活状态。在左侧创建一个新的特征图,用于检测目标的左上角。
<center><img src="../img/8.2.2.png"></center> <center><img src="./img/ch8/8.2.2.png"></center>
图8.2.2 检测示例 图8.2.2 检测示例
我们将方块分成9个部分由此创建了9个特征图每个用来检测对应的目标区域。这些特征图叫做位置敏感得分图position-sensitive score map因为每个图检测目标的子区域计算其得分 我们将方块分成9个部分由此创建了9个特征图每个用来检测对应的目标区域。这些特征图叫做位置敏感得分图position-sensitive score map因为每个图检测目标的子区域计算其得分
<center><img src="../img/8.2.3.png"></center> <center><img src="./img/ch8/8.2.3.png"></center>
图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]包含左上角区域是否包含目标对应部分的得分。
<center><img src="../img/8.2.4.png"></center> <center><img src="./img/ch8/8.2.4.png"></center>
图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池化非常接近。
<center><img src="../img/8.2.5.png"></center> <center><img src="./img/ch8/8.2.5.png"></center>
图8.2.5 图8.2.5
将ROI的一部分叠加到对应的得分图上计算V[i][j]。在计算出位置敏感ROI池化的所有值后类别得分是其所有元素得分的平均值。 将ROI的一部分叠加到对应的得分图上计算V[i][j]。在计算出位置敏感ROI池化的所有值后类别得分是其所有元素得分的平均值。
<center><img src="../img/8.2.6.png"></center> <center><img src="./img/ch8/8.2.6.png"></center>
图8.2.6 ROI池化 图8.2.6 ROI池化
假如我们有C个类别要检测。我们将其扩展为C+1个类别这样就为背景非目标增加了一个新的类别。每个类别有3×3个得分图因此一共有(C+1)×3×3个得分图。使用每个类别的得分图可以预测出该类别的类别得分。然后我们对这些得分应用 softmax 函数计算出每个类别的概率。以下是数据流图在本案例中k=3。 假如我们有C个类别要检测。我们将其扩展为C+1个类别这样就为背景非目标增加了一个新的类别。每个类别有3×3个得分图因此一共有(C+1)×3×3个得分图。使用每个类别的得分图可以预测出该类别的类别得分。然后我们对这些得分应用 softmax 函数计算出每个类别的概率。以下是数据流图在本案例中k=3。
<center><img src="../img/8.2.7.png"></center> <center><img src="./img/ch8/8.2.7.png"></center>
图8.2.7 图8.2.7
@ -221,7 +221,7 @@
Faster R-CNN中在分类器之后有一个专用的候选区域网络。 Faster R-CNN中在分类器之后有一个专用的候选区域网络。
``` ```
<center><img src="../img/8.3.1.png"></center> <center><img src="./img/ch8/8.3.1.png"></center>
``` ```
图8.3.1 Faster R-CNN工作流 图8.3.1 Faster R-CNN工作流
@ -233,41 +233,41 @@ Faster R-CNN中在分类器之后有一个专用的候选区域网络。
让我们再看一下滑动窗口检测器。我们可以通过在特征图上滑动窗口来检测目标。对于不同的目标类型,我们使用不同的窗口类型。以前的滑动窗口方法的致命错误在于使用窗口作为最终的边界框,这就需要非常多的形状来覆盖大部分目标。更有效的方法是将窗口当作初始猜想,这样我们就得到了从当前滑动窗口同时预测类别和边界框的检测器。 让我们再看一下滑动窗口检测器。我们可以通过在特征图上滑动窗口来检测目标。对于不同的目标类型,我们使用不同的窗口类型。以前的滑动窗口方法的致命错误在于使用窗口作为最终的边界框,这就需要非常多的形状来覆盖大部分目标。更有效的方法是将窗口当作初始猜想,这样我们就得到了从当前滑动窗口同时预测类别和边界框的检测器。
``` ```
<center><img src="../img/8.3.2.png"></center> <center><img src="./img/ch8/8.3.2.png"></center>
``` ```
图8.3.2 图8.3.2
基于滑动窗口进行预测这个概念和Faster R-CNN中的锚点很相似。然而单次检测器会同时预测边界框和类别。例如我们有一个8×8特征图并在每个位置做出k个预测即总共有8×8×k个预测结果。 基于滑动窗口进行预测这个概念和Faster R-CNN中的锚点很相似。然而单次检测器会同时预测边界框和类别。例如我们有一个8×8特征图并在每个位置做出k个预测即总共有8×8×k个预测结果。
``` ```
<center><img src="../img/8.3.3.png"></center> <center><img src="./img/ch8/8.3.3.png"></center>
``` ```
图8.3.3 64个位置 图8.3.3 64个位置
在每个位置我们有k个锚点锚点是固定的初始边界框猜想一个锚点对应一个特定位置。我们使用相同的锚点形状仔细地选择锚点和每个位置。 在每个位置我们有k个锚点锚点是固定的初始边界框猜想一个锚点对应一个特定位置。我们使用相同的锚点形状仔细地选择锚点和每个位置。
``` ```
<center><img src="../img/8.3.4.png"></center> <center><img src="./img/ch8/8.3.4.png"></center>
``` ```
图8.3.4 使用4个锚点在每个位置做出4个预测 图8.3.4 使用4个锚点在每个位置做出4个预测
以下是4个锚点绿色和4个对应预测蓝色每个预测对应一个特定锚点。在Faster R-CNN中我们使用卷积核来做5个参数的预测4个参数对应某个锚点的预测边框1个参数对应objectness置信度得分。因此3×3×D×5卷积核将特征图从8×8×D转换8×8×5。 以下是4个锚点绿色和4个对应预测蓝色每个预测对应一个特定锚点。在Faster R-CNN中我们使用卷积核来做5个参数的预测4个参数对应某个锚点的预测边框1个参数对应objectness置信度得分。因此3×3×D×5卷积核将特征图从8×8×D转换8×8×5。
``` ```
<center><img src="../img/8.3.5.png"></center> <center><img src="./img/ch8/8.3.5.png"></center>
``` ```
图8.3.5 4个预测每个预测对应一个锚点 图8.3.5 4个预测每个预测对应一个锚点
``` ```
<center><img src="../img/8.3.6.png"></center> <center><img src="./img/ch8/8.3.6.png"></center>
``` ```
图8.3.6 使用3×3卷积核计算预测 图8.3.6 使用3×3卷积核计算预测
在单次检测器中卷积核还预测C个类别概率以执行分类每个概率对应一个类别。因此我们应用一个3×3×D×25卷积核将特征图从8×8×D转换为8×8×25C=20 在单次检测器中卷积核还预测C个类别概率以执行分类每个概率对应一个类别。因此我们应用一个3×3×D×25卷积核将特征图从8×8×D转换为8×8×25C=20
``` ```
<center><img src="../img/8.3.7.png"></center> <center><img src="./img/ch8/8.3.7.png"></center>
``` ```
图8.3.7 每个位置做出k个预测每个预测有25个参数 图8.3.7 每个位置做出k个预测每个预测有25个参数
@ -275,11 +275,11 @@ Faster R-CNN中在分类器之后有一个专用的候选区域网络。
``` ```
SSD是使用VGG19网络作为特征提取器和Faster R-CNN中使用的CNN一样的单次检测器。我们在该网络之后添加自定义卷积层蓝色并使用卷积核绿色执行预测。 SSD是使用VGG19网络作为特征提取器和Faster R-CNN中使用的CNN一样的单次检测器。我们在该网络之后添加自定义卷积层蓝色并使用卷积核绿色执行预测。
<center><img src="../img/8.3.8.png"></center> <center><img src="./img/ch8/8.3.8.png"></center>
图8.3.8 同时对类别和位置执行单次预测 图8.3.8 同时对类别和位置执行单次预测
然而,卷积层降低了空间维度和分辨率。因此上述模型仅可以检测较大的目标。为了解决该问题,我们从多个特征图上执行独立的目标检测。 然而,卷积层降低了空间维度和分辨率。因此上述模型仅可以检测较大的目标。为了解决该问题,我们从多个特征图上执行独立的目标检测。
<center><img src="../img/8.3.9.png"></center> <center><img src="./img/ch8/8.3.9.png"></center>
图8.3.9 使用多尺度特征图用于检测 图8.3.9 使用多尺度特征图用于检测
#### 8.3.1.2 DSSD #### 8.3.1.2 DSSD
@ -494,4 +494,4 @@ TODO
### 8.3.3 RetinaNet ### 8.3.3 RetinaNet
md版本未编辑完 md版本未编辑完