078、模型加密与 IP 保护:ONNX 模型加密、混淆与运行时解密方案
一、一个让我熬夜三天的调试问题
去年做工业质检项目,客户要求把训练好的YOLOv8模型部署到现场工控机上。模型跑得挺好,mAP 0.89,推理速度30ms。结果上线第三天,客户现场的技术员发来一张截图——有人用Netron打开了我们的ONNX模型,网络结构、权重分布一览无余。更离谱的是,对方还问能不能把模型拷走自己用。
我当时就意识到:ONNX模型裸奔部署,等于把源代码直接发给用户。从那以后,我开始系统研究模型加密方案。今天这篇笔记,就是我在YOLOv6/v8/v11上踩过的坑和最终落地的方案。
二、ONNX模型为什么需要加密
ONNX本身是protobuf序列化的文件,用Netron、ONNX Runtime自带的工具都能直接解析。攻击者拿到模型文件后,可以:
- 提取网络结构,复现你的算法设计
- 获取权重参数,直接用于推理
- 修改模型,植入后门或恶意逻辑
- 二次分发,侵犯知识产权
对于商业项目,尤其是边缘端部署,模型加密不是可选项,是必选项。
三、三种主流加密方案对比
方案一:文件级AES加密(最常用,但别踩坑)
思路:把ONNX文件用AES加密成二进制文件,推理时先解密到内存再加载。