提交 ba00edf7 编写于 作者: W wizardforcel

2021-01-06 15:20:47

上级 0260faa2
......@@ -822,7 +822,7 @@ def graycifar10_cross_colorcifar10(g_models=None):
例如,平面背景(第三行,第二列)中的天空为白色。 自编码器没错,但是 CycleGAN 认为它是浅棕色或蓝色。
对于第六行第六列,暗海上的船天空阴沉,但自编码器将其涂成蓝色和蓝色,而 CycleGAN 将其涂成蓝色和白色,而没有 PatchGAN。 两种预测在现实世界中都是有意义的。 同时,使用 PatchGAN 对 CycleGAN 的预测与基本事实相似。 在倒数第二行和第二列上,没有方法能够预测汽车的红色。 在动物身上,CycleGAN 的两种口味都具有接近地面真相的颜色。
对于第六行第六列,暗海上的船天空阴沉,但自编码器将其涂成蓝色和蓝色,而 CycleGAN 将其涂成蓝色和白色,而没有 PatchGAN。 两种预测在现实世界中都是有意义的。 同时,使用 PatchGAN 对 CycleGAN 的预测与基本事实相似。 在倒数第二行和第二列上,没有方法能够预测汽车的红色。 在动物身上,CycleGAN 的两种口味都具有接近真实情况的颜色。
由于 CycleGAN 是对称的,因此它还能在给定彩色图像的情况下预测灰度图像。“图 7.1.14”显示了两个 CycleGAN 变体执行的颜色到灰度转换。 目标图像来自测试数据集。 除了某些图像的灰度阴影存在细微差异外,这些预测通常是准确的。
......
......@@ -272,11 +272,11 @@ def centroid2minmax(boxes):
return minmax
```
我们已经介绍了锚框如何协助对象检测以及如何生成它们。 在下一节中,我们将介绍一种特殊的锚点框:地面真相锚点框。 给定图像中的对象,必须将其分配给多个锚点框之一。 这就是,称为地面真相锚定框。
我们已经介绍了锚框如何协助对象检测以及如何生成它们。 在下一节中,我们将介绍一种特殊的锚点框:真实情况锚点框。 给定图像中的对象,必须将其分配给多个锚点框之一。 这就是,称为真实情况锚定框。
# 3.地面真相锚箱
# 3.真实情况锚箱
从“图 11.2.3”看来,给定一个对象边界框,有许多可以分配给对象的地面真相锚定框。 实际上,仅出于“图 11.2.3”中的说明,已经有 3 个锚定框。 如果考虑每个区域的所有锚框,则仅针对![](img/B14853_11_021.png)就有`6 x 6 = 36`个地面真实框。 使用所有 9,648 个锚点框显然过多。 所有锚定框中只有一个应与地面真值边界框相关联。 所有其他锚点框都是背景锚点框。 选择哪个对象应被视为图像中对象的地面真相锚定框的标准是什么?
从“图 11.2.3”看来,给定一个对象边界框,有许多可以分配给对象的真实情况锚定框。 实际上,仅出于“图 11.2.3”中的说明,已经有 3 个锚定框。 如果考虑每个区域的所有锚框,则仅针对![](img/B14853_11_021.png)就有`6 x 6 = 36`个地面真实框。 使用所有 9,648 个锚点框显然过多。 所有锚定框中只有一个应与地面真值边界框相关联。 所有其他锚点框都是背景锚点框。 选择哪个对象应被视为图像中对象的真实情况锚定框的标准是什么?
选择锚框的基础称为**交并比****IoU**)。 IoU 也称为 *Jaccard 指数*。 在“图 11.3.1”中说明了 IoU。 给定 2 个区域,对象边界框`B[0]`和锚定框`A[1]`,IoU 等于 重叠除以合并区域的面积:
......@@ -316,7 +316,7 @@ def centroid2minmax(boxes):
为了简化讨论,我们只考虑每个区域一个锚框。 实际上,应该考虑代表不同缩放比例,大小和纵横比的所有锚框。 在下一节中,我们讨论如何制定损耗函数,这些损耗函数将通过 SSD 网络进行优化。
“列表 11.3.1”显示了`get_gt_data()`的实现,该实现计算锚定框的地面真相标签。
“列表 11.3.1”显示了`get_gt_data()`的实现,该实现计算锚定框的真实情况标签。
“列表 11.3.1”:`layer_utils.py`
......@@ -460,7 +460,7 @@ def minmax2centroid(boxes):
`maxiou_per_gt = np.argmax(iou, axis=0)`实现了“公式 11.3.2”。 额外的阳性锚框是基于由`iou_gt_thresh = np.argwhere(iou>threshold)`实现的用户定义的阈值确定的。
仅当阈值小于 1.0 时,才会查找额外的正锚框。 所有带有地面真值边界框的锚框(即组合的正锚框和额外的正锚框)的索引成为地面真相掩码的基础:
仅当阈值小于 1.0 时,才会查找额外的正锚框。 所有带有地面真值边界框的锚框(即组合的正锚框和额外的正锚框)的索引成为真实情况掩码的基础:
`gt_mask[maxiou_per_gt] = 1.0`
......@@ -592,7 +592,7 @@ SSD 是一种监督对象检测算法。 可以使用以下基本真值:
`(w[b], h[b]) = (x_max – x_min, y_max - y_min)` (Equation 11.4.6)
分别对应于宽度和高度。 锚框遵循相同的约定。 归一化的地面真相偏移量表示为:
分别对应于宽度和高度。 锚框遵循相同的约定。 归一化的真实情况偏移量表示为:
![](img/B14853_11_029.png) (Equation 11.4.7)
......@@ -749,7 +749,7 @@ s = np.linspace(0.2, 0.9, n_layers + 1)
SSD 模型使用 ResNet 作为其骨干网络。 它在`resnet.py`中调用 ResNet V1 或 V2 模型创建者。 与前几章中的示例不同,SSD 使用的数据集由数千个高分辨率图像组成。 多线程数据生成器将加载文件,并且将这些文件从文件系统排队。 它还计算锚点箱的地面真值标签。 如果没有多线程数据生成器,则在训练期间图像的加载和排队以及地面真值的计算将非常缓慢。
有许多小的但重要的例程在后台运行。 这些都集中存储在工具块中。 这些例程创建锚框,计算 IoU,建立地面真相标签,运行非最大抑制,绘制标签和框,在视频帧上显示检测到的对象,提供损失函数等。
有许多小的但重要的例程在后台运行。 这些都集中存储在工具块中。 这些例程创建锚框,计算 IoU,建立真实情况标签,运行非最大抑制,绘制标签和框,在视频帧上显示检测到的对象,提供损失函数等。
![](img/B14853_11_10.png)
......@@ -1483,7 +1483,7 @@ def nms(args, classes, offsets, anchors):
在对 SSD 模型进行 200 个时期的训练之后,可以验证性能。 用于评估的三个可能指标:1)**IoU**,2)**精度**和 3)**召回**
第一个指标是**平均 IoU****mIoU**)。 给定地面真相测试数据集,计算地面真相边界框和预测边界框之间的 IoU。 在执行 NMS 之后,对所有地面真相和预测的边界框执行此操作。 所有 IoU 的平均值计算为 mIoU:
第一个指标是**平均 IoU****mIoU**)。 给定真实情况测试数据集,计算真实情况边界框和预测边界框之间的 IoU。 在执行 NMS 之后,对所有真实情况和预测的边界框执行此操作。 所有 IoU 的平均值计算为 mIoU:
![](img/B14853_11_074.png) (Equation 11.13.1)
......
......@@ -275,7 +275,7 @@ def build_fcn(input_shape,
workers=self.args.workers)
```
多线程数据生成器类`DataGenerator`与“第 11 章”,“对象检测”中使用的类类似。 如“列表 12.3.4”所示,对`__data_generation(self, keys)`签名方法进行了修改,以生成一对图像张量及其相应的按像素方向的地面真相标签或分割蒙版 。 在下一节中,我们将讨论如何生成基本事实标签。
多线程数据生成器类`DataGenerator`与“第 11 章”,“对象检测”中使用的类类似。 如“列表 12.3.4”所示,对`__data_generation(self, keys)`签名方法进行了修改,以生成一对图像张量及其相应的按像素方向的真实情况标签或分割蒙版 。 在下一节中,我们将讨论如何生成基本事实标签。
“列表 12.3.4”:`data_generator.py`
......@@ -350,7 +350,7 @@ segmentation_train.npy
segmentation_test.npy
```
每个文件都包含`image filename: segmentation mask`格式的地面真相数据字典,该字典在训练和验证期间加载。“图 12.4.2”显示了使用彩色像素可视化的“图 12.4.1”中图像的分割蒙版的示例。
每个文件都包含`image filename: segmentation mask`格式的真实情况数据字典,该字典在训练和验证期间加载。“图 12.4.2”显示了使用彩色像素可视化的“图 12.4.1”中图像的分割蒙版的示例。
![A screenshot of a cell phone Description automatically generated](img/B14853_12_09.png)
......@@ -366,7 +366,7 @@ segmentation_test.npy
python3 fcn-12.3.1.py --train
```
在每个时期,也会执行验证以确定性能最佳的参数。 对于语义分割,可以使用两个度量。 首先是平均 IOU。 这类似于上一章中目标检测中的平均 IoU。 区别在于针对每个填充类别在地面真相分割掩码和预测的分割掩码之间计算 IoU。 这包括背景。 平均 IoU 只是测试数据集所有 IoU 的平均值。
在每个时期,也会执行验证以确定性能最佳的参数。 对于语义分割,可以使用两个度量。 首先是平均 IOU。 这类似于上一章中目标检测中的平均 IoU。 区别在于针对每个填充类别在真实情况分割掩码和预测的分割掩码之间计算 IoU。 这包括背景。 平均 IoU 只是测试数据集所有 IoU 的平均值。
“图 12.5.1”显示了在每个时期使用 mIoU 的语义分割网络的性能。 最大 mIoU 为 0.91。 这个比较高。 但是,我们的数据集只有四个对象类别:
......
......@@ -623,9 +623,9 @@ def unsupervised_labels(y, yp, n_classes, n_clusters):
图 13.5.1 在三个群集的简单场景中说明的线性分配算法,可以将其最佳地分配给三个类别
如图“图 13.5.1”所示,线性分配问题最好使用将三个簇分配给三个类别的简化方案来解释。 线性分配问题找到了类对类的一对一分配,从而使总成本最小。 在“图 13.5.1*”的左侧,显示了聚类结果和地面真相标签。
如图“图 13.5.1”所示,线性分配问题最好使用将三个簇分配给三个类别的简化方案来解释。 线性分配问题找到了类对类的一对一分配,从而使总成本最小。 在“图 13.5.1*”的左侧,显示了聚类结果和真实情况标签。
线性分配问题可以找到每个群集的类或类别,或者如何为每个群集分配标签。 还显示了成本矩阵![](img/B14853_13_079.png)。 对于每个聚类-地面真相对,成本矩阵像元递减 1。该像元的行-列索引是聚类编号-地面真相标签索引。 使用成本矩阵,线性分配问题的工作是找到导致总成本最小的最优矩阵`X`
线性分配问题可以找到每个群集的类或类别,或者如何为每个群集分配标签。 还显示了成本矩阵![](img/B14853_13_079.png)。 对于每个聚类-真实情况对,成本矩阵像元递减 1。该像元的行-列索引是聚类编号-真实情况标签索引。 使用成本矩阵,线性分配问题的工作是找到导致总成本最小的最优矩阵`X`
![](img/B14853_13_080.png) (Equation 13.5.1)
......
......@@ -52,7 +52,7 @@ SSD 的主要功能概述如下:
| `Conv11_2` | 4 | |
| 总 | 8732 | |
* 默认框的设计是使用比例因子和宽高比创建的,因此特定尺寸(基于地面真相预测)的特征图与对象的特定比例相匹配。
* 默认框的设计是使用比例因子和宽高比创建的,因此特定尺寸(基于真实情况预测)的特征图与对象的特定比例相匹配。
* 比例范围可以从`smin(0.2)``smax(0.95)`线性变化,而纵横比(`ar`)可以取五个值(`1``2``0.5``3.0``0.33`) ,其中`k``1``m`之间变化。
* 对于长宽比`1`,添加了一个附加的默认框。 因此,每个要素地图位置最多有六个默认框。
* 默认框中心的坐标为`((i+0.5)/|fk|, (j+0.5)/|fk|)`,其中`|fk|``kth`正方形特征图的大小,`i``j`的值从`0``|fk|`不等。 对六个默认框的每个重复此操作。
......
......@@ -35,7 +35,7 @@
* NVIDIA Jetson Nano
* Raspberry Pi + Intel 神经网络棒
* 珊瑚开发板+珊瑚 USB 加速器
* Coral 开发板 + Coral USB 加速器
* Orange Pi + Intel 神经网络棒
* ORDOID C2
* Android 手机
......@@ -48,7 +48,7 @@
| Raspberry Pi 4 8​​5 毫米 x 56 毫米 | | 1.5 GHz 时的 ARM Cortex A72 | 4 GB RAM,32 GB 存储 | |
| 珊瑚开发板 48 毫米 x 40 毫米 | 集成的 GC7000 Lite 图形 | 四核 Cortex-A53,加上 Cortex-M4F | 1 GB LPDDR4 | Google Edge TPU ML 加速器协处理器 |
| 橙色 Pi 85 毫米 x 55 毫米 | ARM Mali-400 MP2 GPU @ 600MHz | 4 个 Cortex-A7 @ 1.6 GHz | 1 GB DDR3 SDRAM | |
| ORDOID C2 85 毫米 x 56 毫米 | 马里 450MP3 | ARM Cortex-A53 四核@ 1.5 GHz | 2 GB DDR3 SDRAM | |
| ORDOID C2 85 毫米 x 56 毫米 | 马里 450MP3 | ARM Cortex-A53 四核 @ 1.5 GHz | 2 GB DDR3 SDRAM | |
| 英特尔神经网络棒 | 英特尔 Movidius Myriad X **视觉处理单元****VPU**),具有 16 个处理核心和一个网络硬件加速器 | 英特尔 OpenVINO 工具包 | | |
| 珊瑚 USB 加速器 | Google Edge TPU ML 加速器协处理器,支持 AUTOML Vision Edge | TensorFlow Lite 模型支持 | | |
| Android Pixel XL 155 毫米 x 76 毫米 | Ardeno 530 | 2 个 2.15 GHz Kryo 和 2 个 1.6 GHz Kryo | 4 GB 内存 | |
......@@ -314,15 +314,15 @@ python3 openvino_fd_myriad.py
[英特尔开源技术中心](https://download.01.org/opencv/2019/open_model_zoo/)提供了我们将使用的所有`bin``xml`文件的列表。 。
请注意,当您单击上一个链接时,将看到四个标记为`R1, R2, R3, and R4`的文件夹。 单击一个具有最新日期的日期,在这种情况下为 R1。 在以下屏幕截图中可以看到:
请注意,当您单击上一个链接时,将看到四个标记为`R1, R2, R3, and R4`的文件夹。 单击一个具有最新日期的日期,在这种情况下为`R1`。 在以下屏幕截图中可以看到:
![](img/1f5f007f-c2c0-46bc-8934-ac59097065c8.png)
然后,单击最新文件夹,在这种情况下为`models_bin`。 这将打开一个对话框,显示 FP16,FP32 或 INT8。 对于某些型号,不提供 INT8
然后,单击最新文件夹,在这种情况下为`models_bin`。 这将打开一个对话框,显示`FP16``FP32``INT8`。 对于某些型号,不提供`INT8`
现在,让我们尝试了解这些参数的含义,以便我们可以根据自己的具体应用选择合适的参数。 FP16 将 16 位而不是 32 位用于 FP32,从而减少了训练和推理时间。 另一方面,INT8 使用 8 位整数对神经网络进行权重,渐变和激活的训练。 因此,在这三种方法中,INT8 应该是最快的一种,英特尔声称它仍然保持准确率。
现在,让我们尝试了解这些参数的含义,以便我们可以根据自己的具体应用选择合适的参数。 `FP16`将 16 位而不是 32 位用于`FP32`,从而减少了训练和推理时间。 另一方面,`INT8`使用 8 位整数对神经网络进行权重,渐变和激活的训练。 因此,在这三种方法中,`INT8`应该是最快的一种,英特尔声称它仍然保持准确率。
如果您想了解有关英特尔使用的 8 位训练方法的更多信息,请参阅标题为《神经网络的 8 位训练的可扩展方法》的论文,该论文发表在[这里](https://arxiv.org/abs/1805.11046)。 为了在 Raspberry Pi 等边缘设备上更快地进行处理,建议的方法是使用 FP16 或 INT8(如果有)。
如果您想了解有关英特尔使用的 8 位训练方法的更多信息,请参阅标题为《神经网络的 8 位训练的可扩展方法》的论文,该论文发表在[这里](https://arxiv.org/abs/1805.11046)。 为了在 Raspberry Pi 等边缘设备上更快地进行处理,建议的方法是使用`FP16``INT8`(如果有)。
先前描述的开放模型动物园具有各种预先构建的模型,例如用于人脸检测,人检测,自行车检测等的模型。 这些模型已经过训练,因此我们将在本章中仅出于推理目的使用这些模型。 如果您想了解训练方法,则可以按照“第 10 章”,“使用 R-CNN,SSD,和 R-FCN”。
......@@ -541,15 +541,15 @@ $python3 mo_tf.py --input_model frozen_inference_graph_fasterRCNN.pb --transform
3. **推论**:这可以分为两种独立的方法–通过在终端上执行推论,方法是转到相应的控制器并执行`make run`或使用 Python 代码执行推论。 我发现在 Intel PC 上,所有这些步骤都很容易执行。 但是,在 Raspberry Pi 环境中,使用`make Run`命令在终端中进行操作会导致不同类型的错误。 例如,有时找不到`.bin`或`.xml`文件。 其他时间,环境变量未初始化或找不到`CMakeLists.txt`文件。 执行提供的 Python 代码不会在 Raspberry Pi 中产生任何这些问题。 这也使我们对计算机视觉环境有了更好的了解,因为我们要做的只是获取模型,了解输入和输出,然后生成一些代码以便我们可以显示结果。
在继续下一节之前,让我们总结到目前为止所学的模型优化技术:
1)批量归一化操作与卷积操作融合-OpenVINO 使用
2)将步长大于 1 的卷积移动到过滤器大小 1 到 上层卷积层。 添加池化层以对齐输入形状-OpenVINO 使用
3)用两个小滤镜替换大滤镜,例如将`3 x 3 x 3`用#32 替换为#3,将`3 x 3 x 1`替换为#3,将`1 x 1 x 3`替换为 #32-MobileNet 使用此功能
1)批量归一化操作与卷积操作融合-OpenVINO 使用
2)将步长大于 1 的卷积移动到过滤器大小 1 到 上层卷积层。 添加池化层以对齐输入形状-OpenVINO 使用
3)用两个小滤镜替换大滤镜,例如将`3 x 3 x 3`用`#32`替换为`#3`,将`3 x 3 x 1`替换为`#3`,将`1 x 1 x 3`替换为`#32`-MobileNet 使用它
# TensorFlow Lite 的应用
TensorFlow Lite 是用于边缘设备推理的 TensorFlow 深度学习框架。 与 OpenVINO 相似,TensorFlow Lite 具有内置的预训练深度学习模块。 或者,可以将现有模型转换为 TensorFlow Lite 格式以进行设备上推理。 目前,TensorFlow Lite 为具有内置或外部摄像头的 PC,Android 设备,iOS 设备,Raspberry Pi 和微型微控制器提供推理支持。 访问[这里](https://www.tensorflow.org/lite)了解有关 TensorFlow Lite 的详细信息。
TensorFlow Lite 转换器采用 TensorFlow 模型并生成`FlatBuffer tflite`文件。 `FlatBuffer`文件是高效的跨平台库,可用于访问二进制序列化数据而无需解析。 序列化的数据通常是文本字符串。 二进制序列化数据是以字符串格式写入的二进制数据。 有关 FlatBuffer 的详细信息,[请参考以下链接](https://google.github.io/flatbuffers/)。
TensorFlow Lite 转换器采用 TensorFlow 模型并生成`FlatBuffer tflite`文件。 `FlatBuffer`文件是高效的跨平台库,可用于访问二进制序列化数据而无需解析。 序列化的数据通常是文本字符串。 二进制序列化数据是以字符串格式写入的二进制数据。 有关`FlatBuffer`的详细信息,[请参考以下链接](https://google.github.io/flatbuffers/)。
TensorFlow 输出模型可以是以下类型:
......@@ -583,9 +583,9 @@ tflite_model = converter.convert()
接下来,我们将学习如何使用 TensorFlow 对象检测 API 转换在“第 10 章”,“使用 R-CNN,SSD 和 R-FCN 的对象检测”中开发的训练模型。 Google Colab 使用两种不同的方法-`tflite_convert`和`toco`。
# TensorFlow 对象检测 API – tflite_convert
# TensorFlow 对象检测 API – `tflite_convert`
在以下代码中,我们定义了冻结模型`.pb`文件和相应的`tflite`文件的位置。 然后,我们将三个 RGB 轴的每一个的输入彩色图像的大小调整为(300,300),并将图像转换为归一化张量,然后将其变为转换的输入数组。 有四个输出数组,它们的定义如下:
在以下代码中,我们定义了冻结模型`.pb`文件和相应的`tflite`文件的位置。 然后,我们将三个 RGB 轴的每一个的输入彩色图像的大小调整为`(300, 300)`,并将图像转换为归一化张量,然后将其变为转换的输入数组。 有四个输出数组,它们的定义如下:
* `TFLite_Detection_PostProcess` —检测盒
* `TFLite_Detection_PostProcess:1`-检测类别
......@@ -604,11 +604,11 @@ tflite_model = converter.convert()
--allow_custom_ops
```
# TensorFlow 对象检测 API – toco
# TensorFlow 对象检测 API – TOCO
TOCO 代表 TensorFlow 优化转换器。 要了解对 toco 的详细了解,[请访问以下 GitHub 页面](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/toco)。
TOCO 代表 TensorFlow 优化转换器。 要了解对 TOCO 的详细了解,[请访问以下 GitHub 页面](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/toco)。
以下代码描述了如何使用 toco 转换 TensorFlow 模型。 除了使用`toco`而不是`tflite`之外,代码的第一部分与之前的内容相同。 下一部分使用量化推断类型。 量化是一个过程,用于减小模型大小,同时改善硬件加速延迟。 有多种量化方法,如[这个页面](https://www.tensorflow.org/lite/performance/post_training_quantization)中所述。
以下代码描述了如何使用 TOCO 转换 TensorFlow 模型。 除了使用`toco`而不是`tflite`之外,代码的第一部分与之前的内容相同。 下一部分使用量化推断类型。 量化是一个过程,用于减小模型大小,同时改善硬件加速延迟。 有多种量化方法,如[这个页面](https://www.tensorflow.org/lite/performance/post_training_quantization)中所述。
在这种情况下,我们使用完整的整数量化。 没有使用反量化,但是平均值和标准偏差值用于确定推理代码中的定点乘数:
......@@ -628,7 +628,7 @@ TOCO 代表 TensorFlow 优化转换器。 要了解对 toco 的详细了解,[
[可以在以下 GitHub 链接中找到用于训练和转换的 Google Colab 笔记本的详细信息](https://github.com/PacktPublishing/Mastering-Computer-Vision-with-TensorFlow-2.0/blob/master/Chapter11/Chapter11_Tensorflow_Training_a_Object_Detector_GoogleColab_tflite_toco.ipynb)。
注意,在两个模型之间,我们使用了 toco。 原因是使用 tflite 时,转换后的模型不会在 Android 手机上检测到边界框。
注意,在两个模型之间,我们使用了 TOCO。 原因是使用 tflite 时,转换后的模型不会在 Android 手机上检测到边界框。
TensorFlow 模型可以表示为已保存的模型或 Keras 模型。 以下代码显示了如何将模型另存为已保存的模型或 Keras 模型:
......@@ -672,7 +672,7 @@ sparsity.prune_low_magnitude(l.Conv2D(64, (3, 3), activation='relu'),**pruning_p
有关详细信息,[请访问 TensorFlow 网站](https://www.tensorflow.org/lite/performance/post_training_quantization)。
请注意,在上一节中讨论了使用 Google Colab 对使用 toco 的对象检测模型进行的模型优化。
请注意,在上一节中讨论了使用 Google Colab 对使用 TOCO 的对象检测模型进行的模型优化。
在以下代码中,我们正在优化保存的模型的大小,从而将最终输出模型减小到其原始大小的 1/3 或 1/4:
......@@ -706,7 +706,7 @@ tflite_quant_model = converter.convert()
* TensorFlow Lite 转换为`.tflite`格式的文件
* 更新的 labelmap `.txt`文件显示了该类
如果我们导出`.tflite`文件,则直接来自 Google Colab,如“TensorFlow 对象检测 API – toco”部分中所述。 `lablemap.txt`文件来自`label_map.pbtxt`文件,仅列出了类的名称。
如果我们导出`.tflite`文件,则直接来自 Google Colab,如“TensorFlow 对象检测 API – TOCO”部分中所述。 `lablemap.txt`文件来自`label_map.pbtxt`文件,仅列出了类的名称。
[可以在以下 GitHub 页面上找到示例文件](https://github.com/PacktPublishing/Mastering-Computer-Vision-with-TensorFlow-2.0/blob/master/burgerfries_toco.tflite)。
......@@ -737,7 +737,7 @@ Burger
fries
```
9. 选择 Java,然后选择跟踪,然后双击 DetectorActivity。 将`.tflite`和`.txt`文件的名称更改为其实际名称,如以下屏幕截图所示。 然后,点击 build gradle
9. 选择`Java`,然后选择跟踪,然后双击`DetectorActivity`。 将`.tflite`和`.txt`文件的名称更改为其实际名称,如以下屏幕截图所示。 然后,点击`build gradle`
请注意,对于`.txt`文件,请保留路径,即`file:///android_asset/burgerfries_labelmap.txt`。 稍后,我们将提到,如果未使用`toco`生成`.tflite`文件,则保留先前的路径将导致应用崩溃。 为了防止崩溃,您可以仅保留文件名(例如`burgerfries_labelmap.txt`)。 但是,请注意,这不会为检测到的图像创建边界框。
......@@ -866,7 +866,7 @@ $pod install
即使图像已旋转,前面的屏幕截图也清楚地显示出很好的检测效果。
# 核心 ML
# Core ML
Core ML 是 Apple 的机器学习框架,该框架集成了来自 TensorFlow 等各种来源的神经网络模型,并在必要时进行了转换,然后优化了 GPU/CPU 性能以进行设备上的训练和推理,同时最大程度地减小了应用程序尺寸和功耗。 在 WWDC 2019 中引入的 Core ML 3 更新了设备上特定用户数据的神经网络模型,从而消除了设备到云的交互并最大程度地提高了用户隐私。 有关更多信息,请访问[这里](https://developer.apple.com/machine-learning/core-ml)。 Core ML 本身建立在诸如 Accelerate 和 BNNS 以及 Metal Performance Shaders 之类的低级基元之上。 所有 Core ML 模型均具有`.mlmodel`扩展名。
......@@ -922,7 +922,7 @@ Core ML 的核心部分是 Create ML,它是用于图像分类和对象检测
许多企业将标签工作作为其核心业务模型之一。 每个云服务提供商都与人类标签商合作,为神经网络开发工作执行准确的图像标签服务。 以下是有关在哪里可以找到第三方数据标签服务的一些信息。 请注意,此列表并不全面,因此请在此列表之外进行自己的研究,以找到适合您需求的数据标签服务:
* Google Cloud –数据标签。 有关详细信息,请转到[这里](https://cloud.google.com/ai-platform/data-labeling/docs)。
* Amazon Sagemaker 地面真相–使用 Amazon Mechanical Turk 进行数据标记。 有关详细信息,请转到[这里](https://aws.amazon.com/sagemaker/groundtruth)。
* Amazon Sagemaker 真实情况–使用 Amazon Mechanical Turk 进行数据标记。 有关详细信息,请转到[这里](https://aws.amazon.com/sagemaker/groundtruth)。
* Hive AI 数据标签服务。 有关详细信息,请转到[这里](https://thehive.ai)。
* Cloud Factory 数据标签服务。 有关详细信息,请转到[这里](https://www.cloudfactory.com)。
......
......@@ -179,7 +179,7 @@ for pair in POSE_PAIRS:
![](img/12c75f63-6358-4566-9007-1f3bcfbf9dec.png)
此处, `L[fpd]`是整体 FPD 损失函数,`L[gt]`是用于地面真相注释的置信度图,而`M`是权重函数。
此处, `L[fpd]`是整体 FPD 损失函数,`L[gt]`是用于真实情况注释的置信度图,而`M`是权重函数。
* 使用前面描述的损失函数分别训练教师模型和目标模型。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册