179、TinyML实战项目:智能交通与车辆检测
TinyML实战项目:智能交通与车辆检测从一次“车检器死机”说起去年夏天,我在一个智慧停车场的边缘节点上调试车辆检测模型。设备运行了大概72小时后,日志突然停在了“Frame 2847: inference timeout”。现场工程师反馈说,摄像头画面卡住了,但设备没重启——这比死机更麻烦,因为系统以为它还在工作。拆开日志一看,问题出在模型推理时间从平均38ms突然跳到了210ms,然后卡死在某个卷积层。后来定位到是DMA传输的缓冲区被上一帧的残差数据污染了。这种“间歇性故障”在TinyML项目里最坑人——你在实验室跑1000帧都没事,一上线就翻车。今天这篇笔记,就围绕“智能交通与车辆检测”这个场景,把我在嵌入式端部署轻量级检测模型时踩过的坑、试过的方案、以及最终沉淀下来的工程套路,掰开揉碎讲清楚。模型选型:别被“高精度”忽悠了很多人一上来就选YOLOv5n或者NanoDet,觉得参数量小就能跑。但嵌入式端的瓶颈从来不是参数量,而是内存带宽和计算模式。我在STM32H743上试过NanoDet-Plus(1.8M参数),理论计算量0.8GFLOPs,看起来很美。实际跑起来,单帧推理需要320ms——因为模型里大量使用Depthwise卷积,而Cortex-M7的SIMD指令对Depthwise支持很差,大部分时间花在数据搬运上。真正适合MCU级车辆检测的,是MobileNetV2-SSD-Lite或者TinyYOLOv3