环境要求

  1. python3
  2. PyTorch >= 1.2.0

    总体使用流程

  3. 通过本工具得到分解之后的float onnx模型,以及MNN模型压缩参数文件

  4. 通过MNN转换工具,输入这两个文件,得到最终的MNN压缩模型

    支持的op,使用建议

  5. 目前支持nn.Conv2d(group>1不支持)和nn.Linear的分解

  6. 建议从已经训练好的float模型开始finetune
  7. 分解之后的模型调整好学习率,准确率一般会迅速恢复

    使用方法

    ```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”)

  1. <a name="WuD8a"></a>
  2. # 相关API
  3. <a name="GeKMf"></a>
  4. ## low_rank_decompose
  5. ```python
  6. low_rank_decompose(model, compress_params_file, skip_layers=[""], align_channels=8,
  7. in_place=False, tucker_minimal_ratio=0.25,
  8. 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实例