机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

以下为你介绍的机器学习/深度学习软件都可用在Linux系统上:MediaPipe(构建多模式应用的机器学习管道)、PaddleHub(深度学习模型开发工具)、DeOldify(让黑白老照片和视频恢复原彩)、DLRM(全称是Deep Learning Recommendation Model,深度学习推荐模型)。

1、MediaPipe(构建多模式应用的机器学习管道)

MediaPipe 是一个基于图形的跨平台框架,用于构建多模式(视频,音频和传感器)应用的机器学习管道。

MediaPipe 可在移动设备、工作站和服务器上跨平台运行,并支持移动 GPU 加速。使用 MediaPipe,可以将应用的机器学习管道构建为模块化组件的图形。

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

MediaPipe 专为机器学习(ML)从业者而设计,包括研究人员,学生和软件开发人员,他们实施生产就绪的 ML 应用程序,发布伴随研究工作的代码,以及构建技术原型。MediaPipe 的主要用例是使用推理模型和其他可重用组件对应用机器学习管道进行快速原型设计。MediaPipe 还有助于将机器学习技术部署到各种不同硬件平台上的演示和应用程序中。

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

Alpha免责声明:

MediaPipe目前在v0.6中处于Alpha状态,我们仍在进行重大的API更改,并期望在v1.0之前达到稳定的API。

下载地址:https://github.com/google/mediapipe

2、PaddleHub(深度学习模型开发工具)

PaddleHub是什么:

深度学习模型的价值在AI时代不断增大。要想得到一个高质量的深度学习模型,离不开4个要素,优秀的算法、充足的算力、丰富的数据以及专家知识。大家在深度学习中常常遇到以下问题:

1]、一些研究领域只有少量标注数据,且数据标注成本较高,不足以训练一个足够鲁棒的神经网络。

2]、大规模神经网络的训练依赖于大量的计算资源,这对于一般用户而言难以实现。

3]、应对于普适化需求的模型,在特定应用上表现不尽如人意。

PaddleHub就是为了解决对深度学习模型的需求而开发的工具。

它基于飞桨领先的核心框架,精选效果优秀的算法,提供了百亿级大数据训练的预训练模型,方便用户不用花费大量精力从头开始训练一个模型。PaddleHub可以便捷地获取这些预训练模型,完成模型的管理和一键预测。

配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于用户特定场景的应用。

PaddleHub有什么特色:

1]、通过PaddleHub,开发者可以便捷地获取飞桨生态下的所有预训练模型,涵盖了图像分类、目标检测、词法分析、语义模型、情感分析、语言模型、视频分类、图像生成八类主流模型40余个,如图所示。飞桨还发布了PaddleHub的官方网页,对各个预训练模型的应用提供了详实的介绍。

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

2]、PaddleHub引入了模型即软件的概念,通过Python API或者命令行工具,一键完成预训练模型地预测。此外还借鉴了Anaconda和pip软件包管理的理念设计了一套命令行接口。

深度学习时代,模型发展的趋势会逐渐向软件工程靠拢;未来模型可以当作一个可执行程序,一键预测;也可以是第三方库,通过模型插拔的方式提高开发者的开发效率。

同时模型会有版本的概念,通过不断迭代升级的方式提升我们模型的效果。通过命令行工具,可以方便快捷的完成模型的搜索、下载、安装、预测等功能,对应的关键的命令分别是search,download,install,run等。

如以下示例,在安装完成飞桨和PaddleHub以后(具体安装方法见后文示例),使用词法分析模型LAC,可以一键实现分词。

$ hub run lac --input_text "今天是个好日子"

[{'word': ['今天', '是', '个', '好日子'], 'tag': ['TIME', 'v', 'q', 'n']}]

再如以下示例所示,是一个目标检测的例子,通过hub run 调用不同的目标检测模型,一行即可完成预测,同时也可以快速体验哪个模型能更符合开发的需求。

$ hub run yolov3_coco2017 --input_path test.jpg 

$ hub run faster_rcnn_coco2017 --input_path test.jpg

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

3]、通过PaddleHub Fine-tune API,结合少量代码即可完成大规模预训练模型的迁移学习。下面一节我们也会全面介绍PaddleHub的API。

PaddleHub API全景:

