关于概念模型的相关介绍(概念模型的基本概念有哪些)
833
2022-05-30
PaddleHub介绍
文章目录
PaddleHub简介
对比PytorchHub
与PaddleHub
Model与Module
Fine-tune
PaddleHub使用
PaddleHub安装
命令行快速体验
29种模型
迁移学习
Fine-Tune
训练过程
PaddleHub介绍
文章目录
PaddleHub简介
对比PytorchHub
与PaddleHub
Model与Module
Fine-tune
PaddleHub使用
PaddleHub安装
命令行快速体验
29种模型
迁移学习
Fine-Tune
训练过程
1.1 PaddleHub简介
PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作,旨在让 PaddlePaddle 生态下的开发者更便捷体验到大规模预训练模型的价值。
PaddleHub 目前的预训练模型覆盖了图像分类、目标检测、词法分析、Transformer、情感分析五大类别。未来会持续开放更多类型的深度学习模型,如语言模型、视频分类、图像生成等预训练模型。
1.2 对比PytorchHub与PaddleHub
1.2.1 PytorchHub
GAN
PytorchHub
DCGAN on
FashionGen
PGAN
Speech
Tacotron2
WaveGlow
NLP
GPT
BERT
CV
SqueezeNet
Vgg-Nets
D
eeplabv3-ResNet101
ShuffleNetV2
NesnseNet
FCN-ResNet101
GoogLeNet
Incption_V3
MobileNetV2
ResNeXt
AlexNet
ResNet
GAN
PytorchHub
DCGAN on
FashionGen
PGAN
Speech
Tacotron2
WaveGlow
NLP
GPT
BERT
CV
SqueezeNet
Vgg-Nets
D
eeplabv3-ResNet101
ShuffleNetV2
NesnseNet
FCN-ResNet101
GoogLeNet
Incption_V3
MobileNetV2
ResNeXt
AlexNet
ResNet
1.2.2 PaddleHub
CV
resnet_v2_50_imagenet
ssd_mobilenet_v1_pascal
mobilenet_v2_imagenet
nasnet_imagenet
pnasnet_imagenet
resnet_v2_101_imagene
resnet_v2_152_imagenet
NLP
lac
bert
Chinese
Cased*2
uncased*2
multi_cased
ernie
senta_bilstm
emotion_detecdtion_textcnn
lexical_analysis
dureader_machine_reading
simnet_bow_pairwise
dmtk_models
sentiment_classification
dialogue
human
matchin
seq2seq
keywords
CV
resnet_v2_50_imagenet
ssd_mobilenet_v1_pascal
mobilenet_v2_imagenet
nasnet_imagenet
pnasnet_imagenet
resnet_v2_101_imagene
resnet_v2_152_imagenet
NLP
lac
bert
Chinese
Cased*2
uncased*2
multi_cased
ernie
senta_bilstm
emotion_detecdtion_textcnn
lexical_analysis
dureader_machine_reading
simnet_bow_pairwise
dmtk_models
sentiment_classification
dialogue
human
matchin
seq2seq
keywords
1.2.3 调用PaddleHub
目前PytorchHub不支持命令行运行,但PaddleHub支持,命令行运行就是指我们安装PaddleHub后,可以无需进入python环境,即可快速体验PaddleHub无需代码、一键预测的命令行功能。需要注意的是,在PaddleHub中,既可以支持命令行使用,即在终端输入
hub run XXX(模型) --input_text XXX(需要预测的内容)
1
也可以支持调用api
import paddlehub as hub hub.finetune_and_eval( task, data_reader, feed_list, config=None)
1
2
3
4
5
6
7
1.3 Model与Module
实际上,PaddleHub为Model和Module的管理和使用都提供了命令行工具,但是model和module是有区别的,一个是模型,一个是模块。
model表示预训练好的参数和模型,当需要使用Model进行预测时,需要模型配套的代码,进行模型的加载,数据的预处理等操作后,才能进行预测。我们在使用PaddleHub来调用模型时,可以使用hub download 命令获取到最新的model再进行实验。module是model的一个可执行模块,简单来说,一个Module可以支持直接命令行预测,也可以配合PaddleHub Finetune API,通过少量代码实现迁移学习。 需要注意的是,不是所有的Module都支持命令行预测; (例如BERT/ERNIE Transformer类模型,一般需要搭配任务进行finetune) 也不是所有的Module都可用于finetune(例如LAC词法分析模型,我们不建议用户用于finetune)
1.4 Fine-tune
PyTorchHub 不支持Fine-tune,PaddleHub支持。这一点倒是挺让人意外的,如果通过hub加载了预训练模型,但是无法Fine-tune,那有什么意义呢?仅仅只是为了试试paper中的效果好不好吗?本来我还对此颇有怀疑,于是去看了pytorchhub.org官网下的文档,发现目前pytorchhub确实不支持hub一键式fine-tuning,现有模型的finetuning还是基于传统的脚本式调参。
PaddleHub在Fine-tune这一块做的很完善,在前一个板块也给大家详细举了示例讲解,在PaddleHub的官方gihub中,有非常详细的Fine-tune教程,大家可以参考:
1.4.1 PaddleHub图像分类迁移
https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub图像分类迁移教程
1
1.4.2 PaddleHub文本分类迁移
https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub文本分类迁移教程
1
总之,从这四个维度上,个人感觉PytorchHub更像一个小工具,帮助大家迅速试用一下开源的新模型,但是真正到实际应用,还是要基于老的一套的fine-tuning,不能直接从hub里调用fine-tune的api,所以并不实用。对于迁移学习来说,Fine-tune是必不可少的,虽然我们有预训练的模型,但是新任务的场景和数据都不相同,直接使用预训练模型其实很难得到很好的效果,所以从工业级实用的角度来说,PaddleHub做的要更成熟一些,等稍后支持了用户自定义上传模型后大家可以多体验体验。
下
面,我们具体来看看PaddleHub如何直接使用命令行,调用一行代码show出结果& 使用Finetune Api来对模型进行微调,并举一个实例教大家一步一步实现。
2.1 PaddleHub安装
环境依赖
Python==2.7 or Python>=3.5
PaddlePaddle>=1.4.0
安装
pip install paddlehub
2.2 命令行快速体验
安装好后,不需要进入python环境import就可以直接先体验hub的便捷,因为在PaddleHub中hub可以作为一个独立的模块直接运行。PaddleHub目前包含图像分类、目标检测、词法分析、Transformer、情感分析五大类。
Usage: hub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
一行代码预测:
分词
# 使用百度词法分析工具LAC进行分词 $ hub run lac --input_text "今天的你真好看" [{'tag': ['TIME', 'u', 'r', 'd', 'a'], 'word': ['今天', '的', '你', '真', '好看']}]
1
2
3
情感分析
# 使用百度Senta情感分析模型对句子进行预测 $ hub run senta_bilstm --input_text "老铁666,带你开黑" [{'text': '老铁666,带你开黑', 'sentiment_key': 'positive', 'sentiment_label': 2, 'positive_probs': 0.7206, 'negative_probs': 0.2794}]
1
2
3
目标检测
#使用SSD检测模型对图片进行目标检测 hub run ssd_mobilenet_v1_pascal --input_path test_img_bird.jpg
1
2
[{'data': [{'label': 'bird', 'confidence': 0.9935706853866577, 'left': 182.32740783691406, 'top': 110.21607208251953, 'right': 316.4570007324219, 'bottom': 228.32887268066406}, {'label': 'bird', 'confidence': 0.9861606359481812, 'left': 325.08056640625, 'top': 67.50239562988281, 'right': 454.9098815917969, 'bottom': 158.6644744873047}, {'label': 'bird', 'confidence': 0.9371040463447571, 'left': 76.58110809326172, 'top': 156.67181396484375, 'right': 148.7028350830078, 'bottom': 234.810546875}], 'path': 'work/1.jpg'}]
1
利用 输出转至将输出检测结果放置在text文件中。
import sys,os,math,time sys.path.append("/home/aistudio/external-libraries") import matplotlib.pyplot as plt from numpy import * !hub run ssd_mobilenet_v1_pascal --input_path work/1.jpg > work/1.txt
1
2
3
4
5
6
结果的内容为:
with open(resultfile, 'r') as f: strall = f.readlines()[0] exec('data=%s'%strall) rect = data[0]['data'] print(type(rect), len(rect), shape(rect), rect)
1
2
3
4
5
6
1
2
3
4
img = cv2.imread(imgfile) for r in rect: title = '%s:%.4f'%(r['label'], r['confidence']) startpoint = (int(r['left']), int(r['top'])) endpoint = (int(r['right']), int(r['bottom'])) cv2.rectangle(img, startpoint, endpoint, (255, 255, 0), 1) cv2.putText(img, title, startpoint, fontFace=cv2.FONT_HERSHEY_PLAIN, fontScale=1, color=(255,0,0)) plt.clf() plt.figure(figsize=(12,12)) plt.axis("off") plt.imshow(img)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2.3 29种模型
PaddleHub目前支持29种模型,主要以CV和NLP模型为主,包括NLP目前最火的BERT和百度自己自己研发开源的Ernie,以及CV中的ssd-mobilenet、resnet-50、resnet-152等。
NLP预测
数据通过 —input_text或—input_file导入来实现单次预测和批量预测
# 单文本预测 hub run lac --input_text "今天是个好日子" # 多文本分析 hub run lac --input_file test.txt
1
2
3
4
CV预测
数据通过—input_path或—input_file导入来实现单次预测和批量预测
# 单张照片预测 hub run ssd_mobilenet_v1_pascal --input_path test.jpg # 多张照片预测 hub run ssd_mobilenet_v1_pascal --input_file test.txt
1
2
3
4
3.1 Fine-Tune
Fine-tune是迁移学习中使用最多的方式之一,通常我们可以在预训练好的模型上进行微调来实现模型迁移,从而达到模型适应新领域(Domain)数据的目的。上图是做一个完整的迁移学习需要的步骤,下面举个实例教大家如何用PaddleHub做图像分类迁移学习
3.2 训练过程
3.2.1 准备工作
安装paddlepaddle和paddlehub
pip install paddlepaddle( 推荐安装1.4.0版本以上) pip install paddlehub
1
2
3
3.2.2 选择模型
此处使用经典的ResNet-50作为预训练模型
import sys,os,math,time sys.path.append("/home/aistudio/external-libraries") import matplotlib.pyplot as plt from numpy import * import paddlehub as hub module_map = { "resnet50": "resnet_v2_50_imagenet", "resnet101": "resnet_v2_101_imagenet", "resnet152": "resnet_v2_152_imagenet", "mobilenet": "mobilenet_v2_imagenet", "nasnet": "nasnet_imagenet", "pnasnet": "pnasnet_imagenet" } module_name = module_map["resnet50"] module = hub.Module(name = module_name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
3.2.3 准备数据
# 直接用PaddleHub提供的数据集 dataset = hub.dataset.DogCat()# 生成readerdata_reader = hub.reader.ImageClassificationReader( image_width=module.get_expected_image_width(), image_height=module.get_expected_image_height(), images_mean=module.get_pretrained_images_mean(), images_std=module.get_pretrained_images_std(), dataset=dataset)
1
2
3
4
5
6
7
3.2.4 Task
由于猫狗分类是一个二分类的任务,而我们下载的分类module是在ImageNet数据集上训练的千分类模型,所以我们需要对模型进行简单的微调,把模型改造为一个二分类模型:
1. 获取module的上下文环境,包括输入和输出的变量,以及Paddle Program;
2. 从输出变量中找到特征图提取层feature_map;
3. 在feature_map后面接入一个全连接层,生成Task
input_dict, output_dict, program = module.context(trainable=True) img = input_dict["image"] feature_map = output_dict["feature_map"] task = hub.create_img_cls_task( feature=feature_map, num_classes=dataset.num_labels) feed_list = [img.name, task.variable("label").name]# 设置configconfig = hub.RunConfig( use_cuda=False, num_epoch=1, checkpoint_dir="cv_finetune_turtorial_demo", batch_size=32, log_interval=10, eval_interval=50, strategy=hub.finetune.strategy.DefaultFinetuneStrategy())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
3.2.5 启动Fine-Tune
可以选择finetune_and_eval接口来进行模型训练,这个接口在finetune的过程中,会周期性的进行模型效果的评估,以便我们了解整个训练过程的性能变化。
训练过程中的性能数据会被记录到本地,我们可以通过visualdl来可视化这些数据。我们在shell中输入以下命令来启动visualdl,其中${HOST_IP}为本机IP,需要用户自行指定
$ visualdl --logdir ./cv_finetune_turtorial_demo/vdllog --host ${HOST_IP} --port 8989
1
启动服务后,我们使用浏览器访问${HOST_IP}:8989,可以看到训练以及预测的loss曲线和accuracy曲线
最后再按照常规流程对模型进行预测即可。
● 相关图表链接:
图1.4.1 PytorchHub与PaddleHub对比
图2.2.1 目标检测
图2.2.2 标注后处理的结果
图2.4.1 Fine-tune全景图
图3.2 PaddleHub+FineTune流程图
图3.2.1 训练过程以及预测曲线
GitHub 机器学习
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。