这篇博客不能算是编程相关,因为只是一次记录而已,代码相关可以参考文末仓库和我的 相关博客
事情的起因是我和同学在准备工创赛,要做一个智能垃圾桶(AI垃圾分类),本来是使用Python
做推理的,并用了PyQt
做前端。
但是没想到哇٩(ŏ﹏ŏ、)۶!那个Qt在树莓派上始终不能正常安装,于是我们考虑换技术栈,我一开始考虑使用libtorch+cpp
的方式实现。不过显然,这个难度完全不是我能对付的……
不过非常不巧(?!),我看到了libtorch
的rust
绑定torch-rs
,加上我之前使用过Tauri
框架,整体来说能满足我的需求,于是乎,本着折腾ʅ(´◔౪◔)ʃ的原则,我开始先解决核心问题——使用Rust
实现yolo
的推理。
其中 这篇文章 给了我很大启发,文章中介绍了yolo在rust推理的基本原理,版本比较陈旧,但是仍然推荐阅读
上古仙术,核心出装 Version-0.1.0
我于是依着葫芦画瓢,写了最初的单文件推理版本,这个版本非常简陋,只包含了图片转Tensor和输出结果到命令行,不过也是初具雏形,但是仍然存在如:
- 没有形成模块化的package,所有东西是混在
main.rs
和yolo.rs
里面 - 没有实现画框和打标签的功能,也就是说完全不能用图片展示
等等问题,反正就是能用,但不是很能用
顺嘴一提,本来是准备用fast-r-cnn的,但是教程有限,我们组就放弃了。还是yolo封装好哇!
法宝现世,曲线救国 Version-0.1.2
由于痛苦的环境配置给我留下了很深刻的印象,在这个版本中,我特意编写了一个启动器,来对主程序进行环境变量的注入,同时编写了两个bat
方便推理,不管怎么说,还是可以比较完美的运行的。
同时,在这个版本,我解决了画框和画字的问题,也就是说,这玩意可以正常运行了(在环境变量正确注入的情况下)。
但是仍然存在一些不足,也就是torch-rs
库本身的问题,使得libtorch
不能正确识别我的GPU
,我在github issues
上看到了解决方案,但是暂时没有想到很好的方法封装进我的仓库。
而且,这个批量推理bat需要反复将模型载入,就是挺抽象的,嗯……
版本链接:点击前往
内存:I'm free~!
丹出~! Version-0.2.X
在这个版本,我把核心库分离出来了,封装成了yolo_binding
这个库,它能在Windows上很好的运行(尽管docs.rs
的构建问题还没有解决),有一个相对好用的接口,一切都按我设想的运行,主程序只要对模型实例化一次,相关的封装也按照我的设想进行了修改……
不管怎么说,对我来说,还是有点成就感的,尽管有这样那样的问题没有解决,但是自己尽力就好~
模块代码:
最后修改于 2025-02-06