PaddleHub API的全景图如下图所示。

为了更好帮助用户更好的应用预训练模型,PaddleHub对Fine-tune做了6个层次的抽象。

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

数据集Dataset:PaddleHub提供多种NLP任务和CV任务的数据集,用户也可以在自定义数据集上完成Fine-tune。

数据预处理Reader:PaddleHub的数据预处理模块Reader对常见的NLP和CV任务进行了抽象。

预训练模型Module:Module代表了一个预训练模型。

优化策略Strategy:在PaddleHub中,Strategy类封装了一系列适用于迁移学习的Fine-tune策略。Strategy包含了对预训练参数使用什么学习率变化策略,使用哪种类型的优化器,使用什么类型的正则化等。

运行配置 RunConfig:在PaddleHub中,RunConfig代表了在对Task进行Fine-tune时的运行配置。包括运行的epoch次数、batch的大小、是否使用GPU训练等。

迁移任务Task:PaddleHub预置了常见任务的Task。Task代表了一个Fine-tune的任务。任务中包含了执行该任务相关的Program、数据Reader、运行配置等内容。每种Task都有自己特有的应用场景以及提供了对应的度量指标,用于适应用户的不同需求。预置的任务类型包括图像分类、文本分类、序列分类和多标签分类各类任务。

PaddleHub还支持用户可以通过继承BasicTask来实现自己的任务。

PaddleHub封装了finetune、eval、finetune_and_eval、predict等直观的基础接口,让开发者更方便完成模型的迁移和应用。

如何快速开始:

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

接下来本文结合实际案例,讲述如何快速使用PaddleHub实现十行代码完成文本分类迁移。

场景是标注数据不多中文文本分类场景,如何提高分类的精度和模型的泛化能力。

这里的方案是借助ERNIE + PaddleHub Finetune API,除去安装,只想要5个步骤,10行代码即可解决这一问题。

这里先介绍一下ERNIE,它是百度发布的知识增强的预训练模型,通过建模海量数据中的词、实体及实体关系,学习真实世界的语义知识。

具体来说,ERNIE 模型通过对词、实体等语义单元的掩码,使得模型学习完整概念的语义表示。

相较于 BERT 学习原始语言信号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力。

ERNIE在多个公开的中文数据集上进行了效果验证,包括语言推断、语义相似度、命名实体识别、情感分析、问答匹配等自然语言处理各类任务上,均超越了语义表示模型 BERT 的效果。

接下来开始实战演练PaddleHub。

1].安装

$ pip install paddlepaddle #CPU安装命令

或者:

$ pip install paddlepaddle-gpu # GPU安装

以上命令是安装CPU或者GPU版本的飞桨,通过以下命令则可以安装PaddleHub:

$ pip install paddlehub

另外,PaddleHub内置了深度学习可视化工具VisualDL的依赖,通过VisualDL,可以很好的对深度学习任务进行可视化。

2].选择预训练模型

在完成安装飞桨与PaddleHub,import导入相应模块后,一行代码即可加载预训练模型。只要1分钟,你就能得到万级别GPU小时训练出来的ERNIE模型。当然也可以支持BERT模型调用,只需要更换不同的模型名称即可:

import paddle.fluid as fluid

import paddlehub as hub

module = hub.Module(name="ernie")

inputs, outputs, program = module.context(trainable=True, max_seq_len=128)

第二步是获取模型上下文,包括了预训练模型的输入Tensor,输出Tensor还有计算图。这里面有个关键参数是trainable。如果trainable为True,那么就是一个fine-tune的任务,预训练模型的参数会做微调,以更好的适应顶层的应用、如果trainable为False,那么就预训练模型参数保持不变,将它当作特征提取器。对于ERNIE模型而言,不推荐使用特征提取,一定要通过Finetune的方式才能取得更好的效果。

3].数据处理

选择模型后就是进行数据预处理,针对不同的迁移任务做了一系列数据处理的封装:

dataset = hub.dataset.ChnSentiCorp()

reader = hub.reader.ClassifyReader(

dataset=dataset,

vocab_path=module.get_vocab_path(),

max_seq_len=128)

hub.dataset.ChnSentiCorp() 会自动从网络下载数据集并解压到用户目录下。

4].策略配置

