问题标签 [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.
tensorflow - 将 SSD MobileNetV2 自定义模型转换为 edgetpu 模型?
我正在尝试将 mobilenetv2(ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8 ) 模型转换为 EdgeTPU 模型以进行对象检测。我正在使用TF2。
我尝试了许多解决方案,但当我将 tflite 模型转换为边缘 tpu 时仍然有“cpu 操作”。如何转换整个 mobilenet 模型?
这是我的脚步;
- 下载预训练模型(mobilenetv2),准备数据集(来自 coco 的特定类)并训练您的模型。
- 导出检查点 ./exporter_main_v2.py,现在我在 saved_models 文件下有了“saved_model.pb,assest,checkpoints”。
- 转step2,现在安装tf-nightly 2.5.0.dev20210218和“export_tflite_graph_tf2.py”并导出模型。
- 这一步,尝试为 edgetpu(8bits) 量化模型并转换为 .tflite 文件。像这样的脚本;
tensorflow - 在 colab 中加载 tensorflow lite edgetpu 模型
我有一个为 edgetpu 编译的 tf lite 模型。
我想通过做类似的事情来恢复 tensorflow 中的模型权重所以 我不必再次训练
我没有edge-tpu,我想在colab中运行代码。当我尝试加载模型时
抛出以下错误:
遇到未解决的自定义操作:edgetpu-custom-op。节点号 1 (edgetpu-custom-op) 准备失败。
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)
tensorflow - 如何在给定时间内睡觉和唤醒谷歌珊瑚开发板
我是堆栈溢出的新手,我在 Google 珊瑚开发板上的项目需要帮助。我想知道如何让板子在给定的时间内休眠,然后运行一个操作并唤醒。我真的坚持这个希望有人可以帮助我。在此先感谢 tejasawasarmol@gmail.com 麦格理大学
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
有没有我遗漏的步骤?为什么没有导致我的转换?
非常感谢您提前。
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 模型,并且该过程成功且没有任何错误。
涉及的步骤:
- 重新训练模型
如有必要,我将共享 ssd_mobilenet_v2_quantized_coco 和 ssd_inception_v2_coco 的 pipeline.config 文件。我放弃了它,因为帖子已经很长了。
- 将检查点转换为冻结图:
- 将冻结图转换为 tflite
- 编译 tflite 模型
我搜索了与此类似的错误,但大多数帖子与此场景无关。使用ssd_inception_v2_coco时,针对单个类进行训练的过程是成功的,但是针对两个类进行训练的过程会产生错误。有人请指出过程中的错误吗?如果需要更多信息,请告诉我。
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 加速器上工作的批量标准化?
非常感谢您提前提供的帮助和建议!
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) 准备失败。
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 库。
如果有人可以在这里帮助我,我会很高兴。来自柏林的问候
马蒂亚斯