边缘 AI 推理实践
把模型塞进小设备:ONNX 导出、INT8 量化、边缘端推理的最小可行流程。
项目简介
边缘 AI 的目标是 在无云端依赖的端侧完成推理。核心手段:模型导出为 ONNX、量化压缩、轻量运行时推理。本页给出可在本地跑通的最小实验链路。
代码示例:PyTorch 导出 ONNX
py
import torch
class TinyNet(torch.nn.Module):
def __init__(self):
super().__init__()
self.fc = torch.nn.Linear(8, 2)
def forward(self, x):
return torch.softmax(self.fc(x), dim=-1)
model = TinyNet().eval()
dummy = torch.randn(1, 8)
torch.onnx.export(
model, dummy,
"tinynet.onnx",
input_names=["input"], output_names=["output"],
dynamic_axes={"input": {0: "batch"}, "output": {0: "batch"}}
)
print("export ok")代码示例:ONNX Runtime 推理
py
import onnxruntime as ort
import numpy as np
sess = ort.InferenceSession("tinynet.onnx", providers=["CPUExecutionProvider"])
input_name = sess.get_inputs()[0].name
x = np.random.randn(1, 8).astype("float32")
out = sess.run(None, {input_name: x})[0]
print("result:", out)
# 在树莓派 / Android 上可换 providers=["TensorrtExecutionProvider"] 等代码示例:INT8 量化
py
import onnx
from onnxruntime.quantization import quantize_dynamic, QuantType
model_fp32 = "tinynet.onnx"
model_int8 = "tinynet_int8.onnx"
# 动态量化:无需校准集,适合快速压缩
quantize_dynamic(model_fp32, model_int8, weight_type=QuantType.QInt8)
import os
print("size fp32:", os.path.getsize(model_fp32))
print("size int8:", os.path.getsize(model_int8))待完成方向
- 接入真实视觉模型(YOLO/分类),验证端侧帧率与功耗。
- 尝试静态量化 + 校准集,精度损失更小。
- 在树莓派 4 / Jetson Nano 上做部署对比实验。
- 结合摄像头实现实时目标检测 Demo。
操作步骤
pip install onnx onnxruntime后运行导出脚本。- 推理脚本确认输出正确,再执行量化对比文件体积。
- 拷贝 ONNX + 推理脚本到开发板,验证跨平台运行。
来源参考
GitHub 关键词:onnxruntime-examples、edge-ai-deploy、model-quantization-demo(链接可替换为实际仓库地址)。