欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

程序员文章站 2022-04-23 22:37:25
...

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

在各行各业全力推进“先进制造、新型基础设施建设、智能绿色制造”的浪潮中,深度学习技术也扮演着至关重要的驱动角色。然而在应用深度学习技术实现产业应用落地过程中,大家往往面临着数据量少、学习周期长、业务验证效率低、数据和算法安全性要求高、部署困难等诸多问题。

飞桨团队经过长时间的产业实践,将在实际业务落地过程中的实际经验进行沉淀,并经过了飞桨开发者、企业用户的多轮测试与迭代,终于在2020年5月20日《WAVESUMMIT》正式发布了飞桨全流程开发工具PaddleX V1.0。PaddleX致力于为中国企业开发者提供最贴近产业实践的深度学习开发工具,一站解决各行各业深度学习项目落地过程中的实际痛点,让用户的深度学习开发过程游刃有余!

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

PaddleX基于飞桨核心框架,集成了飞桨视觉套件(PaddleClas、PaddleDetection、PaddleSeg)、模型压缩工具PaddleSlim、可视化分析工具VisualDL、轻量化推理引擎Paddle Lite等核心模块的能力,同时融合飞桨团队丰富的实际经验及技术积累,将深度学习开发全流程,从数据准备、模型训练与优化到多端部署实现了端到端打通,为开发者提供了最贴合产业实际需求的服务。此外,PaddleX为开发过程中的各个环节提供了最简化的API设计,并实现了图形化GUI供大家使用,最大程度降低开发者使用门槛。开发者既可以应用PaddleX GUI快速体验深度学习模型开发的全流程,也可以直接使用PaddleX API实现更灵活的开发方式。更进一步的,如果用户需要根据自己场景进行定制化GUI的开发, PaddleX 也绝对是不二之选。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

PaddleX 全流程开发工具全景图


四种武器助力用户

快速完成数据准备

数据准备可以说是深度学习开发过程中比较繁琐的一环,就像很多人喜欢烧菜但是却对洗菜切菜这些准备工作敬而远之一样。为了帮助开发者减少这部分工作量,PaddleX与精灵标注、LabelMe、LabelImg等主流标注工具进行深度兼容,可以快速读取COCO、VOC、Imagenet等经典数据集格式的数据。此外,PaddleX还兼容EasyData智能数据服务平台处理的数据格式。通过上述方法,EasyData可以为开发者提供数据采集、标注、清洗、加工等一站式数据服务,尤其是它还可以为用户提供数据智能标注以及对低质数据进行智能清洗的功能。大家可以在EasyData中完成全套的数据准备工作,然后通过PaddleX直接应用导出的数据完成模型的训练及部署。

PaddleX的数据读入方式也是非常简单的,它对不同任务的数据集进行了分类处理方式,只需要一个函数即可完成对指定类型数据集的读入。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

相关文档请参见:

https://paddlex.readthedocs.io/zh_CN/latest/appendix/datasets.html#


简单5步完成识虫模型

如下图所示,PaddleX为大家提供了极简、统一的API,开发者5步就可以完成模型训练。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

下面我们使用目标检测的明星模型YOLOv3来快速实现昆虫识别任务。

1. 图像处理:图像处理模块针对图像分类、目标检测、图像分割分别定义了对应的数据处理的函数Transforms,该函数可以快速完成图片数据增广等预处理工作。本例中我们将使用了MixupImage(混叠)、RandomDistort(随机像素内容变换)、RandomExpand(随机扩张)、RandomCrop(随机裁剪)和RandomHorizontalFlip(随机水平翻转)5种数据增广方式,并使用Normalize和Resize对图像实现归一化。具体代码如下所示。

from paddlex.det import transforms
train_transforms = transforms.Compose([
    transforms.MixupImage(mixup_epoch=250),
    transforms.RandomDistort(),
    transforms.RandomExpand(),
    transforms.RandomCrop(),
    transforms.Resize(target_size=608),
    transforms.RandomHorizontalFlip(),
    transforms.Normalize(),
])
eval_transforms = transforms.Compose([
    transforms.Resize(target_size=608),
    transforms.Normalize(),
])

