PaddleHub 图像着色实战:基于 user_guided_colorization 的 Fine-tune、预测与服务化部署

发布时间:2026/9/23 3:15:46
PaddleHub 图像着色实战:基于 user_guided_colorization 的 Fine-tune、预测与服务化部署 PaddleHub 图像着色实战基于 user_guided_colorization 的 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本文围绕 PaddleHub 提供的user_guided_colorization预训练图像着色模型完整讲解从命令行预测、基于 Canvas 油画数据集的两阶段 Fine-tune、checkpoint 预测到 PaddleHub Serving 在线服务化部署的全流程。读完本文你将掌握 PaddleHub Fine-tune API 的四步标准用法数据预处理、数据集加载、模型加载、优化与训练配置并能独立复现输入灰度图、输出彩色图的完整应用链路。文中所有代码与参数说明均以仓库 demo/colorization 下的示例脚本和 paddlehub 源码实现为准。背景与依赖user_guided_colorization是一种用户引导user-guided图像着色模型其算法实现参考了开源社区的 colorization-pytorch 方案。PaddleHub 将其封装为可直接通过hub.Module(nameuser_guided_colorization)加载的预训练模型并配套了 Fine-tune 与 Serving 能力。在开始之前请确保环境满足以下依赖见 demo/colorization/README.md 与仓库 requirements.txtpaddlepaddle 2.0.0rcpaddlehub 2.0.0命令行预测一行命令体验着色效果安装好 PaddlePaddle 与 PaddleHub 后无需编写任何代码即可通过hub run命令直接对一张图片执行着色预测$ hub run user_guided_colorization --input_path /PATH/TO/IMAGE从 paddlehub/commands/run.py 的RunCommand.execute实现可以看到hub run会加载指定名称的 Module 并调用其_run_func对于 CV 类模块--input_path用于指定输入图片/视频路径见 paddlehub/commands/run.py。这是体验模型效果最快捷的方式。如何开始 Fine-tune在完成 PaddlePaddle 与 PaddleHub 安装后进入示例目录并执行$ python train.py即可使用user_guided_colorization模型对Canvas等数据集进行 Fine-tune。训练脚本的完整内容见 demo/colorization/train.py它展示了 PaddleHub 推荐的完整训练流程。代码步骤PaddleHub Fine-tune API 四步走使用 PaddleHub Fine-tune API 进行训练可以拆解为 4 个步骤定义数据预处理 → 下载并使用数据集 → 加载预训练模型 → 选择优化策略与运行配置。下面逐一展开。Step1定义数据预处理方式import paddlehub.vision.transforms as T transform T.Compose([T.Resize((256, 256), interpolationNEAREST), T.RandomPaddingCrop(crop_size176), T.RGB2LAB()], to_rgbTrue)transforms数据增强模块提供了丰富的数据预处理算子用户可按照需求自由组合替换。从 paddlehub/vision/transforms.py 的源码可以进一步理解本示例三个关键算子的行为T.Compose(transforms, to_rgbFalse, channel_firstTrue)按顺序串行执行各预处理算子。to_rgb决定是否将输入从 BGR 转为 RGBchannel_first决定是否在最后把[H, W, C]转为[C, H, W]见 paddlehub/vision/transforms.py。注意本例必须将to_rgb设为True否则颜色空间转换会出错。T.Resize(target_size, interpolationLINEAR)将图像缩放到目标尺寸支持NEAREST、LINEAR、CUBIC、AREA、LANCZOS4、RANDOM六种插值模式见 paddlehub/vision/transforms.py。着色任务对边缘敏感因此示例选用NEAREST最近邻插值避免引入颜色渗色。T.RandomPaddingCrop(crop_size176, im_padding_value[127.5, 127.5, 127.5])当裁剪尺寸大于原图时先按填充值补边再随机裁剪到 176×176见 paddlehub/vision/transforms.py用于训练数据增强。T.RGB2LAB()将图像从 RGB 颜色空间转换到 LAB 颜色空间内部依次完成 RGB→XYZ→LAB 的转换并对 L、a、b 通道做归一化L 通道(L-50)/100ab 通道/110实现细节见 paddlehub/vision/transforms.py。需要说明的是着色模型在 LAB 空间下工作模型接收 L亮度通道回归预测 a、b颜色通道因此RGB2LAB是训练与预测链路中不可或缺的一环。Step2下载数据集并使用from paddlehub.datasets import Canvas color_set Canvas(transformtransform, modetrain)参数说明transform数据预处理方式即 Step1 中定义的Compose对象。mode数据模式可选train、test默认为train。Canvas数据集的实现位于 paddlehub/datasets/canvas.py。其类装饰器download_data(urlhttps://paddlehub.bj.bcebos.com/dygraph/datasets/canvas.tar.gz)会在首次使用时自动从网络下载数据集并解压到用户目录下的$HOME/.paddlehub/dataset目录即DATA_HOME该路径定义见 paddlehub/env.py可通过HUB_HOME环境变量修改根目录。数据集包含 1193 张 Monet莫奈风格与 400 张 Vango梵高风格画作数据源自公开的 CycleGAN 数据集。从 paddlehub/datasets/canvas.py 可以看到train模式读取train子目录、test模式读取test子目录中的图片文件列表。Step3加载预训练模型model hub.Module(nameuser_guided_colorization, load_checkpointNone) model.set_config(classificationTrue, prob1)参数说明name加载模型的名称即user_guided_colorization。load_checkpoint是否加载自己训练的模型权重若为None则加载模型自带的默认预训练参数。set_config中的两个关键配置直接决定训练阶段的行为classification着色模型分两部分训练。开始阶段应设为True用于浅层网络特征提取层训练训练后期将classification设为False用于训练网络的输出层颜色回归层。这一先分类后回归的两阶段策略在 demo/colorization/train.py 中有完整体现详见下文两阶段训练策略。prob每张输入图不加入先验彩色块的概率默认为 1即完全不加入先验彩色块。例如当prob设为 0.9 时一张图上出现两个先验彩色块的概率为(1-0.9)*(1-0.9)*0.90.009。prob越小训练/预测时越倾向于利用用户涂抹的彩色块作为引导信息。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 2.0-rc 提供了多种优化器如SGD、Adam、Adamax等示例选用Adamlearning_rate全局学习率默认 1e-4。训练阶段一使用0.0001进入阶段二后降低为0.00001见 demo/colorization/train.py以更小的步长精调输出层。parameters待优化的模型参数直接传入model.parameters()。运行配置Trainer主要控制 Fine-tune 的训练过程构造参数包括model被优化模型optimizer优化器use_gpu是否使用 GPU 运行默认False设为True时内部会调用paddle.set_device(gpu)use_vdl是否使用 VisualDL 可视化训练过程默认True日志写入checkpoint_dir/visualizationcheckpoint_dir保存模型参数的目录compare_metrics保存最优模型的衡量指标比较函数默认取validation_step返回的第一个指标、值越大越好默认实现见 paddlehub/finetune/trainer.py。上述参数的默认值与行为均可在 paddlehub/finetune/trainer.py 的Trainer.__init__中找到对应实现。另外值得说明的是Trainer会自动断点续训启动时会扫描checkpoint_dir下epoch_*目录并恢复模型与优化器状态见 paddlehub/finetune/trainer.py。trainer.train控制具体的训练过程参数包括train_dataset训练数据集epochs训练轮数batch_size批大小若使用 GPU 请根据显存实际情况调整num_workers数据加载子进程数量默认为 0eval_dataset验证数据集一旦设置Trainer会在每个save_interval轮结束时执行验证见 paddlehub/finetune/trainer.py要求模型实现validation_step方法log_interval打印日志的间隔单位为执行批训练的次数save_interval保存模型的间隔频次单位为执行的训练轮数collate_fn自定义 mini-batch 组装函数默认对样本各字段按 axis 0 堆叠。两阶段训练策略源码级补充仓库中的 demo/colorization/train.py 展示了比 README 更完整的实战配置——真正的训练被拆成两个阶段# 阶段一浅层网络分类任务训练 model.set_config(classificationTrue, prob1) 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) # 阶段二输出层回归任务训练 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训练浅层网络 201 轮checkpoint 保存在img_colorization_ckpt_cls_1阶段二切换为classificationFalse并用更小的学习率1e-5精调输出层 101 轮checkpoint 保存在img_colorization_ckpt_reg_1同时将prob调低到0.125以引入先验彩色块参与训练。两份 checkpoint 目录相互独立这正是load_checkpoint与checkpoint_dir需要配对使用的原因。模型预测Fine-tune 过程中验证集上表现最优的模型会被保存到${CHECKPOINT_DIR}/best_model目录${CHECKPOINT_DIR}即训练时指定的 checkpoint 目录。该逻辑由 paddlehub/finetune/trainer.py 实现每当验证指标优于历史最优值就会把模型权重model.pdparams与优化器状态model.pdopt写入best_model目录并通过metrics.pkl记录最优指标。使用最优模型进行预测脚本见 demo/colorization/predict.pyimport 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支持的关键参数images原始图像路径或 BGR 格式的图片数组visualization是否可视化结果默认为Truesave_path结果保存路径默认为result。NOTE重要约束进行预测时所选择的module、checkpoint_dir、dataset必须与 Fine-tune 时保持一致否则输入特征分布不匹配会导致预测效果异常。若想直接获得油画风着色效果可下载官方提供的油画风预训练参数文件canvas_rc.pdparams作为load_checkpoint传入预测时同样可结合prob参数如设为0.1控制先验彩色块的参与程度。服务部署PaddleHub Serving 在线着色服务PaddleHub Serving 可以一键部署在线着色任务服务整个过程分为两步。Step1启动 PaddleHub Serving运行启动命令$ hub serving start -m user_guided_colorization这样就完成了一个着色任务服务化 API 的部署默认端口号为 8866。从 paddlehub/commands/serving.py 的实现可以看到hub serving start支持-m指定模块、-p指定端口默认 8866、-i指定 GPU 设备、-c指定 JSON 配置文件等参数。NOTE如使用 GPU 预测需在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则无需设置。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)]} 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)请求要点图片需先经cv2_to_base64编码为 base64 字符串后放入images字段请求 URL 为http://127.0.0.1:8866/predict/user_guided_colorization其中8866为默认服务端口user_guided_colorization为模块名返回结果位于results.data[0].fake_reg即模型输出的着色图回归结果解码后通过cv2.imwrite保存为color.png。结语本文以 demo/colorization 为完整示例走通了 PaddleHub 图像着色从hub run命令行预测、Trainer两阶段 Fine-tune、best_model权重预测到hub serving在线部署的全链路。核心要点可以归纳为三条其一着色任务必须在 LAB 颜色空间下训练与预测to_rgbTrue与RGB2LAB缺一不可其二模型采用分类浅层→ 回归输出层两阶段训练需要分别设置classification与学习率其三预测、Fine-tune 与 Serving 三者的 module、checkpoint 与数据集必须保持一致。掌握这套方法论后你可以基于 paddlehub/finetune/trainer.py 的Trainer接口将同样的四步流程迁移到其他视觉任务的微调实践中。【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考