X2Paddle icon indicating copy to clipboard operation
X2Paddle copied to clipboard

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

Open D-DanielYang opened this issue 2 years ago • 1 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 => :grey_question: X2Paddle => :grey_question: 来源框架版本(PyTorch/TF/ONNX/Caffe) => :grey_question:

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

D-DanielYang avatar Apr 28 '23 17:04 D-DanielYang

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

jiangjiajun avatar May 05 '23 02:05 jiangjiajun