2. 数据加载:针对不同的任务类型和数据格式,用户可以统一使用datasets函数读取相应数据集。本例使用的数据集为VOC格式,因此采用pdx.datasets.VOCDetection来加载数据集。PaddleX的GUI也是通过同样的逻辑对数据集进行管理,大家可以在集成开发的时候直接采用这种处理方式。

train_dataset = pdx.datasets.VOCDetection(
    # 数据集所在的目录路径
data_dir='insect_det',   
# 数据集图片文件和对应标注文件的文件路径
file_list='insect_det/train_list.txt',
# 数据集包含的类别信息文件路径
label_list='insect_det/labels.txt',
# 数据预处理/增强算子
transforms=train_transforms,
# 对数据集中样本打乱顺序
    shuffle=True)
eval_dataset = pdx.datasets.VOCDetection(
    data_dir='insect_det',
    file_list='insect_det/val_list.txt',
    label_list='insect_det/labels.txt',
    transforms=eval_transforms)

3. 创建模型:PaddleX从飞桨模型库中精选了40+种行业实践中最常用、实际验证效果最好的模型,供大家以非常简单的方式使用,一行代码即可完成组网。本例将使用paddlex.det.YOLOv3类的实例来建立网络。

model = pdx.det.YOLOv3(num_classes=num_classes, backbone='DarkNet53')

4. 模型训练:PaddleX的训练超参配置也是非常简单的,一个model.train函数即可完成。

model.train(
    num_epochs=270,
    train_dataset=train_dataset,
    train_batch_size=8,
    eval_dataset=eval_dataset,
    learning_rate=1e-4,
    lr_decay_epochs=[210, 240],
    save_dir='output/yolov3_darknet53')

5. 模型推理:PaddleX可以仅通过2行代码快速完成推理和推理结果可视化的工作。

# 设置待推理图片所在路径
image_name = 'JPEGImages/0217.jpg'
# 生成模型推理结果
result = model.predict(image_name)
# 将目标检测模型推理得到的Box框在原图上进行可视化
pdx.det.visualize(image_name, result, threshold=0.5, save_dir='./output/yolov3_darknet53')

推理得到的图片如下图所示。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

上述示例的具体操作过程请参见:

https://aistudio.baidu.com/aistudio/projectdetail/442375

PaddleX同时支持非常便捷的C++部署,相关文档请参见:

https://paddlex.readthedocs.io/zh_CN/latest/tutorials/deploy/index.html

此外,我们还在AI Studio上为大家准备了《PaddleX快速上手系列项目》,大家可以直接应用AI Studio的硬件资源进行试验。

https://aistudio.baidu.com/aistudio/projectdetail/450925

多样化硬件适配


深刻考虑产业化落地过程的实际需求,除了传统的服务器和移动端外,飞桨还针对嵌入式硬件例如MTK、海思、寒武纪等做了大量的适配。开发者可以无需自己做硬件op适配和兼容,通过PaddleX集成的原生推理库Paddle Inference以及多平台高性能推理引擎Paddle Lite,就可以快速将模型部署在需要的设备上。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

以上仅是基本功能,PaddleX还为开发者提供了更多进阶功能,来应对多种多样的产业难题。


进阶功能


丰富的数据增强策略

数据增强是我们在面临数据集比较小的情况下,快速且低成本的解决办法。我们不仅提供Paddle工具组件里的各种图片翻转、旋转策略,更与产业中最常用的数据增强库imgaug无缝衔接,支持了上百种数据增强操作。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

相关文档请参见:

https://paddlex.readthedocs.io/zh_CN/latest/apis/transforms/augment.html


可视化分析工具--VisualDL

模型调优过程一直因为复杂、无解释性被大家戏称为“炼丹”,PaddleX GUI通过集成飞桨可视化分析工具VisualDL,并对关键指标预打点,使开发者可以直接调用VisualDL来分析模型的收敛过程。通过损失函数,评估指标,学习率等参数的变化情况,对超参进行快速调整。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

模型压缩工具--PaddleSlim

