Home

Awesome

paddle2tlx

持续更新...

功能简介

paddle2tlx 是一款面向 TensorLayerX 的模型转换工具,可以方便的将由 PaddlePaddle 实现的模型迁移到 TensorLayerX 框架上运行。

使用描述

参数说明

参数名称参数描述备注
modle_name模型名称可选(便于转换后验证模型)
model_type模型类别可选(便于转换后验证模型)
input_dir_pdpaddle源工程目录必选
output_dir_tlxtensorlayerx目标工程目录必选
save_tag是否保存转换后的预训练模型模型脚本中设置
pretrained_model转换后预训练模型保存路径模型脚本中设置

使用方式

准备转前 paddle 模型工程代码

将 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 文件以下几个变量的默认值,然后运行该文件执行转换。

命令行方式转换

# 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 目录下,同样按任务区分。

更新记录

模型适配

分类模型

序号模型类别误差前后误差状态方向总表序号
1vgg16(pretrained model)一致0.0完成PaddleClas31
2alexnet(pretrained model)一致0.0完成PaddleClas1
3resnet50(pretrained model)一致0.0完成PaddleClas32
4resnet101(pretrained model)一致0.0完成PaddleClas33
5googlenet(pretrained model)一致0.0完成PaddleClas14
6mobilenetv1(pretrained model)一致0.0完成PaddleClas23
7mobilenetv2(pretrained model)一致0.0完成PaddleClas24
8mobilenetv3(pretrained model)一致0.0完成PaddleClas25
9shufflenetv2(pretrained model)一致0.0完成PaddleClas39
10squeezenet(pretrained model)一致0.0完成PaddleClas40
11inceptionv3(pretrained model)一致0.0完成PaddleClas19
12regnet(pretrained model)一致0.0完成PaddleClas30
13tnt(pretrained model)一致0.0完成PaddleClas41
14darknet53(pretrained model)一致0.0完成PaddleClas46
15densenet(pretrained model)一致0.0完成PaddleClas5
16rednet50(pretrained model)一致0.0完成PaddleClas28
17rednet101(pretrained model)一致0.0完成PaddleClas29
18cspdarknet53(pretrained model)一致0.0完成PaddleClas2
19efficientnet_b1(pretrained model)一致0.0完成PaddleClas11
20efficientnet_b7(pretrained model)一致0.0完成PaddleClas12
21dla34(pretrained model)一致0.0完成PaddleClas7
22dla102(pretrained model)一致0.0完成PaddleClas8
23dpn68(pretrained model)一致0.0完成PaddleClas9
24dpn107(pretrained model)一致0.0完成PaddleClas10
25ghostnet(pretrained model)一致0.0完成PaddleClas13
26hardnet39(pretrained model)一致0.0完成PaddleClas17
27hardnet85(pretrained model)一致0.0完成PaddleClas18
28resnest50(pretrained model)一致0.0完成PaddleClas34
29resnext50(pretrained model)一致0.0完成PaddleClas35
30resnext101(pretrained model)一致0.0完成PaddleClas36
31rexnet(pretrained model)微小误差0.00061244145完成PaddleClas37
32se_resnext(pretrained model)一致0.0完成PaddleClas38
33esnet_x0_5(pretrained model)一致0.0完成PaddleClas47
34esnet_x1_0(pretrained model)一致0.0完成PaddleClas48
35vit(pretrained model)一致0.0完成PaddleClas
36alt_gvt_small(pretrained model)一致0.0完成PaddleClas15
37alt_gvt_base(pretrained model)一致0.0完成PaddleClas16
38swin_transformer_base(pretrained model)0.0PaddleClas3
39swin_transformer_small(pretrained model)0.0PaddleClas4
40pcpvt_base(pretrained model)一致0.0完成PaddleClas26
41pcpvt_large(pretrained model)一致0.0完成PaddleClas27
42xception41(pretrained model)一致0.0完成PaddleClas42
43xception65(pretrained model)一致0.0完成PaddleClas43
44xception41_deeplab(pretrained model)一致0.0完成PaddleClas44
45xception65_deeplab(pretrained model)一致0.0完成PaddleClas45
46levit(pretrained model)一致0.0完成PaddleClas21
47mixnet(pretrained model)微小误差0.00048300158完成PaddleClas22
48convnext(pretrained model)一致0.0完成PaddleClas新增
49cswin(pretrained model)一致0.0完成PaddleClas新增
50deittiny(pretrained model)一致0.0完成PaddleClas新增
51deitsmall(pretrained model)一致0.0完成PaddleClas新增
52deitbase(pretrained model)一致0.0完成PaddleClas新增
53dvt(pretrained model)一致0.0完成PaddleClas新增
54peleenet(pretrained model)一致0.0完成PaddleClas新增
55pp_hgnet(pretrained model)一致0.0完成PaddleClas新增
56pp_lcnet(pretrained model)一致0.0完成PaddleClas新增
57pp_lcnet_v2(pretrained model)一致0.0完成PaddleClas新增
58pvt_v2(pretrained model)一致0.0完成PaddleClas新增
59res2net(pretrained model)一致0.0完成PaddleClas新增
60van(pretrained model)一致0.0完成PaddleClas新增

分割模型

序号模型前后误差状态方向总表序号
1fast_scnn0.0完成PaddleSeg76
2hrnet0.0完成PaddleSeg75
3encnet0.0完成PaddleSeg77
4bisenet0.0完成PaddleSeg83
5fastfcn0.0完成PaddleSeg73
6enet0.0完成PaddleSeg74

检测模型

序号模型前后误差状态方向总表序号
1yolov30.0完成PaddleDec54
2ssd0.0完成PaddleDec60
3yolox0.0完成PaddleDec57
4picodet_lcnet0.0完成PaddleDec67
5fcos_r500.0完成PaddleDec68
6fcos_dcn0.0完成PaddleDec69
7RetinaNet0.0完成PaddleDec64
8Mask_RCNN0.0完成PaddleDec63
9Faster_RCNN0.0完成PaddleDec62
10CascadeRCNN0.0完成PaddleDec70
11SOLOv20.0完成PaddleDec72
12GFL0.0完成PaddleDec新增
13TOOD0.0完成PaddleDec新增
14CenterNet0.0完成PaddleDec新增
15TTFNet0.0完成PaddleDec新增

遥感模型

序号模型前后误差状态方向总表序号
1bit0.0完成PaddleRS98
2cdnet0.0完成PaddleRS87
3stanet0.0完成PaddleRS88
4fcef0.0完成PaddleRS89
5fccdn0.0完成PaddleRS91
6dsamnet0.0完成PaddleRS97
7snunet0.0完成PaddleRS90
8dsifn0.0完成PaddleRS95
9unet0.0完成PaddleRS84
10farseg0.0完成PaddleRS85
11deeplab0.0完成PaddleRS86

生成模型

序号模型前后误差状态方向总表序号
1cyclegan0.0完成PaddleGAN78
2starganv20.0完成PaddleGAN80
3prenet0.0完成PaddleGAN81
4u-gat-it0.0完成PaddleGAN82
5styleganv20.0完成PaddleGAN79

自然语言模型

序号模型前后误差状态方向总表序号
1TextCNN0.0完成PaddleNLP100
2LSTM0.0完成PaddleNLP93
3RNN0.0完成PaddleNLP94

功能优化

20221028

待补充

依赖环境

python=3.7
paddlepaddle==2.3.0
tensorlayerx==0.5.7  # latest

详见 requirements.txt 文件

参考