记录一次YOLO的RUST实现
Rust小记

这篇博客不能算是编程相关,因为只是一次记录而已,代码相关可以参考文末仓库和我的 相关博客

事情的起因是我和同学在准备工创赛,要做一个智能垃圾桶(AI垃圾分类),本来是使用Python做推理的,并用了PyQt做前端。

但是没想到哇٩(ŏ﹏ŏ、)۶!那个Qt在树莓派上始终不能正常安装,于是我们考虑换技术栈,我一开始考虑使用libtorch+cpp的方式实现。不过显然,这个难度完全不是我能对付的……

不过非常不巧(?!),我看到了libtorchrust绑定torch-rs,加上我之前使用过Tauri框架,整体来说能满足我的需求,于是乎,本着折腾ʅ(´◔౪◔)ʃ的原则,我开始先解决核心问题——使用Rust实现yolo的推理。

其中 这篇文章 给了我很大启发,文章中介绍了yolo在rust推理的基本原理,版本比较陈旧,但是仍然推荐阅读

上古仙术,核心出装 Version-0.1.0

我于是依着葫芦画瓢,写了最初的单文件推理版本,这个版本非常简陋,只包含了图片转Tensor和输出结果到命令行,不过也是初具雏形,但是仍然存在如:

  • 没有形成模块化的package,所有东西是混在main.rsyolo.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的构建问题还没有解决),有一个相对好用的接口,一切都按我设想的运行,主程序只要对模型实例化一次,相关的封装也按照我的设想进行了修改……

不管怎么说,对我来说,还是有点成就感的,尽管有这样那样的问题没有解决,但是自己尽力就好~

模块代码:

github crates.io


最后修改于 2025-02-06