问题标签 [edge-tpu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
435 浏览

tensorflow - 将 SSD MobileNetV2 自定义模型转换为 edgetpu 模型?

我正在尝试将 mobilenetv2(ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8 ) 模型转换为 EdgeTPU 模型以进行对象检测。我正在使用TF2。

我尝试了许多解决方案,但当我将 tflite 模型转换为边缘 tpu 时仍然有“cpu 操作”。如何转换整个 mobilenet 模型?

这是我的脚步;

  1. 下载预训练模型(mobilenetv2),准备数据集(来自 coco 的特定类)并训练您的模型。
  2. 导出检查点 ./exporter_main_v2.py,现在我在 saved_models 文件下有了“saved_model.pb,assest,checkpoints”。
  3. 转step2,现在安装tf-nightly 2.5.0.dev20210218和“export_tflite_graph_tf2.py”并导出模型。
  4. 这一步,尝试为 edgetpu(8bits) 量化模型并转换为 .tflite 文件。像这样的脚本;
  1. 量化后从 netron 和这些模型属性可视化; 在此处输入图像描述

  2. 我使用“edgetpu_compiler”和我的最终模型将.tflite模型转换为edgetpu模型; 有 7 个 CPU 操作 在此处输入图像描述

0 投票
0 回答
71 浏览

tensorflow - 在 colab 中加载 tensorflow lite edgetpu 模型

我有一个为 edgetpu 编译的 tf lite 模型。

我想通过做类似的事情来恢复 tensorflow 中的模型权重所以 我不必再次训练

我没有edge-tpu,我想在colab中运行代码。当我尝试加载模型时

抛出以下错误:

遇到未解决的自定义操作:edgetpu-custom-op。节点号 1 (edgetpu-custom-op) 准备失败。

0 投票
1 回答
381 浏览

tensorflow - CUSTOM:操作正在处理不受支持的数据类型 EDGETPU

我正在尝试重新训练 Coral USB 的自定义对象检测器模型,并从这些链接中遵循珊瑚 ai 教程;https://coral.ai/docs/edgetpu/retrain-detection/#requirements

重新训练 ssd_mobilenet_v2 模型后,使用 edge tpu 编译器转换边缘 tpu 模型。编译结果是这些;

操作员 数数 地位
风俗 1 操作正在处理不受支持的数据类型
添加 10 映射到边缘 TPU
物流 1 映射到边缘 TPU
级联 2 映射到边缘 TPU
重塑 13 映射到边缘 TPU
CONV_2D 55 映射到边缘 TPU
DEPTHWISE_CONV_2D 17 映射到边缘 TPU

并从 netron 可视化;

在此处输入图像描述

“自定义”运算符未映射。所有操作都在 tpu 上映射和工作,但“自定义”在 cpu 上工作。我在 ssd_mobilenet_v1 中看到了相同的运营商

我如何将所有运算符转换为 edgetpu 模型?什么是自定义运算符?(您可以从这里找到支持的运算符https://coral.ai/docs/edgetpu/models-intro/#supported-operations

0 投票
1 回答
107 浏览

tensorflow - 如何在给定时间内睡觉和唤醒谷歌珊瑚开发板

我是堆栈溢出的新手,我在 Google 珊瑚开发板上的项目需要帮助。我想知道如何让板子在给定的时间内休眠,然后运行一个操作并唤醒。我真的坚持这个希望有人可以帮助我。在此先感谢 tejasawasarmol@gmail.com 麦格理大学

0 投票
1 回答
806 浏览

python - 将 SSD 对象检测模型转换为 TFLite 并将其从浮点数量化为用于 EdgeTPU 的 uint8

我在将 SSD 对象检测模型转换为 EdgeTPU 的 uint8 TFLite 时遇到问题。

据我所知,我一直在不同的论坛、堆栈溢出线程和 github 问题中进行搜索,我认为我正在遵循正确的步骤。我的 jupyter 笔记本上一定有问题,因为我无法实现我的建议。

我正在与您分享我在 Jupyter Notebook 上解释的步骤。我想会更清楚。

设置

此步骤是克隆存储库。如果你以前做过一次,你可以省略这一步。

进口

需要的步骤:这仅用于进行导入

下载友好模型

对于 tflite,建议使用 SSD 网络。我已经下载了以下模型,它是关于“对象检测”的。它适用于 320x320 图像。

用于为每个框添加正确标签的字符串列表。

使用 TFLite 导出和运行

模型转换

在这一步中,我将 pb 保存的模型转换为 .tflite

模型量化(从浮点数到 uint8)

模型转换后,我需要对其进行量化。原始模型选择一个浮点数作为张量输入。因为我想在 Edge TPU 上运行它,所以我需要输入和输出张量为 uint8。

生成校准数据集。

(不要运行这个)。这是上述步骤,但具有随机值

如果您没有数据集,您也可以引入随机生成的值,就像它是图像一样。这是我以前这样做的代码:

要求模型转换

警告:

转换步骤返回警告。

警告:absl:对于包含无法量化的不受支持的操作的模型输入,该inference_input_type属性将默认为原始类型。警告:absl:对于包含无法量化的不受支持的操作的模型输出,该 inference_output_type属性将默认为原始类型。

这让我觉得转换是不正确的。

保存模型

测试

测试 1:获取 TensorFlow 版本

我读到建议为此使用 nightly 。所以就我而言,版本是 2.6.0

测试 2:获取输入/输出张量详细信息

测试 2 结果:

我得到以下信息:

[{'name': 'serving_default_input:0', 'index': 0, 'shape': array([ 1, 320, 320, 3], dtype=int32), 'shape_signature': array([ 1, 320, 320, 3], dtype=int32), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.007843137718737125, 127), 'quantization_parameters': {'scales': array([0.00784314], dtype= float32), 'zero_points': 数组([127], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}] @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@

[{'name': 'StatefulPartitionedCall:31', 'index': 377, 'shape': array([ 1, 10, 4], dtype=int32), 'shape_signature': array([ 1, 10, 4] , dtype=int32), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points ': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:32', 'index': 378, 'shape': array( [ 1, 10], dtype=int32), 'shape_signature': array([ 1, 10], dtype=int32), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0) , 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points':array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:33', 'index': 379, 'shape': array([ 1 , 10], dtype=int32), 'shape_signature': array([ 1, 10], dtype=int32), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), ' quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name ': 'StatefulPartitionedCall:34', 'index': 380, 'shape': array([1], dtype=int32), 'shape_signature': array([1], dtype=int32), 'dtype': <class 'numpy.float32'>, '量化': (0.0, 0), 'quantization_parameters':{'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]

所以,我认为它没有正确量化它

将生成的模型转换为 EdgeTPU

jose@jose-VirtualBox:~/python-envs$ edgetpu_compiler -s /home/jose/codeWorkspace-2.4.1/tf_2.4.1/tflite/model_full_integer_quant.tflite Edge TPU 编译器版本 15.0.340273435

模型在 1136 毫秒内成功编译。

输入模型:/home/jose/codeWorkspace-2.4.1/tf_2.4.1/tflite/model_full_integer_quant.tflite 输入大小:3.70MiB 输出模型:model_full_integer_quant_edgetpu.tflite 输出大小:4.21MiB 用于缓存模型参数的片上内存:3.42 MiB 用于缓存模型参数的片上内存:4.31MiB 用于流式传输未缓存模型参数的片外内存:0.00B 边缘 TPU 子图数:1 操作总数:162 操作日志:model_full_integer_quant_edgetpu.log

模型已成功编译,但 Edge TPU 并不支持所有操作。模型的一部分将改为在 CPU 上运行,CPU 速度较慢。如果可能,请考虑更新您的模型以仅使用 Edge TPU 支持的操作。有关详细信息,请访问 g.co/coral/model-reqs。将在 Edge TPU 上运行的操作数:112 将在 CPU 上运行的操作数:50

操作员计数状态

LOGISTIC 1 操作在其他方面受支持,但由于某些未指定的限制而未映射 DEPTHWISE_CONV_2D 14 不支持多个子图 DEPTHWISE_CONV_2D 37 映射到边缘 TPU QUANTIZE 1 映射到边缘 TPU QUANTIZE 4 否则支持操作,但由于某些未指定而未映射限制 CONV_2D
58 映射到边缘 TPU CONV_2D 14
不支持多个子图 DEQUANTIZE
1 操作正在处理不受支持的数据类型 DEQUANTIZE 1 操作在其他方面受支持,但由于某些未指定的限制而未映射 CUSTOM 1
操作正在处理不受支持的数据类型 ADD
2 不支持多个子图 ADD
10 映射到边缘 TPU CONCATENATION 1
否则支持操作,但由于某些未指定的限制而未映射 CONCATENATION 1 不支持多个子图 RESHAPE 2
操作否则支持,但由于某些未指定的限制而未映射 RESHAPE 6
映射到边缘 TPU RESHAPE 4 不支持多个子图 PACK 4
张量具有不受支持的等级(最多映射 3 个最里面的维度)

我准备的 jupyter notebook 可以在以下链接中找到:https ://github.com/jagumiel/Artificial-Intelligence/blob/main/tensorflow-scripts/Step-by-step-explaining-problems.ipynb

有没有我遗漏的步骤?为什么没有导致我的转换?

非常感谢您提前。

0 投票
0 回答
46 浏览

tensorflow - 使用单个类重新训练 ssd_inception_v2 模型成功,但在某些步骤后使用两个类失败

我的任务是训练对象检测模型以检测单个类person)并将模型转换为 edgetpu 模型以在连接了 Coral 的 Raspberry Pi 上运行。最初我使用ssd_mobilenet_v2_quantized_coco模型,然后使用ssd_inception_v2_coco模型(均来自tensorflow 模型 zoo)作为重新训练的基础模型。它们都经过重新训练、转换和部署在 Raspberry Pi 中以成功进行图像检测。

在 docker 中运行的 Ubuntu 18.04 和 TensorFlow 1.14 (tensorflow:1.14.0-gpu-py3)

当需要第二类(计算机)时,我尝试重新训练ssd_inception_v2作为具有两个类人和计算机)的基本模型。观察结果:

model-ckpt-18000(18000步后创建的检查点)成功转换为edgetpu模型

但是 model-ckpt-20000(在 20,000 步后创建的检查点)失败并出现错误

我使用相同的步骤来编译 ssd_mobilenet_v2_quantized_coco 模型,并且该过程成功且没有任何错误。

涉及的步骤:

  1. 重新训练模型

如有必要,我将共享 ssd_mobilenet_v2_quantized_coco 和 ssd_inception_v2_coco 的 pipeline.config 文件。我放弃了它,因为帖子已经很长了。

  1. 将检查点转换为冻结图:
  1. 将冻结图转换为 tflite
  1. 编译 tflite 模型

我搜索了与此类似的错误,但大多数帖子与此场景无关。使用ssd_inception_v2_coco时,针对单个类进行训练的过程是成功的,但是针对两个类进行训练的过程会产生错误。有人请指出过程中的错误吗?如果需要更多信息,请告诉我。

0 投票
0 回答
86 浏览

tensorflow-lite - 如何在 Mobile Net 中对量化的 TensorFlow lite 模型使用批量标准化?

我想在嵌入式系统(Coral USB 加速器)上运行移动网络来分析我转换为频谱图的录音。我已经根据Tensorflow中的Mobile Net 论文实现了该模型。

要在 Coral USB 加速器上运行它,我需要对其进行量化并将其转换为 TensorFlow Lite 模型(然后使用 Edge TPU 编译器再次编译它)。但在从 32 位浮点数量化到 8 位整数后,预测会变得更糟。问题似乎是批量标准化keras.layers.BatchNormalization()。这不是 TensorFlow lite 中允许的指令。但是由于 Mobile Net 是专门为嵌入式系统设计的,而 Batch Normalization 是其中的基础部分,我无法想象这在 Edge TPU 上是不可能的。所以我想问一下是否有人知道获得 Mobile Net 的解决方法,特别是在 Coral USB 加速器上工作的批量标准化?

非常感谢您提前提供的帮助和建议!

0 投票
1 回答
238 浏览

raspberry-pi - 使用没有 Google Coral USB 的 tensorflow lite 进行图像分类

我正在尝试使用 Google Goral Edge TPU USB 设备评估 Raspberry Pi 的性能,而没有它对视频文件的图像分类任务。我已经设法使用 Edge TPU USB 设备评估了性能。但是,当我尝试运行 tensorflow lite 代码来运行推理时,它会出现一个错误,告诉我需要插入设备:

我具体做的是使用珊瑚设备对视频进行推理,并保存视频中的每一帧以对硬件进行基准测试。

此代码用于使用珊瑚设备运行推理。我想知道如何在没有珊瑚的情况下做同样的事情?我想测试使用我的模型有和没有边缘 tpu usb 设备之间的差异。

最后,我尝试使用 tensorflow lite从这个链接进行图像分类。但是,我收到以下错误:

RuntimeError: Encountered unresolved custom op: edgetpu-custom-op.Node number 0 (edgetpu-custom-op) 准备失败。

0 投票
0 回答
23 浏览

raspberry-pi4 - 无法在我的 Raspberry CompNode 和 M.2 模块上安装驱动程序

我非常想在我的 RaspBerry ComputeBoard 上使用 M.2 - 模块。

关于命令 lsmod 和 lspci 我看到了模块,但是在安装这两个软件包时,我收到以下错误消息:

由于似乎没有安装此内核的内核头文件,因此跳过了内核 5.10.17-v8+ 的模块构建。

此计算机的 HEADER 库已安装:

apt list linux-headers* Listing... 完成 linux-headers-5.10.0-7-arm64/testing,now 5.10.40-1 arm64 [已安装,自动] linux-headers-5.10.0-7-armmp-lpae /testing 5.10.40-1 armhf linux-headers-5.10.0-7-armmp/testing 5.10.40-1 armhf linux-headers-5.10.0-7-cloud-arm64/testing 5.10.40-1 arm64 linux- headers-5.10.0-7-common-rt/testing,测试 5.10.40-1 所有 linux-headers-5.10.0-7-common/testing,测试,现在 5.10.40-1 所有 [已安装,自动] linux -headers-5.10.0-7-rt-arm64/testing 5.10.40-1 arm64 linux-headers-5.10.0-7-rt-armmp/testing 5.10.40-1 armhf linux-headers-arm64/testing,现在5.10.40-1 arm64 [已安装,自动] linux-headers-armmp-lpae/testing 5.10.40-1 armhf linux-headers-armmp/testing 5.10.40-1 armhf linux-headers-cloud-arm64/testing 5.10。 40-1 arm64 linux-headers-rt-arm64/测试 5.10.40-1 arm64 linux-headers-rt-armmp/测试 5.10.40-1 armhf

我还能做什么,因为没有内核 5.10.17-v8+ 的 HEADER 库。

如果有人可以在这里帮助我,我会很高兴。来自柏林的问候

马蒂亚斯

0 投票
0 回答
42 浏览

google-coral - macOS BigSur 无法识别 Google Edge TPU 开发板

我无法开始使用边缘 Tpu 开发板。按照说明,我已经完成了前三个步骤。

但是,根据第 4 步,我必须通过本地网络创建 MDT。

每次我跑 ls /dev/cu.usbmodem*。外壳出现:

zsh:未找到匹配项:/dev/cu.usbmodem*

该命令的结果mdt shell仍在等待设备。

该解决方案screen /dev/cu.SLAB_USBtoUART 115200还显示我不存在任何文件。

还有,板子上电一段时间后风扇停转是正常的吗?