AI 推理
espdl – 模型推理 模块使用 ESP-DL(乐鑫的深度学习推理库)在设备上 运行神经网络。ESP-VISION 用面向任务的类封装 ESP-DL,使脚本只需几行就能从图像得到 检测框、姿态或类别标签,而繁重的张量运算由 ESP-DL 在芯片的向量单元上完成(在 ESP32-P4 上还有额外加速)。
.espdl 模型格式
模型以 .espdl 文件分发。一个 .espdl 包含网络结构图、训练好的权重,以及最关键 的 量化 信息。模型需事先从浮点框架(PyTorch、TensorFlow)转换为 ESP-DL 格式; 部署流程见 引入新的模型。模型存放于存储(/sdcard/...)或 flash 数据分区(/flash/...),通过封装类构造函数或 espdl.load_model() 加载。
量化
微控制器没有足够算力以帧率运行完整的 32 位浮点推理,因此 ESP-DL 运行 量化 模型, 通常是 8 位(在精度要求高处使用 16 位)整数运算。量化用一个缩放因子把每个张量的浮点 范围映射到整数,既缩小模型,又让硬件能更快地对整数做乘累加。精度损失通常很小,但这 正是模型必须在转换时量化、而不能直接加载训练检查点的原因。
推理流程
一次 detect()(或 classify())调用隐藏了若干阶段:封装类准备输入,ESP-DL 运行量化网络,封装类再把原始输出解码为 Python 元组:

预处理
推理前,输入图像必须与模型训练时一致:
缩放 到模型的输入分辨率。封装类会自动把采集到的帧缩放到网络输入尺寸。
颜色 顺序与通道数必须匹配(多数检测器期望 RGB)。
归一化 按通道减去
mean再除以std。它们是构造函数关键字 (mean=/std=),便于精确匹配模型期望的预处理;默认值适配随附模型。
后处理
网络的原始输出会被解码为友好的 Python 元组:
目标检测(
espdl.ESPDet、espdl.YOLO11)产生带类别 分数的候选框。置信度score阈值剔除弱框,非极大值抑制(nms)去除 重叠重复,最终得到(x, y, w, h, score, category)元组。YOLO11还用topk限制数量。姿态估计(
espdl.YOLO11nPose)为每个检测附加 17 个 COCO 关键点。分类(
espdl.ImageNetCls)应用可选的softmax,返回topk个(label, score)对。
阈值可在运行时用 set_thresholds 调整而无需重新加载模型,便于适应光照或距离变化。
内存与性能
模型及其激活缓冲较大,分配在 PSRAM 中。请加载一次模型并跨帧复用封装对象,而不要逐帧 重建。用完后调用 deinit()(或释放最后一个引用)以释放模型。检测开销随输入分辨率 增长,因此 espdet_pico 这类较小模型比全尺寸网络帧率更高。