人工智能预训练微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载本篇技术指南以 PaddleHub 的图像分类 Fine-tune 全流程为主线围绕resnet50_vd_imagenet_ssld预训练模型在 Flowers 数据集 上的迁移学习完整覆盖命令行预测、数据预处理、数据集加载、优化器与 Trainer 配置、checkpoint 保存与加载、在线 Serving 部署等环节。读完本文你将掌握一套可直接复制运行的图像分类 Fine-tune 与预测方案并能结合仓库源码理解每一步背后的实现机制。背景与适用前提本文对应的完整可运行示例位于 demo/image_classification 目录train.py与predict.py依赖环境要求如下paddlepaddle 2.0.0rcpaddlehub 2.0.0在开始前需完成 PaddlePaddle 与 PaddleHub 的安装。Fine-tune 使用 PaddleHub 2.0 的 Fine-tune API其核心组件包括paddlehub.datasets数据集、paddlehub.vision.transforms预处理、paddlehub.finetune.trainer.Trainer训练器以及以moduleinfo注册的 CV 分类模块。命令行快速预测安装完成后无需编写任何代码即可通过hub run直接使用预训练模型对一张图片做分类预测$ hub run resnet50_vd_imagenet_ssld --input_path /PATH/TO/IMAGE --top_k 5该命令的底层行为可以在 paddlehub/module/cv_module.py 中看到hub run会调用模块的run_cmd方法解析--input_path与--top_k两个参数--top_k默认值为 1随后调用self.predict(images[args.input_path], top_kargs.top_k)完成推理并返回分类结果。也就是说--input_path指定待预测图片路径--top_k控制返回置信度最高的前 k 个类别。如何开始 Fine-tune在完成安装后直接执行python train.py即可开始使用resnet50_vd_imagenet_ssld对 Flowers 数据集进行 Fine-tune。完整的可运行脚本见 demo/image_classification/train.py其中包含与下文四步流程一致的完整实现。使用 PaddleHub Fine-tune API 进行 Fine-tune 可以分为 4 个步骤定义数据预处理方式、下载并使用数据集、加载预训练模型、选择优化策略和运行配置。Step1: 定义数据预处理方式import paddlehub.vision.transforms as T transforms T.Compose([T.Resize((256, 256)), T.CenterCrop(224), T.Normalize(mean[0.485, 0.456, 0.406], std [0.229, 0.224, 0.225])], to_rgbTrue)transforms数据增强模块实现见 paddlehub/vision/transforms.py定义了丰富的数据预处理方式用户可按照需求替换自己需要的数据预处理方式。本例中的预处理流水线含义如下T.Resize((256, 256))将输入图片缩放为 256×256。其底层封装了 OpenCV 的插值算法通过interpolation参数可切换NEAREST、LINEAR默认、CUBIC、AREA、LANCZOS4等模式甚至支持RANDOM随机选择插值方式T.CenterCrop(224)从缩放后的图片中心裁剪出 224×224 的区域与 ImageNet 预训练模型的输入尺寸保持一致T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225])使用 ImageNet 数据集的统计均值和标准差做标准化to_rgbTrue由于 OpenCV 默认以 BGR 通道顺序读取图片Compose会先通过cv2.cvtColor将 BGR 转为 RGB再依次执行各预处理算子最终按channel_firstTrue默认把图像从[H, W, C]转置为[C, H, W]满足模型输入要求。值得说明的是模型模块内部也内置了同样的预处理流水线见 modules/image/classification/resnet50_vd_imagenet_ssld/module.py 的transforms方法训练与预测阶段保持一致的预处理策略是保证模型效果的关键。Step2: 下载数据集并使用from paddlehub.datasets import Flowers flowers Flowers(transforms) flowers_validate Flowers(transforms, modeval)参数说明transforms: 数据预处理方式mode: 选择数据模式可选项有train,test,val默认为train。数据集的准备代码可以参考 paddlehub/datasets/flowers.py。hub.datasets.Flowers()会自动从网络下载数据集并解压到用户目录下$HOME/.paddlehub/dataset目录。从源码可以看到Flowers继承自paddle.io.Dataset是一个标准的 Paddle 数据集类数据集共 5 个类别玫瑰、郁金香、雏菊、向日葵、蒲公英num_classes 5根据mode选择对应的索引文件train使用train_list.txttest使用test_list.txt其余如val使用validate_list.txt__getitem__从索引文件中解析图片路径与标签经transforms预处理后返回(image, label)样本对可直接交给paddle.io.DataLoader使用。Step3: 加载预训练模型model hub.Module(nameresnet50_vd_imagenet_ssld, label_list[roses, tulips, daisy, sunflowers, dandelion])name: 选择预训练模型的名字label_list: 设置输出分类类别默认为 ImageNet2012 类别即模块目录下 label_list.txt 中定义的 1000 个类别。PaddleHub 提供许多图像分类预训练模型如 xception、mobilenet、efficientnet 等。如果想尝试 efficientnet 模型只需要更换 Module 中的name参数即可# 更换name参数即可无缝切换efficientnet模型, 代码示例如下 model hub.Module(nameefficientnetb7_imagenet)NOTE:目前部分模型还没有完全升级到 2.0 版本敬请期待。从源码结构看resnet50_vd_imagenet_ssld模块modules/image/classification/resnet50_vd_imagenet_ssld/module.py通过moduleinfo注册为CV/classification类型的 PaddleHub 模块其元类ImageClassifierModule提供了training_step、validation_step、predict、serving_method、run_cmd等统一能力。模型主体为 ResNet50_vd 结构前 3 层卷积conv1_1/conv1_2/conv1_3 最大池化 4 组 Bottleneck 残差块深度配置[3, 4, 6, 3]最后接自适应平均池化与全连接分类层。在__init__中模型会根据label_list的长度动态决定全连接层的输出维度class_dim同时模型自动加载模块目录下的预训练权重resnet50_vd_ssld.pdparamsSSLD 蒸馏版权重。这也解释了为什么更换label_list即可将原 1000 类模型改造成 5 类花卉分类模型——只需要重新训练最后全连接层即可完成迁移。Step4: 选择优化策略和运行配置optimizer paddle.optimizer.Adam(learning_rate0.001, parametersmodel.parameters()) trainer Trainer(model, optimizer, checkpoint_dirimg_classification_ckpt) trainer.train(flowers, epochs100, batch_size32, eval_datasetflowers_validate, save_interval1)优化策略Paddle2.0 提供了多种优化器选择如SGD,Adam,Adamax等其中Adam的两个关键参数learning_rate: 全局学习率。默认为 1e-3parameters: 待优化模型参数。运行配置Trainer主要控制 Fine-tune 的训练包含以下可控制的参数其完整实现见 paddlehub/finetune/trainer.pymodel: 被优化模型optimizer: 优化器选择use_gpu: 是否使用 GPU 训练默认False训练器内部通过paddle.set_device设置设备use_vdl: 是否使用 VisualDL 可视化训练过程默认True日志写入checkpoint_dir/visualization目录checkpoint_dir: 保存模型参数的地址不指定时自动生成ckpt_timestamp目录compare_metrics: 保存最优模型的衡量指标比较方法。默认按验证集返回的第一个指标进行比较、值越大越好如需自定义例如指标越小越好可传入形如compare_metrics(old_metric, new_metric) - bool的函数。trainer.train主要控制具体的训练过程包含以下可控制的参数train_dataset: 训练时所用的数据集epochs: 训练轮数batch_size: 训练的批大小如果使用 GPU请根据实际情况调整 batch_sizenum_workers: DataLoader 加载数据的子进程数量默认为 0eval_dataset: 验证集。设置后训练器会在每个save_interval轮末执行一次验证评估log_interval: 打印日志的间隔单位为执行批训练的次数save_interval: 保存模型的间隔频次单位为执行训练的轮数collate_fn: 自定义 batch 拼接函数默认为沿第 0 维 stack。从 trainer.py 的train实现可以看到完整的训练循环训练集通过DistributedBatchSamplershuffleTrue与DataLoader包装每轮依次执行training_step前向计算、optimizer.step反向更新、clear_gradients清零梯度每隔log_interval个 batch 打印loss、各指标与学习率并在启用use_vdl时写入 VisualDL每save_interval轮对验证集执行一次evaluate当新指标优于历史最优时将模型与优化器状态保存到${checkpoint_dir}/best_model目录。训练器还支持断点续训启动时会扫描checkpoint_dir下形如epoch_n的目录自动加载最近一轮的模型参数model.pdparams与优化器状态model.pdopt并从该轮继续训练同时通过metrics.pkl恢复历史最优指标。模型预测当完成 Fine-tune 后Fine-tune 过程在验证集上表现最优的模型会被保存在${CHECKPOINT_DIR}/best_model目录下其中${CHECKPOINT_DIR}目录为 Fine-tune 时所选择的保存 checkpoint 的目录。对应地每个epoch_n目录中保存的是该轮结束时的模型参数文件model.pdparams与优化器状态文件model.pdopt写入逻辑见 trainer.py 的save_model。我们使用该模型来进行预测。predict.py 脚本如下完整文件见 demo/image_classification/predict.pyimport paddle import paddlehub as hub if __name__ __main__: model hub.Module(nameresnet50_vd_imagenet_ssld, label_list[roses, tulips, daisy, sunflowers, dandelion], load_checkpoint/PATH/TO/CHECKPOINT) result model.predict([flower.jpg])参数配置正确后请执行脚本python predict.py。其中load_checkpoint应指向 Fine-tune 产出的模型目录如img_classification_ckpt/best_model模块在初始化时会通过paddle.load加载该目录下的 checkpoint 参数覆盖预训练权重。predict的内部流程见 paddlehub/module/cv_module.py为切换到eval模式并在paddle.no_grad()下逐 batch 执行预处理、前向计算与softmax最后按top_k取置信度最高的若干类别返回[{类别名: 置信度}, ...]形式的列表。NOTE:进行预测时所选择的 module、checkpoint_dir、dataset 必须和 Fine-tune 所用的一样——尤其是label_list的类别顺序必须与训练时完全一致否则预测结果将无法对应到正确的类别。服务部署PaddleHub Serving 可以部署一个在线分类任务服务。Step1: 启动 PaddleHub Serving运行启动命令$ hub serving start -m resnet50_vd_imagenet_ssld这样就完成了一个分类任务服务化 API 的部署默认端口号为 8866。NOTE:如使用 GPU 预测则需要在启动服务之前请设置CUDA_VISIBLE_DEVICES环境变量否则不用设置。从源码看服务端通过serving装饰的serving_methodcv_module.py接收 base64 编码的图片列表与top_k参数解码后调用predict最终返回{data: [{类别: 置信度}, ...]}结构的 JSON 结果。Step2: 发送预测请求配置好服务端以下数行代码即可实现发送预测请求获取预测结果import requests import json import cv2 import base64 import numpy as np def cv2_to_base64(image): data cv2.imencode(.jpg, image)[1] return base64.b64encode(data.tostring()).decode(utf8) def base64_to_cv2(b64str): data base64.b64decode(b64str.encode(utf8)) data np.fromstring(data, np.uint8) data cv2.imdecode(data, cv2.IMREAD_COLOR) return data # 发送HTTP请求 org_im cv2.imread(/PATH/TO/IMAGE) data {images:[cv2_to_base64(org_im)], top_k:2} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/resnet50_vd_imagenet_ssld r requests.post(urlurl, headersheaders, datajson.dumps(data)) data r.json()[results][data]完整链路一览综合以上内容可以梳理出 PaddleHub 图像分类 Fine-tune 的完整调用链数据侧Flowers 通过download_data装饰器自动下载并解压数据集到$HOME/.paddlehub/dataset以paddle.io.Dataset标准接口输出(image, label)预处理侧paddlehub/vision/transforms.py 的Compose串联Resize → CenterCrop → Normalize并完成 BGR→RGB 与通道转置模型侧resnet50_vd_imagenet_ssld 继承ImageClassifierModule同时具备训练training_step、验证validation_step、预测predict、命令行run_cmd与服务化serving_method四类接口训练侧Trainer 统一调度优化器、数据加载、日志与指标记录、checkpoint 与 best_model 保存部署侧hub serving start启动 HTTP 服务客户端以 base64 图片发起 POST 请求获取分类结果。整个流程中resnet50_vd_imagenet_ssld与efficientnetb7_imagenet等同类分类模块遵循同一套ImageClassifierModule接口约定因此更换name参数即可无缝切换骨干网络无需改动数据与训练代码这正是 PaddleHub 模块化设计带来的迁移学习便利性。赞分享人工智能预训练微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐PaddleHub resnet50_vd_imagenet_ssld 图像分类模块预测、Fine-tune 与服务化部署实战指南PaddleHub resnet50_vd_imagenet_ssld 图像分类模块预测、Fine tune 与服务化部署实战指南 本指南以 PaddleHu人工智能预训练微调模型推理服务PaddleHub 图像分类实战resnet50_vd_imagenet_ssld 模型安装、Fine-tune 与服务化部署全指南PaddleHub 图像分类实战resnet50_vd_imagenet_ssld 模型安装、Fine tune 与服务化部署全指南 导读 本文以 Paddl人工智能预训练微调模型推理服务HashiCorp Serf项目实战事件处理机制深度解析HashiCorp Serf项目实战事件处理机制深度解析 引言 在分布式系统中节点间的状态感知和事件响应是核心需求。HashiCorp Serf作为一个轻量人工智能预训练微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
