183 TinyML实战项目:无人机视觉识别
从一次炸机事故说起
去年夏天,我在测试一款自研的微型四轴无人机时,遇到了一个让我至今记忆犹新的问题。无人机在悬停状态下,突然像喝醉了酒一样开始剧烈抖动,然后一头栽进了旁边的花坛里。事后分析日志发现,罪魁祸首是视觉识别模块——当光照条件变化时,模型推理时间从稳定的12ms突然跳到了47ms,导致飞控的姿态解算和视觉处理产生了严重的时序冲突。
这个教训让我意识到,在无人机这种资源极度受限、实时性要求苛刻的平台上做视觉识别,和在地面服务器上跑模型完全是两码事。今天这篇笔记,我就把踩过的坑和摸索出的经验整理出来,重点聊聊如何在STM32H7这类MCU上,让无人机“看见”并“理解”周围环境。
硬件选型:别被算力数字忽悠
很多人一上来就盯着TOPS(万亿次运算每秒)看,觉得算力越高越好。但在无人机上,功耗和重量才是真正的硬约束。我目前用的方案是STM32H743 + OV2640摄像头模块,主频480MHz,内置2MB Flash和1MB SRAM。这个配置跑轻量级CNN勉强够用,但需要精打细算每一字节内存。
这里踩过坑:一开始我选了带硬件NPU的芯片,想着能加速推理。结果发现NPU驱动占用的内存比模型本身还大,而且NPU在低功耗模式下的唤醒延迟高达200ms,直接导致无人机在快速机动时视觉跟踪丢失。所以对于微型无人机,纯MCU方案反而更可控。
模型选型:MobileNetV1的魔改之路
在无人机上