好了好了,到了给这个系列收尾的时候了。回头看看,这个叫 rkyolo
的小东西,从一个念头开始,居然真的被我一点点攒成了一个能跑、能看、还能给自己打分的 Rust 推理框架,想想也是挺神奇的。
在这最后一篇,咱不吹牛,就唠点实在的。说说我都捣鼓了啥,还有哪些地方让我挠头,以及以后还能怎么接着玩。
技术的积累与兑现
这个项目的推进,很大程度上得益于之前在一些技术领域的持续投入和实践。
- 对 Rust 的持续学习和使用,让我能相对顺利地处理 FFI 和安全问题;
- 对 YOLO 模型原理的理解,帮助我在遇到“指鹿为马”或结构崩溃时,能较快地定位到本质;
- 之前和 Linux、交叉编译打交道的经验,也为整个项目铺平了道路。
回头看看,技术成长确实离不开积累,很多之前的摸索都在这个项目里用上了。
哪哪都是可以接着折腾的地方
写代码最怕的就是觉得自己搞出来的东西完美无缺。我心里门儿清,rkyolo
也就是个“能用”的水平,离“好用”还差得远呢:
一根筋的流程:现在处理视频是一帧一帧来的,等上一帧全忙活完了才下一帧。要是想同时处理好多路视频,这肯定得卡成 PPT。以后得用上
tokio
这类异步运行时,让它们同时干活,效率才能上去。CPU 老黄牛:缩放图片、填白边这些杂活全是 CPU 在干。但其实 RK3588 板子上有个叫 RGA 的硬件小弟(专门处理 2D 图形),活好还不占 CPU 资源。下次得想办法让它来扛活。
还不够灵活:现在的后处理虽然能自适应不同输出,但基本还是围着 YOLO 转。万一以后想跑个结构完全不一样的模型(比如基于 Transformer 的),可能就歇菜了。我看 Rockchip 的 SDK 里提到了自定义算子的功能,说不定以后可以搞个插件系统,让用户自己写处理逻辑,那可就太酷了。
画个未来的大饼
rkyolo
解决了模型在板子上跑起来和评估的问题,但在这之前,还得先把模型转成 RKNN 格式。我之前用 Docker 封装了一个转换工具,一行命令就能转模型:
1 | pt2rknn --pt_model ... --output ... --platform rk3588 --quant_mode i8 --data_yaml ... |
我下一个想折腾的,是把这个转换过程做成个网页服务。想象一下,以后用户只需要在网页上传个模型文件,点几下按钮,就能下载转换好的模型,是不是方便多了?最后再把模型转换和 rkyolo
部署连起来,搞个一条龙服务,从训练到部署都不叫事儿。
最后唠点心里话
捣鼓 rkyolo
的整个过程,让我着迷的其实不光是目标检测本身。
不管是琢磨怎么让 NPU 多核并行干活,还是死磕怎么把数据直接塞进硬件省掉拷贝,甚至是做个工具来自动找出模型在哪儿犯了蠢……我发现我真正乐在其中的,是把一个个复杂的系统理顺、调通、然后让它跑得更快更好的这个过程。
rkyolo
就是我这个想法的一次实践,算是个开始。以后的路还长着呢,肯定还有更多好玩又烧脑的东西在等着。
我已经等不及想看看下一站又能折腾点啥出来了!