Training and Deploying YOLOv8 Vision Model on Hailo-8L AI Accelerator + ROS2 Support

———This Project is completed and has been closed———

训练AI视觉模型什么的轻轻松松,有手和钱(老黄の显卡)就行【暴论】。

好吧,还要玩了多年的Linux(<–还好没有搞崩系统)手艺和Docker(<–一直都不会+强行硬啃)整活

正在写的Documentation:

Current

Training and Deploying YOLOv8 Vision Model on Hailo-8L AI Accelerator (Raspberry Pi AI Kit):

9/8/2024:

问题解决了。很简单,timer设定的时间太短导致publish数据会失败崩溃,因为我是想着每0.032s (1/0.032=~30Hz (fps/帧数))来publish frame image,不过太快似乎系统吃不消,因此改成了每0.1s (1/0.1=10Hz) 10帧每秒来发布视频流,得以减缓了系统的压力。

除此之外,测试时观察了内存占用,看起来也没有内存泄漏,应该不会再崩溃了。

好耶,要解决的问题全完成了,写完documentation就可以close这个project了。

8/8/2024:

今天把《不用display server启动GStreamer的问题》解决了。我太难了,我差不多把GStreamer Pipeline和Video Sink (xvimagesink, fakesink) 都大概看了一遍也才懂了0.01%。

幸运的是,以后可以直接在终端操作一切,树莓派不用再特登需要连接一个HDMI显示器才能运行object detection,那比赛时密封仓里面也不用再放个便携式显示屏来运作自动机器人程序咯~

但是又莫名的bug?results object传着传着变成None Type了?明天研究一下怎么解决,解决完这个问题这个ROS2 Node Package可以卖钱了(//●⁰౪⁰●)//(醒醒别发白日梦)

吃晚饭的时候想了一下逻辑,写了这段出来。这个逻辑应该能解决detection node崩溃的问题

7/8/2024:

我终于成了!!!【摸鱼max启动】

我哭死(again),经过了昨天下午和今天早上加下午不知道有没有30次的组合尝试,我终于找到ROS2为什么publish不出detection results的数据 (ROS2的callback函数不肯动)而导致另一个ROS2 node也订阅不到数据了。

原来,问题就出在这勾八:rclpy.spin()

一加上它,什么困惑烦恼都解决了 ┻━┻╰(艹皿艹 )▄︻┻┳═一

我真的从去年做FYP到现在都还没搞懂这个ROS2 Client Python (rclpy)中的spin()到底怎么用,问AI也是呆头呆脑(编程逻辑境界不够)。以我现在的浅薄的理解来看,应该是设定时间让callback function在期限内被trigger(例如timer设立的callback),否则过了这个时间就会出事(??)卡死(???)

不过解决了就可以!果然想象力很重要,有时候无心摘花这样试原本觉得不可能但实际是正确的方法确实可以节省很多时间~

也算不错,3天把把工作任务做完了 (⁎⁍̴̛ᴗ⁍̴̛⁎)

上demo:

6/8/2024:

我哭死,经过了昨天下午和今天早上不知道有没有50次的组合尝试,我终于把callback function (called when detection data is available from the Hailo pipeline)的detection results (检测物体结果后传回来的HailoBBox object,例如包含坐标/coordinates和检测的confidence) 传给了ROS2 Node实例中名为coordinates的变量。

原来的问题是,执行后ROS2 Node的变量(coordinates)一直保持不变,没有被callback修改,这样我无法在ROS2 Node得到最新数据然后用Topics传送出去。后来发现,原来把Node定义的coordinates放在上面,不要放在__init__(self)就解决了???

可以用ROS2的get_logger().info来在main函数打印最新的detection results

我???真的不懂为什么啊??写在__init__(self)里的话权限不够?

让我问问AI整理一下原因。

好像理解,确实是权限问题,如果把coordinates放在__init__()中初始化,则是实例的私有资源(私有属性),除了main()以外其他函数不能直接访问,而我放在外面则变成了公共资源(公共属性)则可以任由其他函数修改(公共权限)。

这么说的话,其实class的public/private概念我其实学C++也学过,在Python也存在这样的概念,写在init里的是可读不可写,写在init外面的是可读可写,写在init外面和写成 _variable是不可读不可写(吧?)。

不过,我试了一下把coordinates放进init(),然后set_attribute的方法来让callback function来调用 (pass bbox to set_coordinates(self, object): self.coordinates = object)但是似乎没有任何用欸。

算辽,把coordinates放在公共资源区没所谓啊有没有安全私隐问题对吧?一堆坐标在裸奔又有什么所谓呢

更重要的是,原本给自己定的4天期限最后2天做完,又到了我喜爱的摸鱼环节(・∀・)

5/8/2024:

痛苦面具 (前期弄ROS2 nodes配置文件是真的见一次想死一次)

3/8/2024:

啊,痛苦面具。早知道下礼拜一才跟他说好了,我好想摸更多的鱼 (•͈⌔•͈⑅)

要把Hailo的example code改成ROS2的方法,这是做多一次FYP啊(哭)

不过今天无聊看了一下,感觉原执行代码结构上应该不难移植,很多class都是inherit另外一个官方依赖包(library),我只需要把原本的代码和library的代码中需要的一堆启动参数(arguments)改成默认属性(例如default input指向rpi或者/dev/video0来使用树莓派的摄像头(又或者魔改成用ROS2 Parameters来设置),YOLOv8的Halio HEF path改成模型默认存放的路径等例如~/Downloads/gate.hef,这样不用加argument)然后把ROS2 Node塞进去,定时用ROS2 Topics publish detection results (bounding box的xmin, ymin, xmax, ymax, width和height)就可以了(?我真的不肯定)

【如果这个ROS2工具做出来了很多SAUVC队伍应该也想要吧(开不开源好呢)(不,我要他们100USD Paypal捐赠我n杯咖啡/一箱PLA耗材)(别幻想了傻逼这个东西又不难实现)】

(╯‵□′)╯︵┴─┴

下一届FYP topic是ROS2-related的同学要感谢我造的轮子了(・∀・)

1/8/2024:

哈哈嗨,4天期限的任务和问题探讨2天就完成解决了 (找出boundary box的coordinate),这样子我可以摸鱼一整天(糖豆人启动)然后最后一天写documentation ヾ(´︶`*)ノ♬

起初发现这个Hailo AI Python库调用的是C++我真的凋谢和头大不知道怎么弄

感谢ChatGLM教我怎么写和怎么用官方API (直接把整个官方API文档丢给它分析问他怎么处理,然后叫AI写方法和教我。AI真聪明,它甚至教会我调用CV库和用CV的库来画boundary box(所以做出了两个solutions)。

我深感我是垃圾废物,我只是毫无实力骗钱探讨方法的搬运工(AI快帮我赚钱)

我舒(tang)服(ping)了

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