我们对模型的优化需求往往是多维度的,因此PaddleX通过集成PaddleSlim为大家提供完善的模型压缩策略。通过对模型量化、裁剪、蒸馏,可以得到体积更小,精度几乎无损、推理速度更快的模型,更加适应边缘计算、轻量级计算等诸多场景,满足用户对模型小型化愈发迫切的需求。此外,通过PaddleX进行模型压缩,会更为简单。模型量化只需要1个API,而裁剪只需要2个API即可。相关文档请参见:

https://paddlex.readthedocs.io/zh_CN/latest/tutorials/compress/index.html


模型可解释性

深度学习虽然效果强大,但是和线性模型、树模型等简单模型相比,属于“黑盒”模型,结果难以直接解释。而这样的问题会造成:

  1. 在很多对模型可解释性有强烈需求的场景或者涉及人机协作的应用场景(例如金融、医疗、无人驾驶等行业),模型无法置信,难以直接应用。

  2. 模型效果不理想时,难以分析问题在哪,难以改进。

  3. 涉及模型的公平性时,难以判断模型是否产生了潜在的歧视或偏见。

基于这样的背景,PaddleX集成了由百度大数据实验室和美国俄勒冈大学CBL(Center of Big Learning)中心合作研发的NormLIME(Normalized Local Interpretable Model-agnostic Explanations)算法工具,从而实现模型的可解释性分析。作为百度AutoDL核心算法库重要的新增组件,它可以分析出模型推理结果的依据,具体是通过图片上哪些位置的特征得到的,并且可以以可视化的方式直观地体现出模型的这些判别依据,从而使“黑盒”模型透明化,增强了模型的可信赖度,并辅助开发者对其结果进行分析和诊断。

下图为NormLIME的可解释性分析的一个例子,图中的苹果之所以被正确分类为苹果,是模型提取了高亮地区的特征信息,而非重要的信息,例如标签,就没有被模型标识为重要的信息。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

相关文档请参见:

https://paddlex.readthedocs.io/zh_CN/latest/appendix/interpret.html

模型加密

众所周知,模型加密是产业呼声很高的需求。PaddleX内置了针对深度学习模型的AES对称加密模块,对PaddleX导出的预测模型从明文快速转化为密文模型以及**。而**与PaddleX解密SDK,连同Paddle Inference整体集成为模型加密推理服务,启动服务后,密文模型在内存中解密并加载,生成最终模型推理服务用于交付应用。不仅提高了安全性,而且整个操作实现过程也非常简单,满足开发者在POC阶段的模型轻量级的安全部署需求。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

如果您需要了解更多细节,或者对模型安全有更高要求,可以参考模型加密文档或在社区中联系我们。相关文档请参见:

https://paddlex.readthedocs.io/zh_CN/latest/tutorials/deploy/deploy_server/encryption.html


业务应用


PaddleX如今已经在各行各业中落地应用。我们也聚拢了一批非常给力的开发者小伙伴。不仅PaddleX为开发者们解决了业务问题、提升了开发效率,开发者们也为PaddleX提出了诸多宝贵的建议,甚至项目贡献。

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX

PaddleX当前仍然在快速迭代中,我们诚挚的邀请各位开发者可以应用PaddleX解决您们产业中面临的实际问题或开发出更多形态的产品。希望广大的开发者可以为PaddleX提出宝贵的建议,更欢迎您直接为我们的开源社区贡献项目。

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

PaddleX官网地址:

https://www.paddlepaddle.org.cn/paddle/paddlex

飞桨PaddleX项目地址:

GitHub:

https://github.com/PaddlePaddle/PaddleX

Gitee:

https://gitee.com/paddlepaddle/PaddleX

EasyData官网地址:

https://ai.baidu.com/easydata/

如在使用过程中有问题,可加入飞桨官方QQ群进行交流:703252161PaddleX QQ交流群:1045148026

官网地址:

https://www.paddlepaddle.org.cn

飞桨开源框架项目地址:

GitHub:

https://github.com/PaddlePaddle/Paddle

Gitee: 

https://gitee.com/paddlepaddle/Paddle

END

工欲善其事,必先利其器,飞桨发布全流程开发工具PaddleX