接下来开始配置Fine-tune时用到的优化策略。针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略AdamWeightDecayStrategy:

strategy = hub.AdamWeightDecayStrategy(

learning_rate=5e-5,

weight_decay=0.01,

lr_scheduler="linear_decay",

)

config=hub.RunConfig(use_cuda=True, num_epoch=3,batch_size=32,checkpoint_dir=" ckpt_dir",strategy=strategy)

5].创建迁移学习任务

组建移学习任务这块也非常简单,首先是选择预训练的模型输出,作为我们句子的特征。

在这里ERNIE我们选择pooled_output作为句子的特征输出。也可以通过获取sequence_output来得到词粒度的特征,这个特征般用于序列标注:

pooled_output = outputs["pooled_output"]

# feed_list的Tensor顺序不可以调整

feed_list = [

inputs["input_ids"].name,

inputs["position_ids"].name,

inputs["segment_ids"].name,

inputs["input_mask"].name,

]

cls_task = hub.TextClassifierTask(

data_reader=reader,

feature=pooled_output,

feed_list=feed_list,

num_classes=dataset.num_labels,

config=config)

cls_task.finetune_and_eval()

Finetuning API非常智能,会自动完成评估,保存最优模型还有自动可视化的功能。Finetune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令:

$ visualdl --logdir ckpt_dir/vdllog -t ${HOST_IP}

其中${HOST_IP}为本机IP地址,如本机IP地址为192.168.0.1,用浏览器打开192.168.0.1:8040,其中8040为端口号,即可看到训练过程中指标的变化情况。

6].模型预测

通过Finetune完成模型训练后,在对应的ckpt_dir目录下,会自动保存验证集上效果最好的模型。接下来可以按照如下的示例进行预测:

# Data to be prdicted

data = [

 ["这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般"], ["交通方便;环境很好;服务态度很好 房间较小"],["还稍微重了点,可能是硬盘大的原故,还要再轻半斤就好了。其他要进一步验证。贴的几种膜气泡较多,用不了多久就要更换了,屏幕膜稍好点,但比没有要强多了。建议配赠几张膜让用用户自己贴。"],[ "前台接待太差,酒店有A B楼之分,本人check-in后,前台未告诉B楼在何处,并且B楼无明显指示;房间太小,根本不像4星级设施,下次不会再选择入住此店啦"], ["19天硬盘就罢工了~~~算上运来的一周都没用上15天~~~可就是不能换了~~~唉~~~~你说这算什么事呀~~~"]]

index = 0

run_states = cls_task.predict(data=data)

results = [run_state.run_results for run_state in run_states]

for batch_result in results:

# get predict index

batch_result = np.argmax(batch_result, axis=2)[0]

for result in batch_result:

print("%s predict=%s" % (data[index][0], result))

index += 1

除了以上的介绍,PaddleHub还在AI Studio和AIBook上提供了IPython NoteBook形式的demo,开发者可以直接在平台上在线体验PaddleHub带来的各种便捷。

此外,AI studio平台还发布了亿元算力支持计划,提供了“每日运行赠12小时”和“连续5天运行赠48小时”两种机制共同服务,每天都得能轻松获得!

该平台集成算力、教程、 样例模型、工程开发、在线部署的能力, 乃至比赛平台,满足从0基础学习到技术落地的全生命周期,帮助开发者全面掌握深度学习技术的各方各面。

下载地址:https://github.com/PaddlePaddle/PaddleHub

3、DeOldify(让黑白老照片和视频恢复原彩)

DeOldify 是用于着色和恢复旧图像及视频的深度学习项目。

它采用了 NoGAN 这样一种新型的、高效的图像到图像的 GAN 训练方法。细节处理效果更好,渲染也更逼真。

示例:

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

“移民母亲” by Dorothea Lange(1936)

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

"Toffs and Toughs" by Jimmy Sime (1937)

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

中国吸烟者(1880)

NoGAN:

NoGAN 是作者开发的一种新型 GAN 训练模型,用于解决之前 DeOldify 模型中的一些关键问题。

