树莓派5 + Hailo AI加速器:工业级数值数据处理实战,打通SQLite与机器学习全链路

描述

本文讨论了在工业自动化背景下,开发者利用树莓派5和Hailo AI加速器进行工业级数值数据处理实战,打通SQLite与机器学习全链路时遇到的问题及解决方案。关键要点包括:

1.开发者需求:构建能从SQLite数据库提取数值数据、用优化模型分析数据、将结果保存回数据库的高效数据处理流程。

2.基准性能:Hailo-8L模块推理吞吐量为15万次/秒(INT8),SQLite批处理延迟<5ms/批次(100条/批次)。

3.面临挑战:HailoRT版本不包含编译器;Hailo Model Zoo在Python 3.11环境安装失败;工作流模型与数值特征不兼容。

4.社区提问:询问数值数据模型与加速器集成示例、Python版本处理方案、非图像数据处理工作流及工具等。

5.解决方案:下载Dataflow Compiler (DFC),在带GPU的x86机器上进行模型编译。

6.参考实现:可查看树莓派示例适应数值数据处理

7.启发思考:体现社区力量、清晰表达问题、开发者与社区互动的重要性。 

导语

在工业自动化的浪潮中,数据就是力量!树莓派5凭借其强大的性能和丰富的接口,成为了开发者手中的“瑞士军刀”。而Hailo AI加速器的加入,更是为这把“刀”装上了“火箭助推器”!

你是否遇到过这样的难题:海量的数值数据从传感器涌入,传统的计算方法跟不上节奏,数据处理成了瓶颈。别担心,本文将带你走进一个真实的开发故事,看开发者如何用树莓派5和Hailo AI加速器,打造出一个从数据读取到分析,再到结果回写的高效流水线。

开发者的需求:我们想实现什么?

树莓派

在Hailo的开发者社区里面,有一位叫walter.richtscheid的工程师提出一个开发中的问题:

他的目标是构建一个高效的数据处理流程,能够:

1. 从SQLite数据库中提取数值数据。

2. 使用针对Hailo AI加速器优化的机器学习模型对数据进行分析。

3. 将分析结果保存回SQLite数据库。

树莓派

基准性能:

Hailo-8L模块推理吞吐量: 15万次/秒(INT8)

SQLite批处理延迟: <5ms/批次(100条/批次)

面临的挑战

1、编译器缺失

我们安装的HailoRT版本(4.19.0)不包含TensorFlow-to-HEF编译器。

像以下这样的命令无法使用:

  •  

hailortcli compile-tensorflow

2、Hailo Model Zoo安装问题

在我们的Python 3.11环境中,安装Hailo Model Zoo 2.13.0(Python包)时失败,出现以下错误:

  •  

fatal error: longintrepr.h: No such file or directory

lap依赖项似乎与Python 3.11不兼容。

3、工作流模型兼容性

示例HEF中的当前VStreams是基于图像的(NHWC 416x416x3),不适合我们的数值特征(每行3个值)。

我们不确定如何调整管道以适应数值数据处理。

社区提问

由于无法解决,所以这位开发者在社区里提出了自己的问题并寻求Hailo官方的帮助:

1. 是否有关于将数值数据模型(例如DNN)与Hailo AI加速器集成的示例或模板?

2. 我们是否应该将Python版本降级到3.9以确保Model Zoo的兼容性,还是有其他替代方案?

3. 是否有推荐的工作流或编译工具用于非图像数据处理?

4. TAPPAS是否可以用于简化这种数值数据管道?

附加信息

运行64位Raspberry Pi OS的Raspberry Pi 5。

已在虚拟环境中安装并运行TensorFlow 2.18.0。

已经验证了SQLite数据库的输入和输出批处理。

技术支持与解决方案

Hailo的官方在了解到开发者的需求和问题后,迅速做出了回复:

1、下载Dataflow Compiler (DFC)

首先,从我们的开发者区域下载Dataflow Compiler (DFC):

https://hailo.ai/developer-zone/software-downloads/

(需要注册/登录才能访问下载)

2、模型编译(在带有GPU的x86机器上)

将TensorFlow模型转换为ONNX格式:

  •  

python -m tf2onnx.convert --saved-model your_model_dir --output model.onnx

然后使用DFC编译:

完整的数值数据处理管道实现

  •  

import numpy as npimport sqlite3from hailo_platform import HEF, VDevicefrom hailo_rpi_common import app_callback_classclass NumericalDataCallback(app_callback_class):    def __init__(self):        super().__init__()        self.db_path = "results.db"    def save_to_db(self, data):        conn = sqlite3.connect(self.db_path)        cursor = conn.cursor()        cursor.execute('CREATE TABLE IF NOT EXISTS results (id INTEGER PRIMARY KEY, value REAL)')        cursor.executemany('INSERT INTO results (value) VALUES (?)', [(value,) for value in data])        conn.commit()        conn.close()class NumericalDataApp:    def __init__(self, callback, user_data):        self.callback = callback        self.user_data = user_data        self.hef_path = "model.hef"        with VDevice() as vdevice:            hef = HEF(self.hef_path)            self.network_group = vdevice.configure(hef)    def run_inference(self, data):        with self.network_group.create_vstreams() as vstreams:            return vstreams[0].infer(data)    def run(self):        input_data = np.random.rand(1, 3).astype(np.float32)  # 替换为实际数据        results = self.run_inference(input_data)        self.user_data.save_to_db(results)        print(f"Pipeline run complete. Results saved: {results}")if __name__ == "__main__":    user_data = NumericalDataCallback()    app = NumericalDataApp(app_callback, user_data)    app.run()

参考实现

请查看我们的树莓派的示例,这些示例可以适应数值数据处理。

https://github.com/hailo-ai/hailo-rpi5-examples

开发者的回应

由于官方的有力支持,开发者的工作有了很大的进展:

我们非常感谢你提供的关于使用Hailo AI加速器处理数值数据的详尽回复和清晰的分步指导。我们真切地感受到你为分享这一全面解决方案所投入的时间和精力!

目前,我们正在梳理工作流程,并准备实施你建议的步骤,包括数据流编译器和基于Python的管道。在完成测试后,我们将毫无保留地与社区分享我们的成果和任何额外的见解。

再次感谢你的支持和专业知识——在我们持续推进这个项目的过程中,它们简直是无价之宝。

最好的祝福,”

结语:启发与思考

在这个充满挑战的开发过程中,我们学到了很多宝贵的经验。遇到问题并不可怕,关键是如何快速有效地找到解决方案。正如这位开发者所展示的,当你遇到难题时,选择一个合适的渠道寻求帮助是非常重要的。

他选择了Hailo的社区,清晰地描述了自己的问题,并分享了自己的疑问和进展。这种清晰的表达使得Hailo官方能够迅速理解他的需求,并提供正确的建议。结果,问题得到了有效的解决。

这给我们带来了几个重要的启发:

社区的力量:Hailo社区证明了其在技术支持方面的价值。这样的社区不仅是解决问题的地方,更是学习和成长的平台。

清晰的表达:在寻求帮助时,清晰地描述问题和自己的尝试是非常重要的。这有助于他人快速理解并提供帮助。

互动的重要性:开发者与社区的互动是解决问题的关键。通过分享和讨论,我们可以更快地找到答案。

对于树莓派开发者来说,这些经验是非常有参考意义的。它们提醒我们,在开发过程中遇到问题时,不要犹豫寻求帮助,同时也要学会如何有效地利用社区资源。

希望这些思考能够引发你的共鸣,让我们在开发的道路上共同成长,不断探索新的可能性。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分