# 模型优化建议

本文档总结一些模型训练优化时的一些方法以供参考

## 重参数化

由于VNNE模型参数量有限，可以考虑在浮点模型训练时将卷积替换成一些重参数化模块，这样可以扩展参数量，在进行量化部署阶段又可以通过重参数化技术将参数合并，得到可以在VNNE硬件上运行的模型。可用重参数化模型参考[Ref-conv](https://github.com/Aiolus-X/RefConv/blob/main/ImageNet-MobileNetv3-RefConv.py)、[RepVGG](https://github.com/DingXiaoH/RepVGG)

## 模型蒸馏

知识蒸馏（Knowledge Distillation, KD）作为一种有效的模型压缩技术，通过让轻量级的“学生”模型学习强大的“教师”模型的知识进而提高轻量级模型的效果。

## 数据工程

轻量化模型由于参数量与计算量有限，对于数据集中的噪声与难样本更难拟合，因此数据清洗和数据过滤是必要的。
1. 数据清洗：
    主要清洗数据集的噪声、错误的图片、错误的标注、统一标注格式与标注标准等，这样会使模型训练更加容易；
2. 数据过滤：
    针对实际应用场景和应用需求对训练数据进行过滤，如过滤掉训练数据中不必要的极小目标，噪声过大、夜晚亮度过暗等场景的图片。


## 通用优化技巧

### 数据增强

1. mosaic
    通过图像拼接扩增数据集丰富度；
2. 多尺度训练
    扩充数据集不同尺度目标的丰富度；
4. 随机色彩增强
    随机光照、随机颜色、随机对比度等扩充颜色亮度的丰富度；

## 模型训练

1. loss-weight
    针对实际应用场景，如目标唤醒场景，不过度关注检测框的准确度，可以相应调整检测的分类和回归的损失权重来优化；
2. assigner
    针对实际应用场景，如果更关注召回率，可以在训练中提高assigner中正样本相关参数的阈值，训练过程中增加正样本比例，优化模型效果；