提交 0260faa2 编写于 作者: W wizardforcel

2021-01-06 15:09:52

上级 c9bd7940
......@@ -17,18 +17,21 @@
SSD 是一种非常快速的对象检测器,非常适合部署在移动设备和边缘设备上以进行实时预测。 在本章中,我们将学习如何使用 SSD 开发模型,在下一章中,我们将评估在边缘设备上部署时的性能。 但是在详细介绍 SSD 之前,我们将快速了解到目前为止我们在本书中了解的其他对象检测器模型。
我们在“第 5 章”,“神经网络架构和模型”中了解到,Faster R-CNN 包含 21,500 个区域提议(`60 x 40`滑动窗口和 9 个锚定框),这些建议被扭曲为 2K 固定层。 这些 2K 层被馈送到全连接层和包围盒回归器,以检测图像中的包围盒。 9 个锚框来自 3 个比例尺,框面积分别为`128^2``256^2``512^2`和三个长宽比:`1:1``1:2``2:1`
我们在“第 5 章”,“神经网络架构和模型”中了解到,Faster R-CNN 包含 21,500 个区域提议(`60 x 40`滑动窗口和 9 个锚定框),这些建议被扭曲为 2K 固定层。 这些 2K 层被馈送到全连接层和包围盒回归器,以检测图像中的包围盒。 9 个锚框来自 3 个比例尺,框面积分别为`128^2``256^2``512^2`和三个长宽比:1:1、1:2 和 2:1
9 个锚点框的说明如下:
128x128:1:1; 128x128:1:2; 128x128:2:1
256x256:1:1; 256x256:1:2; 256x256:2:1
512x512:1:1; 512x512:1:2; 512x512:2:1
在“第 7 章”,“使用 YOLO 进行对象检测”中,我们了解到 YOLO 使用单个 CNN,该 CNN 同时预测整个图像中对象的多个边界框。 YOLO v3 检测分为三层。 YOLO v3 使用 9 个锚点:`(10, 13)``(16, 30)``(33, 23)``(30, 61)``(62, 45)``(59, 119)``(116, 90)`,(156 ,198),`(373, 326)`。 此外,YOLO v3 使用 9 个掩码,这些掩码链接到锚点,如下所述:
```py
128x128:1:1; 128x128:1:2; 128x128:2:1
256x256:1:1; 256x256:1:2; 256x256:2:1
512x512:1:1; 512x512:1:2; 512x512:2:1
```
在“第 7 章”,“使用 YOLO 进行对象检测”中,我们了解到 YOLO 使用单个 CNN,该 CNN 同时预测整个图像中对象的多个边界框。 YOLO v3 检测分为三层。 YOLO v3 使用 9 个锚点:`(10, 13)``(16, 30)``(33, 23)``(30, 61)``(62, 45)``(59, 119)``(116, 90)``(156, 198)``(373, 326)`。 此外,YOLO v3 使用 9 个掩码,这些掩码链接到锚点,如下所述:
* **第一层**:遮罩= 6、7、8; 对应的锚点:`(116, 90)``(156, 198)``(373, 326)`
* **第二层**:遮罩= 3、4、5; 对应的锚点:`(30, 61)``(62, 45)``(59, 119)`
* **第三层**mask = 0、1、2; 对应的锚点:`(10, 13)``(16, 30)``(33, 23)`
* **第一层**:遮罩6、7、8; 对应的锚点:`(116, 90)``(156, 198)``(373, 326)`
* **第二层**:遮罩3、4、5; 对应的锚点:`(30, 61)``(62, 45)``(59, 119)`
* **第三层**遮罩:0、1、2; 对应的锚点:`(10, 13)``(16, 30)``(33, 23)`
SSD 于 2016 年由 Liu Wei,Dragomir Anguelov,Dumitru Erhan,Christian Szegedy,Scott Reed,傅成扬和 Alexander C.Berg 在题为[《SSD:单发多框检测器》](https://arxiv.org/abs/1512.02325)提出。
......@@ -41,11 +44,11 @@ SSD 的主要功能概述如下:
* 一组默认框与每个要素图单元相关联,因此默认框位置相对于要素图单元是固定的。 每个默认框都会预测`c`类中每个类别的得分以及相对于地面真实情况的四个偏移,从而产生`(c + 4)k`过滤器。 这些过滤器应用于特征图(大小为`m x n`),产生`(c + 4)kmn`输出。 下表说明了这一点。 SSD 的独特之处在于默认框适用于不同分辨率的多个功能图:
| **层名称** | **检测** | **过滤器输出** |
| `Conv4_3` | 38 x 38 x 4 = 5776 | 3 x 3 x 4 x(c + 4) |
| `Conv7` | 19 x 19 x 6 = 2166 | 3 x 3 x 6 x(c + 4) |
| `Conv8_2` | 10 x 10 x 6 = 600 | 3 x 3 x 6 x(c + 4) |
| `Conv9_2` | 5 x 5 x 6 = 150 | 3 x 3 x 6 x(c + 4) |
| `Conv10_2` | 3 x 3 x 4 = 36 | 3 x 3 x 4 x(c + 4) |
| `Conv4_3` | `38 x 38 x 4 = 5776` | `3 x 3 x 4 x (c + 4)` |
| `Conv7` | `19 x 19 x 6 = 2166` | `3 x 3 x 6 x (c + 4)` |
| `Conv8_2` | `10 x 10 x 6 = 600` | `3 x 3 x 6 x (c + 4)` |
| `Conv9_2` | `5 x 5 x 6 = 150` | `3 x 3 x 6 x (c + 4)` |
| `Conv10_2` | `3 x 3 x 4 = 36` | `3 x 3 x 4 x (c + 4)` |
| `Conv11_2` | 4 | |
| 总 | 8732 | |
......@@ -56,7 +59,7 @@ SSD 的主要功能概述如下:
* SSD 通过将给定比例和宽高比的默认框与地面真实物体的默认框匹配,并消除不匹配的框,从而预测各种物体的大小和形状。 默认框与地面真值对象的匹配是通过 Jaccard 重叠(也称为**交并比****IOU**)完成的,这在第 7 章,“使用 YOLO 进行对象检测”中。 例如,如果图像由`human``bus`组成并且都具有不同的宽高比和比例,则 SSD 显然可以识别两者。 问题出现在两个类别彼此接近且纵横比相同时,我们将在后面看到。
* 使用 R-CNN,区域提议网络执行筛选以限制被视为 2K 的样本数量。 另一方面,SSD 没有区域提议,因此它会生成大量的边界框(如我们先前所知,为 8,732 个),其中许多都是负面示例。 SSD 拒绝了额外的负面示例,它使用硬性负面挖掘来使正面与负面之间的平衡保持至多 3:1。 硬否定挖掘是一种用于使用置信度损失进行排序以便保留最高值的技术。
* SSD 使用非最大抑制来选择给定类别具有最高置信度的单个边界框。 非最大抑制的概念在“第 7 章”,“使用 YOLO 进行对象检测”中。 非最大抑制算法以最高的概率选择对象类别,并丢弃 IOU 大于`0.5`的所有边界框。
* SSD 还通过获取假阴性图像作为训练期间的输入来使用硬性阴性挖掘。 SSD 保持负数与正数之比为 31。
* SSD 还通过获取假阴性图像作为训练期间的输入来使用硬性阴性挖掘。 SSD 保持负数与正数之比为 3:1。
* 为了进行训练,使用以下参数:`300x300``512x512`图像大小,`10^(-3)`的学习速率为 40,000 次迭代,`10^(-4)``10^(-5)`的学习速率为随后的 10,000 次迭代,衰减率为`0.0005``0.9`的势头。
# R-FCN 概述
......@@ -67,7 +70,7 @@ R-FCN 也基于区域提议。 与 R-CNN 的主要区别在于,R-FCN 一直等
![](img/d692d9d9-8340-4d58-a219-8002b8b93391.png)
在上图中,汽车的图像通过 ResNet-101 生成了特征图。 请注意,我们在“第 4 章”,“基于图像的深度学习”中使用,它介绍了如何可视化**卷积神经网络****CNN**)及其功能图。 这种技术本质上是相同的。 然后,我们在特征图内获取`k x k`内核(在此图像中,k = 3),并将其在图像上滑动以创建`k^2(C+1)`得分图。 如果得分图包含一个对象,则我们投票`yes`,否则,我们投票`no`。 展平不同区域之间的投票以创建 softmax 层,该层被映射到对象类别以进行检测。
在上图中,汽车的图像通过 ResNet-101 生成了特征图。 请注意,我们在“第 4 章”,“基于图像的深度学习”中使用,它介绍了如何可视化**卷积神经网络****CNN**)及其功能图。 这种技术本质上是相同的。 然后,我们在特征图内获取`k x k`内核(在此图像中,`k = 3`),并将其在图像上滑动以创建`k^2(C+1)`得分图。 如果得分图包含一个对象,则我们投票`yes`,否则,我们投票`no`。 展平不同区域之间的投票以创建 softmax 层,该层被映射到对象类别以进行检测。
R-FCN 的主要功能如下所述:
......@@ -105,7 +108,7 @@ TensorFlow 对象检测 API 具有预先训练的模型,[您可以使用网络
4. 在 Google Cloud Console 中,导航到“ VM 实例”页面。
5. 点击顶部的创建实例。 它应该带您到另一个页面,您必须在其中输入实例名称。
6. 以小写字母输入实例的名称。 请注意,实例名称与项目名称不同。
7. 单击计算机类型,然后选择 n1-standard-8(8vCPU,30 GB 内存)。
7. 单击计算机类型,然后选择`n1-standard-8`(8vCPU,30 GB 内存)。
8. 单击“自定义”,然后调整水平条以将“计算机类型”设置为 8 个 vCPU,将“内存”设置为 8GB,如以下屏幕截图所示。
9. 选择“防火墙”下的“允许 HTTP 通信”。
10. 在防火墙下,您将看到管理,安全性,磁盘,网络,唯一租赁链接,如屏幕快照所示,该屏幕快照说明了创建 VM 实例的步骤。 单击该,然后单击网络选项卡。
......@@ -182,7 +185,7 @@ rs = tf.image.resize(img[:, y:y+h, x:x+w, :], (self.pool_size, self.pool_size))
在以下部分中,将提供逐步指南,以建立训练组合。 可以在[这个页面](https://github.com/PacktPublishing/Mastering-Computer-Vision-with-TensorFlow-2.0/blob/master/Chapter10/Chapter10_Tensorflow_Training_a_Object_Detector_GoogleColab.ipynb)中找到代码的详细信息。
# 将图像收集并格式化为.jpg 文件
# 将图像收集并格式化为`.jpg`文件
本节介绍如何处理图像,使其具有相同的格式和大小。 步骤在这里列出:
......@@ -196,7 +199,7 @@ rs = tf.image.resize(img[:, y:y+h, x:x+w, :], (self.pool_size, self.pool_size))
例如,`dec2f2eedda8e9.jpg`应该转换为`burger_001.jpg`。 将所有图像保存在一个文件夹中。 由于我们的图像包含一个汉堡,炸薯条和一个组合,并且我们的文件总数为 100,因此对于图像文件名,请创建`burger_001 …burger_030.jpg``fries_031 …fries_060.jpg``comb_061 …comb_100.jpg`三个类。
# 注释图像以创建.xml 文件
# 注释图像以创建`.xml`文件
在本节中,我们将描述如何创建注释文件。 每个图像文件对应一个注释文件。 注释文件通常为`.xml`格式。 此处描述了创建注释文件的步骤:
......@@ -566,17 +569,17 @@ TensorBoard 具有三个选项卡-标量,图像和图形。 标量包括 mAP
# Mask R-CNN 概述和 Google Colab 演示
[Mask R-CNN](https://arxiv.org/abs/1703.06870) 由 Kaiming He,Georgia Gkioxari,Piotr Dollar 和 Ross Girshick 在 **CVPR** 2017 中提出。Mask R -CNN 使用 R-CNN 有效地检测图像中的对象,同时针对每个兴趣区域进行对象分割任务。 因此,分割任务与分类和边界框回归并行工作。 Mask R-CNN 的高级架构如下:
[Mask R-CNN](https://arxiv.org/abs/1703.06870) 由 Kaiming He,Georgia Gkioxari,Piotr Dollar 和 Ross Girshick 在 **CVPR** 2017 中提出。Mask R-CNN 使用 R-CNN 有效地检测图像中的对象,同时针对每个兴趣区域进行对象分割任务。 因此,分割任务与分类和边界框回归并行工作。 Mask R-CNN 的高级架构如下:
![](img/2884d889-f0b0-44e5-83cf-22ec8797f59a.png)
Mask R-CNN 实现的详细信息如下:
* 掩码 R-CNN 遵循 Faster R-CNN 的一般两阶段原理,但进行了修改—第一阶段 **RPN** 与 Faster R-CNN 相同。 第二阶段,快速 R-CNN,它从**兴趣区域****RoI**)中进行特征提取,分类和边界框回归开始,还为每个 RoI 输出二进制掩码 。
* 遮罩代表输入对象的空间形状。 掩码 R-CNN 使用完全卷积网络进行语义分割,为每个 RoI 预测一个([`M`x`N`)掩码。
* 将特征图划分为`M`x`N`网格后,将 RoI Align 应用于区域提议网络的输出,然后在每个 bin 中应用 2 x 2 bin 和四个采样点 ,使用双线性插值选择。 RoI Align 用于将提取的特征与输入对齐。
* 骨干神经网络通过提取第四阶段的最后卷积层来使用 ResNet-50 或-101。
* 重新调整训练图像的大小,使较短的边缘为 800 像素。 每个微型批量每个 GPU 具有两张图像,正样本与负样本的比例为 13。 训练持续进行 160,000 次迭代,学习率`0.02`高达 120,000 次迭代,然后下降到`0.002`。 使用`0.0001`的重量衰减和`0.9`的动量。
* 遮罩代表输入对象的空间形状。 掩码 R-CNN 使用完全卷积网络进行语义分割,为每个 RoI 预测一个(`M x N`)掩码。
* 将特征图划分为`M x N`网格后,将 RoI Align 应用于区域提议网络的输出,然后在每个箱子中应用`2 x 2`箱子和四个采样点 ,使用双线性插值选择。 RoI Align 用于将提取的特征与输入对齐。
* 骨干神经网络通过提取第四阶段的最后卷积层来使用 ResNet-50 或 101。
* 重新调整训练图像的大小,使较短的边缘为 800 像素。 每个微型批量每个 GPU 具有两张图像,正样本与负样本的比例为 1:3。 训练持续进行 160,000 次迭代,学习率`0.02`高达 120,000 次迭代,然后下降到`0.002`。 使用`0.0001`的重量衰减和`0.9`的动量。
[Mask R-CNN 图像分割演示是用 Google Colab 编写的](https://github.com/PacktPublishing/Mastering-Computer-Vision-with-TensorFlow-2.0/blob/master/Chapter10/Chapter10_Mask_R_CNN_Image_Segmentation_Demo.ipynb)
......
......@@ -401,7 +401,7 @@ R-CNN 和 Fast R-CNN 都依赖于选择性搜索方法来开发 2,000 个区域
* 在两个网络之间共享卷积层:RPN 用于区域提议,快速 R-CNN 用于检测。
* 对于更快的 R-CNN,输入图像大小为`1,000 x 600`
* 通过在卷积特征图输出上滑动大小为`60 x 40`的小窗口来生成 RPN。
* 每个滑动窗口都映射到 9 个锚点框(3 个比例,框区域分别为 128、256 和 512 像素,而 3 个比例为`1:1``1:2``2:1`)。
* 每个滑动窗口都映射到 9 个锚点框(3 个比例,框区域分别为 128、256 和 512 像素,而 3 个比例为 1:1、1:2 和 2:1)。
* 每个锚框都映射到一个区域提议。
* 每个滑动窗口都映射到 ZF 的 256-D 特征向量和 VGG 网络的 512-D 特征向量。
* 然后将此向量输入到两个全连接层中-框回归层和框分类层。
......
......@@ -199,7 +199,7 @@ for pair in POSE_PAIRS:
* 前模块将图像作为输入和通道数(每层的第三个尺寸,前两个尺寸是宽度和高度)。
* 图像穿过前模块的不同层,最后一个模块连接到左半块。
* 左半块具有四个瓶颈回旋块-`f1``f2``f4``f8`,每个块分别具有 1、`1/2``1/4``1/8`的分辨率。 如果查看架构图,就在堆叠的沙漏感应下,这应该很清楚。
* 左半块具有四个瓶颈回旋块-`f1``f2``f4``f8`,每个块分别具有 1、1/2、1/4 和 1/8 的分辨率。 如果查看架构图,就在堆叠的沙漏感应下,这应该很清楚。
* 每个块的最后一层–`f1``f2``f4``f8`–创建一个对应的特征图,即`lf1``lf2``lf4``lf8`
* 功能图`lf1``lf2``lf4``lf8`连接到右半块。 该块的输出为`rf1`
* 底层也从左半块连接到`lf8`特征图。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册