PaddlePaddle / X2Paddle

Deep learning model converter for PaddlePaddle. (『飞桨』深度学习模型转换工具)

Home Page:http://www.paddlepaddle.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

用x2paddle将pytorch 的权重参数文件转换为paddle下的权重参数文件时,权重参数文件中的网路层的名字被强制更改

D-DanielYang opened this issue · comments

问题描述

  • 用x2paddle将pytorch 的权重参数文件转换为paddle下的权重参数文件时,权重参数文件中的网路层的名字被强制更改。
  • 错误截图

1、pytorch下网络结构的定义为:

image

共六层,分别为conv1至cnv6
2、使用x2paddle命令,转换为paddle下的权重文件
x2paddle --framework=onnx --model=onnx_model.onnx --save_dir=pd_model
3、使用paddle.load()函数,加载转换后的model.pdparams
报错
image

4、调试发现,model.pdparams的键值为conv0至conv5
image

原本定义好的各个网络层名字被强制更改。导致键值不匹配。

具体信息

  • 模型来源
    image

  • 应用场景
    用于移动端业务下的检测业务

  • 版本信息
    PaddlePaddle => ❔
    X2Paddle => ❔
    来源框架版本(PyTorch/TF/ONNX/Caffe) => ❔

另外:paddle的模型,张量如何开启半精度模式?
即pytorch里面的model.half()、tensor.half()

commented

Hi, 这里关于权重参数名不同的问题,原因如下

  • 不管是Paddle/PyTorch,对于权重的命名都是由框架来定义的,往往是框架中有一个变量名计数器,以此来命名不同的权重变量
  • 在模型转换中,可能OP会发生顺序变化,例如在PyTorch中被定义在第1的conv,由于没有被第2,第3行代码引用,所以有可能被转到Paddle后,就放到了第4行,这样原本是第1个conv,现在可能变成了第4个conv

基于上面两个因素,转换后权重名并不会保证命名与之前一致,只确认前向结果一致。

关于FP16训练,参考文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/06_distributed_training/data_parallel/amp_cn.html#zidonghunhejingdu