环境要求
- python3
-
总体使用流程
通过本工具得到分解之后的float onnx模型,以及MNN模型压缩参数文件
通过MNN转换工具,输入这两个文件,得到最终的MNN压缩模型
支持的op,使用建议
目前支持nn.Conv2d(group>1不支持)和nn.Linear的分解
- 建议从已经训练好的float模型开始finetune
- 分解之后的模型调整好学习率,准确率一般会迅速恢复
使用方法
```python from mnncompress.pytorch import low_rank_decompose
加载已经训练好的float模型
model = Net() model.load_state_dict(torch.load(“ori_float_model.pt”))
将原始模型分解,然后用分解之后的模型进行finetune训练即可
model = low_rank_decompose(model, “compress_params.bin”)
<a name="WuD8a"></a>
# 相关API
<a name="GeKMf"></a>
## low_rank_decompose
```python
low_rank_decompose(model, compress_params_file, skip_layers=[""], align_channels=8,
in_place=False, tucker_minimal_ratio=0.25,
reserved_singular_value_ratio=0.5, append=False)
参数: model: nn.Module实例,训练好的float模型 compress_params_file: str, MNN模型压缩参数文件名 skip_layers: List[str], 跳过不分解层的名字,需要是nn.Conv2d或者nn.Linear类型,如[“features.conv1”,] align_channels: int, 分解之后进行通道对齐的倍数 in_place: 分解时是否使用原模型内存空间,若为False,则分解之前会对原模型进行深拷贝 tucker_minimal_ratio: float 0~1, 卷积层tucker分解保留的最低通道数比例 reserved_singular_value_ratio: svd分解保留的特征值之和占总特征值之和的比例 append: bool, 是否将低秩分解算法的参数追加到compress_params_file中去,为False,则将覆盖compress_params_file
返回值:
分解之后的模型,nn.Module实例