神经网络模型蒸馏、剪枝、量化均属于对模型的大小进行缩减的方式,从而提高模型在有限硬件资源上的表现,例如将模型部署到树莓派、jetson-nano、tx2等微小型设备上,从而实现例如人脸检测、种类识别、车辆管理等应用。
模型蒸馏
蒸馏主要是利用教师网络模型来训练学生网络模型,其中教师网络模型是属于结构复杂、参数量巨大的模型,而与之相反,学生网络模型属于结构简单、参数量较小的。通过将教师端的模型经验输送给学生端,从而现实对教师端网络模型的蒸馏。
下面我们用一个实际例子来进行说明:(如果你能理解下面的内容,那么蒸馏的精髓也就理解了)
在HoVer-UNet中,学生网络的训练过程确实涉及到两个主要步骤:计算学生网络与真实标签之间的差异(学生损失),以及计算学生网络与教师网络预测结果之间的差异(蒸馏损失)。以下是详细的步骤:
学生损失(Student Loss):
对于每一张输入图像,学生网络首先会进行前向传播,得到预测结果。然后,这个预测结果会与该图像的真实标签进行比较,计算出学生损失。这个损失反映了学生网络直接从数据中学习的效果
蒸馏损失(Distillation Loss):
接着,教师网络(HoVerNet)对同一张图像进行预测。学生网络的预测结果会与教师网络的预测结果进行比较,计算出蒸馏损失。这个损失反映了学生网络与教师网络预测之间的差异,目的是让学生网络学习教师网络的知识
综合损失(Total Loss):
最后,学生损失和蒸馏损失会根据一定的权重(通常用α表示)合并成一个综合损失。这个综合损失将指导学生网络的训练过程,使得学生网络不仅能够学习到如何准确预测,还能够模仿教师网络的行为
训练反馈:综合损失将被用来更新学生网络的权重,通过反向传播算法进行优化。这样,学生网络在训练过程中既能够学习到数据中的模式,又能够继承教师网络的知识
这个过程确保了学生网络在减少计算需求的同时,能够尽可能地保持教师网络的性能。通过这种方式,HoVer-UNet能够在保持高精度的同时,显著提高推理速度。
模型剪枝
网络剪枝(Network Pruning):
通过删除神经网络中冗余的神经元或连接来减少模型的复杂度和计算量
权重剪枝(Weight Pruning):
通过删除神经网络中冗余的权重来减少模型的复杂度和计算量
模型量化(Quantization):
将神经网络中的权重和激活值从浮点数转换为低精度的整数表示,从而减少模型的存储空间和计算量,例如采用float16来替代float32,从而在量化程度上减小模型量。