飞桨团队经过长时间的产业实践,将在实际业务落地过程中的实际经验进行沉淀,并经过了飞桨开发者、企业用户的多轮测试与迭代,终于在2020年5月20日《WAVESUMMIT》正式发布了飞桨全流程开发工具PaddleX V1.0。PaddleX致力于为中国企业开发者提供最贴近产业实践的深度学习开发工具,一站解决各行各业深度学习项目落地过程中的实际痛点,让用户的深度学习开发过程游刃有余!
PaddleX基于飞桨核心框架,集成了飞桨视觉套件(PaddleClas、PaddleDetection、PaddleSeg)、模型压缩工具PaddleSlim、可视化分析工具VisualDL、轻量化推理引擎Paddle Lite等核心模块的能力,同时融合飞桨团队丰富的实际经验及技术积累,将深度学习开发全流程,从数据准备、模型训练与优化到多端部署实现了端到端打通,为开发者提供了最贴合产业实际需求的服务。此外,PaddleX为开发过程中的各个环节提供了最简化的API设计,并实现了图形化GUI供大家使用,最大程度降低开发者使用门槛。开发者既可以应用PaddleX GUI快速体验深度学习模型开发的全流程,也可以直接使用PaddleX API实现更灵活的开发方式。更进一步的,如果用户需要根据自己场景进行定制化GUI的开发, PaddleX 也绝对是不二之选。
PaddleX 全流程开发工具全景图
四种武器助力用户
快速完成数据准备
数据准备可以说是深度学习开发过程中比较繁琐的一环,就像很多人喜欢烧菜但是却对洗菜切菜这些准备工作敬而远之一样。为了帮助开发者减少这部分工作量,PaddleX与精灵标注、LabelMe、LabelImg等主流标注工具进行深度兼容,可以快速读取COCO、VOC、Imagenet等经典数据集格式的数据。此外,PaddleX还兼容EasyData智能数据服务平台处理的数据格式。通过上述方法,EasyData可以为开发者提供数据采集、标注、清洗、加工等一站式数据服务,尤其是它还可以为用户提供数据智能标注以及对低质数据进行智能清洗的功能。大家可以在EasyData中完成全套的数据准备工作,然后通过PaddleX直接应用导出的数据完成模型的训练及部署。
PaddleX的数据读入方式也是非常简单的,它对不同任务的数据集进行了分类处理方式,只需要一个函数即可完成对指定类型数据集的读入。
相关文档请参见:
https://paddlex.readthedocs.io/zh_CN/latest/appendix/datasets.html#
简单5步完成识虫模型
下面我们使用目标检测的明星模型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')
推理得到的图片如下图所示。
上述示例的具体操作过程请参见:
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
多样化硬件适配
以上仅是基本功能,PaddleX还为开发者提供了更多进阶功能,来应对多种多样的产业难题。
进阶功能
数据增强是我们在面临数据集比较小的情况下,快速且低成本的解决办法。我们不仅提供Paddle工具组件里的各种图片翻转、旋转策略,更与产业中最常用的数据增强库imgaug无缝衔接,支持了上百种数据增强操作。
相关文档请参见:
https://paddlex.readthedocs.io/zh_CN/latest/apis/transforms/augment.html
模型调优过程一直因为复杂、无解释性被大家戏称为“炼丹”,PaddleX GUI通过集成飞桨可视化分析工具VisualDL,并对关键指标预打点,使开发者可以直接调用VisualDL来分析模型的收敛过程。通过损失函数,评估指标,学习率等参数的变化情况,对超参进行快速调整。
我们对模型的优化需求往往是多维度的,因此PaddleX通过集成PaddleSlim为大家提供完善的模型压缩策略。通过对模型量化、裁剪、蒸馏,可以得到体积更小,精度几乎无损、推理速度更快的模型,更加适应边缘计算、轻量级计算等诸多场景,满足用户对模型小型化愈发迫切的需求。此外,通过PaddleX进行模型压缩,会更为简单。模型量化只需要1个API,而裁剪只需要2个API即可。相关文档请参见:
https://paddlex.readthedocs.io/zh_CN/latest/tutorials/compress/index.html
深度学习虽然效果强大,但是和线性模型、树模型等简单模型相比,属于“黑盒”模型,结果难以直接解释。而这样的问题会造成:
在很多对模型可解释性有强烈需求的场景或者涉及人机协作的应用场景(例如金融、医疗、无人驾驶等行业),模型无法置信,难以直接应用。
模型效果不理想时,难以分析问题在哪,难以改进。
涉及模型的公平性时,难以判断模型是否产生了潜在的歧视或偏见。
基于这样的背景,PaddleX集成了由百度大数据实验室和美国俄勒冈大学CBL(Center of Big Learning)中心合作研发的NormLIME(Normalized Local Interpretable Model-agnostic Explanations)算法工具,从而实现模型的可解释性分析。作为百度AutoDL核心算法库重要的新增组件,它可以分析出模型推理结果的依据,具体是通过图片上哪些位置的特征得到的,并且可以以可视化的方式直观地体现出模型的这些判别依据,从而使“黑盒”模型透明化,增强了模型的可信赖度,并辅助开发者对其结果进行分析和诊断。
下图为NormLIME的可解释性分析的一个例子,图中的苹果之所以被正确分类为苹果,是模型提取了高亮地区的特征信息,而非重要的信息,例如标签,就没有被模型标识为重要的信息。
相关文档请参见:
https://paddlex.readthedocs.io/zh_CN/latest/appendix/interpret.html
众所周知,模型加密是产业呼声很高的需求。PaddleX内置了针对深度学习模型的AES对称加密模块,对PaddleX导出的预测模型从明文快速转化为密文模型以及密钥。而密钥与PaddleX解密SDK,连同Paddle Inference整体集成为模型加密推理服务,启动服务后,密文模型在内存中解密并加载,生成最终模型推理服务用于交付应用。不仅提高了安全性,而且整个操作实现过程也非常简单,满足开发者在POC阶段的模型轻量级的安全部署需求。
如果您需要了解更多细节,或者对模型安全有更高要求,可以参考模型加密文档或在社区中联系我们。相关文档请参见:
https://paddlex.readthedocs.io/zh_CN/latest/tutorials/deploy/deploy_server/encryption.html
业务应用
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群进行交流:703252161。PaddleX QQ交流群:1045148026。
官网地址:
https://www.paddlepaddle.org.cn
飞桨开源框架项目地址:
GitHub:
https://github.com/PaddlePaddle/Paddle
Gitee:
https://gitee.com/paddlepaddle/Paddle
END