在树莓派 (tensorflow) 上进行对象检测的项目

Posted

技术标签:

【中文标题】在树莓派 (tensorflow) 上进行对象检测的项目【英文标题】:Project with object detection on raspberry pi (tensorflow) 【发布时间】:2020-12-12 17:06:34 【问题描述】:

我正在做一个包含对象检测 AI 的研究项目,能够通过网络摄像头检测 7 类对象。

使用google colab,我成功训练了ssd_mobilenet_v2_quantized_300x300_coco模型,使用tensorflow 1.15。

目标是在 Raspberry Pi 3b+ 中运行模型,使用官方相机和 Google Coral EdgeTPU 设备,因此必须对模型进行量化才能使用它。

问题出在测试部分;因此在训练模型后,使用以下方法将其转换为 tflite:

!python export_tflite_ssd_graph.py --pipeline_config_path="/content/drive/My Drive/Colab Data/models/research/object_detection/training/ssd_mobilenet_v2_quantized_300x300_coco.config" --trained_checkpoint_prefix=training/model.ckpt-28523 --output_directory=compiler/ --add_postprocessing_op=true

!tflite_convert --graph_def_file=compiler/tflite_graph.pb --output_file=compiler/detect.tflite --output_format=TFLITE --input_shapes=1,300,300,3 --input_arrays=normalized_input_image_tensor --output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3'  --inference_type=QUANTIZED_UINT8 --mean_values=128 --std_dev_values=128 --change_concat_input_ranges=false --allow_custom_ops

转换后的模型:https://gofile.io/d/kOe2Ac 尝试使用 Edje Electronics 网络摄像头脚本测试模型。 found here

并输出此错误:

RuntimeError: tensorflow/lite/kernels/detection_postprocess.cc:404 ValidateBoxes(decoded_boxes, num_boxes) was not true.Node number 98 (TFLite_Detection_PostProcess) failed to invoke.

最奇怪的是,如果我尝试在我当前的工作站(使用 tensorflow 1.15.1)中运行相同的脚本,代码运行完美,所以 rpi 应该有问题。

rpi 正在运行 tensorflow 1.15.2,由 WHL 源代码构建。实际上,我尝试了所有版本,但总是出现相同的错误。

如果能给我带来任何帮助,我将不胜感激。提前致谢。

【问题讨论】:

您是否尝试过从 zoo 准备好的量化模型以在您的 RPi 配置上运行以确保 SW/HW 正常? 是的,已经尝试使用来自 googleapis 的 coco_ssd_mobilenet_v1_1.0_quant_2018_06_29 ......完美运行。所以我仍然不明白为什么会出现这种奇怪的行为。如果我的模型没有得到正确的训练或编译,它将无法在工作站上运行,并且运行良好……也许它与 rpi 上的 tensorflow lite 相关? 是否可以在没有 TPU 的情况下在 RPi 上测试您的模型? 是的,同样的错误也会发生 能否分享一下 tflite 模型或底部的屏幕截图,如 Netron 中所见?什么是“节点号 98”也可以派上用场。它也可以在 netron 中找到。我认为解码器有问题:他们有解码器处理器的自定义操作,它可能与您的更改不兼容。 【参考方案1】:

好的,谢谢你的信息!但是它是如何在其他 pc 上而不是在 rpi 上完美运行的呢?我需要安装 tf-nightly 而不是 tensorflow 吗?这可能是cpu架构的?

【讨论】:

【参考方案2】:

ValidateBoxes 验证检测到的框的xmin, xmax, ymin, ymax 是否有意义。并且问题通常是由检测到的具有相同 xmin/xmax 或 ymin/ymax 的框引起的,不应将其标记为问题,而其余代码和对这种情况的容忍度很好。该问题已在 TFLite 中得到修复,现在可通过 tf-nightly 构建获得。

如果您想从源代码构建 TF,这里是 workaround solution。

【讨论】:

以上是关于在树莓派 (tensorflow) 上进行对象检测的项目的主要内容,如果未能解决你的问题,请参考以下文章

基于深度学习的口罩规范佩戴检测树莓派+PC训练测试

基于深度学习的口罩规范佩戴检测树莓派+PC训练测试

在树莓派4B上使用YOLO V3 TINY进行实时对象检测

树莓派文档翻译 - 使用 - GPIO: 树莓派A和B

树莓派机器学习套件

rust 交叉编译树莓派程序