NoGAN 在 DeOldify 中对于保证视频着色的稳定性来说至关重要。NoGAN 训练结合了 GAN 训练的优点(好看的色彩),同时消除了令人讨厌的副作用(如视频中的闪烁物体)。视频由孤立的图像生成,而不添加任何时间建模。该过程执行 30-60 分钟 “NoGAN” 训练的 GAN 部分,每次使用 1% 至 3% 的图像网络(imagenet)数据。然后,与静止图像着色一样,在重建视频之前对各个帧进行“去旧化”(DeOldify)。

除了提高视频稳定性之外,还有一件趣事值得一提。事实证明,即使是不同的模型和不同的训练结构,仍然可以或多或少获得相同的解决方案。即使有些事物的颜色被认为是任意或不可知的,例如服装、汽车甚至特殊效果的颜色(如《大都会》中所见)。

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

作者猜测,模型正在学习一些有趣规则,寻找黑白图像中存在的微妙线索,并以此来着色。这不是没有道理的,因为该模型具有更高保真度的图像信息,并且将更有可能一致地做出“正确”的决定。这导致了确定和一致的结果,意味着你没有跟踪模型着色决策,因为它们不是任意的。此外,它们看起来非常健壮,即使在移动场景中的渲染也非常一致。

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

其他保持视频稳定性的方法还包括:以更高分辨率(更高的 render_factor)渲染;使用 resnet101 而不是 resnet34 作为生成器的主干——对象的检测更加一致和正确。此外,在训练期间高斯噪声增强似乎也有所帮助。

目前,DeOldify 有三种型号可供选择,每一种都有关键优势和劣势,因此具有不同的用例。

三种型号分别为:Artistic(艺术型)、Stable(稳定型)、Video(视频专用)

安装:

硬件和操作系统要求:

BEEFY 显卡(仅限训练)、一个普通显卡(单独着色)、Linux(或 Windows 10)。

使用 Anaconda 进行简单安装:

打开命令行并导航到要安装的根文件夹,键入以下命令:

git clone https://github.com/jantic/DeOldify.git DeOldify

cd DeOldify

conda env create -f environment.yml

然后开始使用这些命令运行:

source activate deoldify

jupyter lab

通过控制台中提供的 URL 开始在 Jupyter Lab 中运行。

下载地址:https://github.com/jantic/DeOldify

4、DLRM(全称是Deep Learning Recommendation Model,深度学习推荐模型)

机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM介绍

DLRM(Deep Learning Recommendation Model)是深度学习推荐模型的实现,用于个性化推荐。

该模型输入有密集和稀疏的特性,前者是浮点值的向量,后者是嵌入表的稀疏索引列表,嵌入表由浮点值向量组成。所选择的矢量被传递到由三角形表示的 mlp 网络,在一些情况下,矢量通过操作符(Ops)进行交互。

更精确的模型层定义:

1]、完全连接的 mlp 层

z = f(y)

y = Wx + b

2]、嵌入查找(对于稀疏索引列表 p=[p1,...,pk])

z = Op(e1,...,ek)

obtain vectors e1=E[:,p1], ..., ek=E[:,pk]

3]、Operator Op 可以是以下之一

Sum(e1,...,ek) = e1 + ... + ek

Dot(e1,...,ek) = [e1'e1, ..., e1'ek, ..., ek'e1, ..., ek'ek]

Cat(e1,...,ek) = [e1', ..., ek']'

其中,' 表示转置操作。

要求:

pytorch-nightly (6/10/19)、onnx (可选)、torchviz (可选)。

实作:

DLRM PyTorch,DLRM在PyTorch框架中的实现:

dlrm_s_pytorch.py

DLRM Caffe 2,DLRM在Caffe2框架中的实现:

dlrm_s_caffe2.py

DLRM数据,DLRM数据生成和加载的实现:

dlrm_data_pytorch.py, dlrm_data_caffe2.py, data_utils.py

DLRM测试,DLRM测试在./test中的实现:

dlrm_s_test.sh

DLRM基准,在./bench中实现DLRM基准:

dlrm_s_criteo_kaggle.sh, dlrm_s_criteo_terabyte.sh, dlrm_s_benchmark.sh

下载地址:https://github.com/facebookresearch/dlrm

注明

以上就是机器/深度学习MediaPipe、PaddleHub、DeOldify、DLRM的介绍内容,这些机器学习/深度学习软件都能使用在Linux操作系统中。

栏目相关文章