人工智能预训练微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载本指南以 docs/docs_ch/finetune/image_colorization.md 为核心系统讲解如何在 PaddleHub 中使用user_guided_colorization预训练模型完成图像着色的完整流程包括一键命令行预测、基于 Canvas 数据集的四步 Fine-tune、checkpoint 加载与模型预测以及通过 PaddleHub Serving 将着色能力部署为在线 HTTP 服务。读完本文你将掌握从数据预处理、训练调参到生产部署的整套实战方案并能直接运行仓库 demo/colorization 下的可执行脚本验证效果。一、任务背景与仓库对应实现图像着色Image Colorization指为灰度图像或黑白线稿自动预测合理的颜色信息是经典的图像到图像翻译任务。PaddleHub 将着色模型封装为user_guided_colorization模块其核心实现位于 paddlehub/module/cv_module.py 中的ImageColorizeModule类。从源码可以看出该模块的关键设计两分支输出validation_step中调用self(img[A], img[hint_B], img[mask_B])同时得到out_class分类分支与out_reg回归分支两个输出混合损失分类分支使用F.cross_entropy(out_class, ...)回归分支使用 L1 损失paddle.sum(paddle.abs(img[B] - out_reg), axis1, keepdimTrue)最终loss loss_ce loss_G_L1_reg对应“分两阶段训练”的策略先验色块引导输入除了灰度通道A之外还包含hint_B用户给定的先验彩色块与mask_B先验彩色块的掩码这正是prob参数控制的核心机制。当前仓库完整的可运行示例位于 demo/colorization其中 train.py 提供端到端训练脚本predict.py 提供预测脚本目录下的house.png是预测示例输入图。二、环境准备与依赖根据文档末尾的“依赖”说明运行本示例需要满足paddlepaddle 2.0.0rcpaddlehub 2.0.0在完成 PaddlePaddle 与 PaddleHub 的安装后进入示例目录即可开始。本示例模型不依赖额外下载的模型权重文件hub.Module会在首次加载时自动拉取因此安装好依赖即可直接运行。三、命令行预测一行命令完成着色安装完成后最简单的使用方式是借助 PaddleHub 的命令行工具直接对单张图片做着色预测$ hub run user_guided_colorization --input_path /PATH/TO/IMAGE其中--input_path待着色的原始图像路径必填可选的配置参数还包括--output_dir结果保存目录默认colorization与--visualization是否保存输出图片默认True。这两个可选参数的定义位于 paddlehub/module/cv_module.py 的add_module_config_arg中--output_dir默认值为colorization--visualization默认值为True。命令行执行时hub run会通过runnable装饰器进入run_cmd最终调用self.predict(images[args.input_path], visualizationargs.visualization, save_pathargs.output_dir)与下述 Python API 的预测路径完全一致。四、Fine-tune 完整流程四步走使用 PaddleHub Fine-tune API 对着色模型进行微调可以拆分为 4 个步骤。以下代码与文档一一对应同时结合仓库 demo/colorization/train.py 给出完整可运行版本。Step1定义数据预处理方式import paddlehub.vision.transforms as T transform T.Compose([T.Resize((256, 256), interpolationNEAREST), T.RandomPaddingCrop(crop_size176), T.RGB2LAB()], to_rgbTrue)paddlehub.vision.transforms数据增强模块提供了丰富的数据预处理算子Resize、RandomPaddingCrop、RandomHorizontalFlip、Normalize、RGB2LAB等用户可按需替换。针对着色任务有两点需要特别注意NOTE:T.Compose中的to_rgb必须设定为True。从 paddlehub/vision/transforms.py 的Compose.__call__实现可以看到to_rgbTrue时输入图像会先执行cv2.cvtColor(im, cv2.COLOR_BGR2RGB)保证后续RGB2LAB的色彩空间转换基于 RGB 通道顺序进行同时Compose默认channel_firstTrue即在算子链执行完毕后自动将图像从[H, W, C]置换为[C, H, W]与 Paddle 模型期望的输入布局一致。三个算子的具体行为对应 transforms.py 源码算子作用关键实现点Resize((256, 256), interpolationNEAREST)将图像统一缩放到 256×256支持NEAREST/LINEAR/CUBIC/AREA/LANCZOS4/RANDOM六种插值模式着色任务通常使用NEAREST保持色块边缘清晰RandomPaddingCrop(crop_size176)若图像小于 176 则先以 127.5 灰度值填充再随机裁剪 176×176 区域填充值im_padding_value默认为[127.5, 127.5, 127.5]RGB2LAB()将 RGB 图像转换到 LAB 色彩空间L 通道归一化到 [-0.5, 0.5]ab 通道归一化到 [-1, 1]源码中l_rs (lab[0] - 50) / 100、ab_rs lab[1:] / 110网络只需学习 ab 两个通道Step2下载数据集并使用from paddlehub.datasets import Canvas color_set Canvas(transformtransform, modetrain)参数说明transform数据预处理方式即 Step1 定义的对象mode选择数据模式可选项有train、test默认为train。Canvas数据集的准备代码可参考 paddlehub/datasets/canvas.py。其实现要点类上通过download_data(urlhttps://paddlehub.bj.bcebos.com/dygraph/datasets/canvas.tar.gz)装饰器标注下载地址首次实例化时hub.datasets.Canvas()会自动从网络下载数据集并解压到用户目录下$HOME/.paddlehub/dataset目录数据集包含 1193 张 Monet莫奈风格与 400 张 Van Gogh梵高风格油画数据源自 CycleGAN 论文公开数据集modetrain时读取canvas/train目录下的图片modetest时读取canvas/test目录并通过get_img_file收集全部图片路径__getitem__中对每张图片执行self.transform(img_path)即应用 Step1 定义好的预处理链输出可直接送入模型的数据张量。Step3加载预训练模型并配置训练模式model hub.Module(nameuser_guided_colorization, load_checkpointNone) model.set_config(classificationTrue, prob1)参数说明name加载模型的名字即user_guided_colorizationload_checkpoint是否加载自己训练的模型参数。若为None则加载官方提供的模型默认参数若传入路径则加载该 checkpointclassification着色模型分两部分训练。开始阶段将classification设置为True用于训练浅层分类网络训练后期将其设置为False用于训练网络的输出回归层详见 demo/colorization/train.py 第二阶段训练prob每张输入图不加一个先验彩色块的概率默认为 1即不加入先验彩色块。该参数直接控制hint_B与mask_B的生成逻辑。例如当prob设定为 0.9 时一张图上恰好出现两个先验彩色块的概率为 (1-0.9)×(1-0.9)×0.9 0.009。Step4选择优化策略和运行配置optimizer paddle.optimizer.Adam(learning_rate0.0001, parametersmodel.parameters()) trainer Trainer(model, optimizer, checkpoint_dirimg_colorization_ckpt_cls_1) trainer.train(color_set, epochs201, batch_size25, eval_datasetcolor_set, log_interval10, save_interval10)优化策略Paddle 提供了多种优化器选择如SGD、Adam、Adamax等着色示例默认使用Adam。其中关键参数learning_rate全局学习率示例中设为 1e-4parameters待优化的模型参数即model.parameters()。运行配置Trainer 参数Trainer主要控制 Fine-tune 的训练过程可在 paddlehub/finetune/trainer.py 中查看完整实现主要参数model被优化模型paddle.nn.Layer对象optimizer优化器选择use_gpu是否使用 GPU 运行布尔值默认False会调用paddle.set_deviceuse_vdl是否使用 VisualDL 可视化训练过程默认True会在checkpoint_dir/visualization下写入日志checkpoint_dir保存模型参数的地址若不指定则默认ckpt_{time.time()}compare_metrics保存最优模型时的指标比较函数默认为比较validation_step返回的第一个指标数值越大越好。Trainer初始化时会自动扫描checkpoint_dir下形如epoch_{N}的目录以恢复训练状态见_load_checkpoint因此中途中断后重跑同一脚本会自动续训。运行配置trainer.train 参数trainer.train控制具体的训练过程对应 trainer.pytrain_dataset训练时所用的数据集epochs训练轮数batch_size训练的批大小如果使用 GPU请根据实际情况调整batch_sizenum_workers数据加载子进程数默认为 0eval_dataset验证过程所用的数据集。若设置Trainer会在每个save_interval轮结束时调用evaluate执行验证并通过compare_metrics判断是否将当前模型保存为best_modellog_interval打印日志的间隔单位为执行批训练的次数即每log_interval个 batch 输出一次 loss/metrics/lr/ETA并写入 VisualDLsave_interval保存模型的间隔频次单位为执行训练的轮数。需要说明的是着色任务实际包含两阶段训练。仓库 demo/colorization/train.py 给出了第二阶段的完整写法model.set_config(classificationFalse, prob0.125) optimizer paddle.optimizer.Adam(learning_rate0.00001, parametersmodel.parameters()) trainer Trainer(model, optimizer, checkpoint_dirimg_colorization_ckpt_reg_1) trainer.train(color_set, epochs101, batch_size25, log_interval10, save_interval10)即第一阶段用classificationTrue、prob1、学习率 1e-4 训练分类分支 201 轮第二阶段切换为classificationFalse、prob0.125引入少量先验色块、学习率降到 1e-5 训练回归分支 101 轮两个阶段分别使用独立的 checkpoint 目录img_colorization_ckpt_cls_1与img_colorization_ckpt_reg_1。五、模型预测加载 checkpoint 恢复着色模型完成 Fine-tune 后验证集上表现最优的模型会被保存在${CHECKPOINT_DIR}/best_model目录下其中${CHECKPOINT_DIR}为 Fine-tune 时选择的 checkpoint 目录。best_model目录内包含model.pdparams模型参数与model.pdopt优化器状态见 trainer.py。使用该模型进行预测的predict.py脚本如下与仓库 demo/colorization/predict.py 一致import paddle import paddlehub as hub if __name__ __main__: model hub.Module(nameuser_guided_colorization, load_checkpoint/PATH/TO/CHECKPOINT) model.set_config(prob0.1) result model.predict(images[house.png])参数配置正确后执行脚本python predict.py即可。model.predict是ImageColorizeModule提供的预测接口实现在 paddlehub/module/cv_module.py其参数为images原始图像路径列表或 BGR 格式图片numpy 数组visualization是否保存着色结果图片默认为Truebatch_size预测批大小默认 1save_path保存结果的路径默认为colorization。从源码看预测过程会复用训练时的预处理链并额外用LAB2RGB将模型输出的 LAB 结果转换回 RGB最终返回的result是一个字典列表每个字典包含gray灰度图、hint加入先验色块的效果图、real真实彩色图、fake_reg模型回归分支生成的着色图四个键其中fake_reg即最终着色结果。若visualizationTrue着色图会被自动保存为save_path/fake_{时间戳}.png。NOTE:进行预测时所选择的module、checkpoint_dir、dataset必须与 Fine-tune 时所用的一致。若想直接获取油画风着色效果可下载官方油画着色参数文件canvas_rc.pdparams并作为load_checkpoint传入。六、服务部署PaddleHub Serving 在线着色服务PaddleHub Serving 可以将着色模型部署为一个在线的任务服务 API。Step1启动 PaddleHub Serving运行启动命令$ hub serving start -m user_guided_colorization这样即完成了一个着色任务服务化 API 的部署默认端口号为 8866。NOTE:如使用 GPU 预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量不使用 GPU 则无需设置。Step2发送预测请求配置好服务端后以下代码即可实现发送预测请求并获取预测结果图片经 Base64 编码传输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)]} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/user_guided_colorization r requests.post(urlurl, headersheaders, datajson.dumps(data)) data base64_to_cv2(r.json()[results][data][0][fake_reg]) cv2.imwrite(color.png, data)服务端侧的请求处理逻辑对应ImageColorizeModule.serving_method见 paddlehub/module/cv_module.py服务收到 Base64 图片后先解码为 BGR 数组调用predict得到包含gray/hint/real/fake_reg的字典列表再将每个结果缩放回原图尺寸并转回 Base64 返回。因此客户端只需从响应 JSON 的results[data][0][fake_reg]字段中取出 Base64 字符串解码即可得到最终的着色图片。七、常见问题与注意事项汇总to_rgb 必须为 True着色任务的预处理链基于 RGB→LAB 转换若to_rgbFalse则 BGR 通道顺序会导致 LAB 转换结果错误训练与预测效果均会异常。两阶段训练勿混用配置classificationTrue与classificationFalse对应不同分支的训练两阶段的learning_rate、prob、checkpoint_dir建议遵循示例脚本的配置。续训机制Trainer会自动从checkpoint_dir中扫描epoch_*目录恢复模型与优化器状态trainer.py重复执行训练脚本不会从零开始。预测一致性预测时使用的 module、checkpoint 与数据集必须与训练时一致否则输入预处理与模型权重不匹配。GPU 服务部署Serving 使用 GPU 前务必先设置CUDA_VISIBLE_DEVICES。数据自动下载Canvas数据集首次使用会自动下载解压到$HOME/.paddlehub/dataset无需手工准备数据若网络受限可提前将canvas.tar.gz放置到对应目录。八、进一步阅读完整可运行示例代码demo/colorization/train.py、demo/colorization/predict.py、demo/colorization/README.md数据集实现paddlehub/datasets/canvas.py数据预处理算子paddlehub/vision/transforms.py含Resize、RandomPaddingCrop、RGB2LAB、LAB2RGB等完整实现训练器实现paddlehub/finetune/trainer.pyTrainer与trainer.train的源码级说明模型封装与预测/服务接口paddlehub/module/cv_module.pyImageColorizeModule同系列迁移学习文档docs/docs_ch/finetune图像分类、语义分割、文本匹配等任务的 Fine-tune 指南赞分享人工智能预训练微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐FloPy绘图10个实用技巧快速绘制水头分布、流向矢量图与等水头线FloPy绘图10个实用技巧快速绘制水头分布、流向矢量图与等水头线 FloPy 是一款 Python 水文地质建模工具包支持创建、运行和后处理 MODFLO人工智能预训练微调模型推理服务AI4R高级教程如何扩展与定制自己的机器学习算法AI4R高级教程如何扩展与定制自己的机器学习算法 AI4RArtificial Intelligence for Ruby是一个专为Ruby开发者设计的机人工智能预训练微调模型推理服务NCMconverter技术解密打破音乐格式壁垒的Go语言解决方案NCMconverter技术解密打破音乐格式壁垒的Go语言解决方案 在数字音乐时代格式兼容性往往成为用户体验的隐形障碍。网易云音乐的NCM格式凭借其加密保护人工智能预训练微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
