Model-Compression
tangchen2/Model-Compression加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
深度学习模型越做越大:GPT-3 有 1750 亿参数,ResNet152 也有 6000 万。在服务端这不算问题,但当你需要把模型部署到手机、摄像头、工控机甚至智能手表上时,麻烦就来了——存储空间不够、推理速度慢得像蜗牛、电池分分钟耗尽。
Model-Compression 是一个专注于神经网络模型压缩的教学级代码仓库,覆盖了三种主流压缩技术:网络剪枝(Pruning)、知识蒸馏(Knowledge Distillation)和量化(Quantization)。项目基于 PyTorch 实现,以 CIFAR10 数据集上的 VGG16 和 ResNet34/92 为例,提供了一套从训练到压缩到部署的完整流程。适合作为模型压缩的入门教程和实验基准。
剪枝是模型压缩最直观的方法——把神经网络中贡献小的部分去掉,减少参数量。
项目采用 BN剪枝(BatchNorm Scaling Factor Pruning) 方法,源自论文 Network Slimming。核心思想是:在训练过程中给每个通道(channel)的 BatchNorm 层引入一个缩放因子 γ,通过稀疏化训练(L1正则)让不重要的通道对应的 γ 趋近于零,最后根据剪枝率(prune ratio)移除这些通道。
# 稀疏训练:让不重要的通道 γ 趋近于 0
python train.py --arch resnet --depth 36 -sr --s 0.001 --lr 0.01
# 根据剪枝率移除通道
python resprune.py --depth 36 --percent 0.5 # 剪掉50%的通道
实验结果展示了剪枝的威力:ResNet34 原始参数量 406.76K,剪掉 50% 通道后仅剩 225.91K(减少约 44%),精度仅从 90.89% 略降到 89.76%;若剪掉 70% 通道,参数量压缩到 145.81K(减少 64%),但精度会跌至 24.3%——剪枝率过高会导致模型崩溃。
知识蒸馏(KD)是 Hinton 等人在 2015 年提出的技术,核心思路是:让一个大模型(Teacher)指导一个小模型(Student)学习,不仅学习真实标签(hard label),还学习 Teacher 输出的软化概率分布(soft label)。
# 教师模型 ResNet152,学生模型 ResNet34(已剪枝)
python resnet_kd_train.py --lr 0.01
实验中,教师模型 ResNet152 精度 92.04%,学生模型 ResNet34 精度 90.89%。通过知识蒸馏,剪枝 50% 的学生模型精度提升到 91.85%,几乎追平教师模型!蒸馏温度(temperature)和损失权重(alpha)是关键超参数,项目默认 alpha=0.9,temperature=3。
量化是将 32 位浮点数(FP32)权重转换为低位整数(如 INT8)的过程,可以显著减少存储和加速推理。项目使用 MNN(阿里巴巴开源的移动端推理引擎)作为量化工具链。
完整流程:.pth → ONNX → MNN → INT8 量化模型。
实验数据显示,量化效果非常可观:FP32 模型推理耗时 12.5ms、占用 946.9KB;量化后 INT8 模型仅 315KB(压缩 67%),推理速度更快(4.9ms vs 12.5ms)。
不过项目文档也坦承了量化的两个未解决问题:量化后精度下降约 2%(原因未明),以及量化模型推理时间反而比 MNN FP32 模型慢(可能与测试平台不支持 INT8 加速指令有关)。
项目代码结构清晰,分为三大模块:
channel_selection.py 实现通道选择逻辑merge_bn.py 用于将 BatchNorm 层合并到卷积层(推理加速),convert_model.py 处理模型格式转换train.py(稀疏训练)、resprune.py(剪枝)、resnet_kd_train.py(知识蒸馏)、vgg_kd_train.py(VGG 蒸馏)、evaluate.py(性能评估)代码质量方面,项目结构规范,注释详细,但存在几个需要注意的问题:
该项目是一个纯命令行工具,没有 Web UI 或 API 服务,部署复杂度较高:
cuda() 改为 cpu(),但训练会非常缓慢weight/ 目录下提供了已训练好的 ResNet34/92 模型文件,包括正常训练、稀疏训练、剪枝、蒸馏等多个checkpoint,可直接使用这是一个教学性质的项目,作者在 README 中明确定位为"toy tutorial",代码大量参考了 network-slimming、knowledge-distillation-pytorch 等知名仓库的原始实现。项目的主要价值在于提供了一个端到端的压缩流程演示,将剪枝→蒸馏→量化串联起来,让读者对模型压缩全链路有直观理解。
局限性方面:
Variable 已废弃)模型压缩是端侧 AI 落地的关键技术,MIT、韩研院等机构每年都有大量论文聚焦于此。该项目虽然简单,但覆盖了三种核心方法,适合作为 AI 开发者入门模型压缩的实践教材。作者 Tang Chen 的知乎专栏文章也提供了详细解说,配合代码一起学习效果更佳。