ESP32-S3 上用 SIMD 加速实时机器视觉
开发者 shraiwi 用 ESP32-S3 的 SIMD 指令集实现 FAST 角点检测,在 240 MHz 下实时处理 VGA 30 FPS,比纯标量版本快约两倍。
开发者 shraiwi 最近做了一次颇有极客趣味的尝试:利用 ESP32-S3 的 SIMD 指令集,在 ESP32-S3 上实现 FAST 机器视觉算法。这项工作直接使用该 ISA 的汇编指令,也让作者有机会熟悉这颗基于 Xtensa Lx7 的双核 MCU 的相关部分。
FAST 角点检测的作用
FAST(Features from Accelerated Segment Test)是一种角点检测方法,能够以合理精度实时判断输入帧中是否存在角点。这些角点可能对应物体或其他值得关注的特征,因此对机器视觉十分关键;在此基础上,机器学习还能进一步提升识别准确率。
受限的 SIMD ISA 带来挑战
在 ESP32-S3 上实现该算法并不轻松,原因在于其 SIMD ISA 有一定限制。例如,它缺少无符号字节值之间的比较指令,也不支持直接的非对齐读取。为绕过这些缺失,作者需要一些有创意的编码方式。
实时 VGA 与约两倍加速
最终,运行在 240 MHz 的 ESP32-S3 能够以 30 FPS 实时处理 VGA 视频流。相比只使用非 SIMD 指令的朴素实现,这大约带来了 2 倍的速度提升。
如果想在家跟着尝试,该 PlatformIO 项目已在 GitHub 上公开。
讨论
0 条评论