持续更新...
paddle2tlx 是一款面向 TensorLayerX 的模型转换工具,可以方便的将由 PaddlePaddle 实现的模型迁移到 TensorLayerX 框架上运行。
参数名称 | 参数描述 | 备注 |
---|---|---|
modle_name | 模型名称 | 可选(便于转换后验证模型) |
model_type | 模型类别 | 可选(便于转换后验证模型) |
input_dir_pd | paddle源工程目录 | 必选 |
output_dir_tlx | tensorlayerx目标工程目录 | 必选 |
save_tag | 是否保存转换后的预训练模型 | 模型脚本中设置 |
pretrained_model | 转换后预训练模型保存路径 | 模型脚本中设置 |
将 paddle 模型代码放在自己创建的一个文件夹下,转前和转后代码按模型任务类别进行划分,文件夹包含当前模型源码文件和依赖代码。预训练模型权重存放路径采用的是脚本指定的外部文件夹。以图像分类模型为例,转前模型文件夹结构如下,其中包含60个分类任务的模型定义脚本:
pd_models/ # 转前模型根目录
└── paddleclas # 图像分类模型
├── alexnet.py
├── convnext.py
├── cspdarknet.py
├── cswin_transformer.py
├── darknet53.py
├── deit.py
├── __init__.py
├── ops # 依赖算子
│ ├── __init__.py
│ ├── ops_fusion.py
│ └── theseus_layer.py
└── utils # 通用方法
├── common_func.py
└── __init__.py
...
Pycharm中执行转换
改变 paddle2tlx/convert.py 文件以下几个变量的默认值,然后运行该文件执行转换。
- input_dir_pd:paddle 模型工程代码文件夹
- output_dir_tlx:转换后 tensorlayerx 模型存放文件夹
- model_name:模型名称(可选)
- model_type:模型类别(可选)
命令行方式转换
# 1. 首先, 将 paddle2tlx 工具包装到自己创建的 Python 环境中
pip install -e .
# 2. 然后, 执行代码转换
# 方式1 - 推荐
# 先执行代码转换
paddle2tlx --input_dir_pd pd_models/paddleclas --output_dir_tlx tlx_models/paddleclas
# 转换后单独验证模型
cd examples
python validation.py --input_dir_pd ../pd_models/paddleclas --output_dir_tlx ../tlx_models/paddleclas --model_name vgg16 --model_type clas
# 方式2
# 转换+验证某个模型
paddle2tlx --input_dir_pd pd_models/paddleclas --output_dir_tlx tlx_models/paddleclas --model_name vgg16 --model_type clas
转换后模型的目录结构和转前目录结构保持一致。不同任务类别模型的训练脚本和测试脚本存放在 examples 目录下,可留作单独测试用。不同设备间迁移测试模型时,可以保留 pd_models 和 tlx_models 下的模型工程代码和 examples 目录。
对于不支持的 API 算子,还需对转换工具做适配优化。
如果预训练模型提供了下载链接,会将预训练模型自动下载到 ~/.cache/paddle/hapi/weights
目录,不同任务存放在各自的子文件夹下,如分类模型会自动下载到 ~/.cache/paddle/hapi/weights/paddleclas
目录。
如果预训练模型没有提供下载链接或是自己训练,会将预训练模型统一下载到 pretrain
目录下,同样按任务区分。
序号 | 模型 | 类别误差 | 前后误差 | 状态 | 方向 | 总表序号 |
---|---|---|---|---|---|---|
1 | vgg16(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 31 |
2 | alexnet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 1 |
3 | resnet50(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 32 |
4 | resnet101(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 33 |
5 | googlenet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 14 |
6 | mobilenetv1(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 23 |
7 | mobilenetv2(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 24 |
8 | mobilenetv3(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 25 |
9 | shufflenetv2(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 39 |
10 | squeezenet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 40 |
11 | inceptionv3(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 19 |
12 | regnet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 30 |
13 | tnt(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 41 |
14 | darknet53(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 46 |
15 | densenet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 5 |
16 | rednet50(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 28 |
17 | rednet101(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 29 |
18 | cspdarknet53(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 2 |
19 | efficientnet_b1(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 11 |
20 | efficientnet_b7(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 12 |
21 | dla34(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 7 |
22 | dla102(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 8 |
23 | dpn68(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 9 |
24 | dpn107(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 10 |
25 | ghostnet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 13 |
26 | hardnet39(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 17 |
27 | hardnet85(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 18 |
28 | resnest50(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 34 |
29 | resnext50(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 35 |
30 | resnext101(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 36 |
31 | rexnet(pretrained model) | 微小误差 | 0.00061244145 | 完成 | PaddleClas | 37 |
32 | se_resnext(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 38 |
33 | esnet_x0_5(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 47 |
34 | esnet_x1_0(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 48 |
35 | vit(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | |
36 | alt_gvt_small(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 15 |
37 | alt_gvt_base(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 16 |
38 | swin_transformer_base(pretrained model) | 0.0 | PaddleClas | 3 | ||
39 | swin_transformer_small(pretrained model) | 0.0 | PaddleClas | 4 | ||
40 | pcpvt_base(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 26 |
41 | pcpvt_large(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 27 |
42 | xception41(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 42 |
43 | xception65(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 43 |
44 | xception41_deeplab(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 44 |
45 | xception65_deeplab(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 45 |
46 | levit(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 21 |
47 | mixnet(pretrained model) | 微小误差 | 0.00048300158 | 完成 | PaddleClas | 22 |
48 | convnext(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
49 | cswin(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
50 | deittiny(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
51 | deitsmall(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
52 | deitbase(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
53 | dvt(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
54 | peleenet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
55 | pp_hgnet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
56 | pp_lcnet(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
57 | pp_lcnet_v2(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
58 | pvt_v2(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
59 | res2net(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
60 | van(pretrained model) | 一致 | 0.0 | 完成 | PaddleClas | 新增 |
序号 | 模型 | 前后误差 | 状态 | 方向 | 总表序号 |
---|---|---|---|---|---|
1 | fast_scnn | 0.0 | 完成 | PaddleSeg | 76 |
2 | hrnet | 0.0 | 完成 | PaddleSeg | 75 |
3 | encnet | 0.0 | 完成 | PaddleSeg | 77 |
4 | bisenet | 0.0 | 完成 | PaddleSeg | 83 |
5 | fastfcn | 0.0 | 完成 | PaddleSeg | 73 |
6 | enet | 0.0 | 完成 | PaddleSeg | 74 |
序号 | 模型 | 前后误差 | 状态 | 方向 | 总表序号 |
---|---|---|---|---|---|
1 | yolov3 | 0.0 | 完成 | PaddleDec | 54 |
2 | ssd | 0.0 | 完成 | PaddleDec | 60 |
3 | yolox | 0.0 | 完成 | PaddleDec | 57 |
4 | picodet_lcnet | 0.0 | 完成 | PaddleDec | 67 |
5 | fcos_r50 | 0.0 | 完成 | PaddleDec | 68 |
6 | fcos_dcn | 0.0 | 完成 | PaddleDec | 69 |
7 | RetinaNet | 0.0 | 完成 | PaddleDec | 64 |
8 | Mask_RCNN | 0.0 | 完成 | PaddleDec | 63 |
9 | Faster_RCNN | 0.0 | 完成 | PaddleDec | 62 |
10 | CascadeRCNN | 0.0 | 完成 | PaddleDec | 70 |
11 | SOLOv2 | 0.0 | 完成 | PaddleDec | 72 |
12 | GFL | 0.0 | 完成 | PaddleDec | 新增 |
13 | TOOD | 0.0 | 完成 | PaddleDec | 新增 |
14 | CenterNet | 0.0 | 完成 | PaddleDec | 新增 |
15 | TTFNet | 0.0 | 完成 | PaddleDec | 新增 |
序号 | 模型 | 前后误差 | 状态 | 方向 | 总表序号 |
---|---|---|---|---|---|
1 | bit | 0.0 | 完成 | PaddleRS | 98 |
2 | cdnet | 0.0 | 完成 | PaddleRS | 87 |
3 | stanet | 0.0 | 完成 | PaddleRS | 88 |
4 | fcef | 0.0 | 完成 | PaddleRS | 89 |
5 | fccdn | 0.0 | 完成 | PaddleRS | 91 |
6 | dsamnet | 0.0 | 完成 | PaddleRS | 97 |
7 | snunet | 0.0 | 完成 | PaddleRS | 90 |
8 | dsifn | 0.0 | 完成 | PaddleRS | 95 |
9 | unet | 0.0 | 完成 | PaddleRS | 84 |
10 | farseg | 0.0 | 完成 | PaddleRS | 85 |
11 | deeplab | 0.0 | 完成 | PaddleRS | 86 |
序号 | 模型 | 前后误差 | 状态 | 方向 | 总表序号 |
---|---|---|---|---|---|
1 | cyclegan | 0.0 | 完成 | PaddleGAN | 78 |
2 | starganv2 | 0.0 | 完成 | PaddleGAN | 80 |
3 | prenet | 0.0 | 完成 | PaddleGAN | 81 |
4 | u-gat-it | 0.0 | 完成 | PaddleGAN | 82 |
5 | styleganv2 | 0.0 | 完成 | PaddleGAN | 79 |
序号 | 模型 | 前后误差 | 状态 | 方向 | 总表序号 |
---|---|---|---|---|---|
1 | TextCNN | 0.0 | 完成 | PaddleNLP | 100 |
2 | LSTM | 0.0 | 完成 | PaddleNLP | 93 |
3 | RNN | 0.0 | 完成 | PaddleNLP | 94 |
20221028
待补充
python=3.7
paddlepaddle==2.3.0
tensorlayerx==0.5.7 # latest
详见 requirements.txt 文件