资讯详情

基于PaddleHub的RepVGG-B2g4图像分类模型实战:从模型安装、推理预测到Fine-tune与服务化部署

发布时间:2026/9/23 9:48:33

500+
企业客户服务经验
120+
行业领域内容覆盖
3000+
原创页面设计沉淀
98%
客户满意度

基于PaddleHub的RepVGG-B2g4图像分类模型实战:从模型安装、推理预测到Fine-tune与服务化部署

基于PaddleHub的RepVGG-B2g4图像分类模型实战从模型安装、推理预测到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本指南以 PaddleFormers 仓库中的repvgg_b2g4_imagenet预训练分类模块为核心完整讲解 RepVGG 重参数化网络的原理、模块安装方式、命令行与 Python API 两种推理方法、基于 Flowers 数据集的 Fine-tune 全流程以及通过 PaddleHub Serving 将模型部署为在线分类服务的方法。读完本文你将能够独立完成 RepVGG 分类模型的下载安装、图片预测、迁移学习与服务化发布。一、模型基本信息repvgg_b2g4_imagenet是 PaddleHub 提供的一个图像分类预训练模块基本信息如下表模型名称repvgg_b2g4_imagenet类别图像-图像分类网络RepVGG数据集ImageNet-2012是否支持 Fine-tuning是模型大小357MB指标-最新更新日期2021-09-14该模块对应的完整代码位于仓库的 modules/image/classification/repvgg_b2g4_imagenet/module.py其中还包含一份 label_list.txt记录了模块默认使用的 ImageNet-2012 类别名称默认 1000 类。二、RepVGG 网络与模块源码解析2.1 模型介绍RepVGGMaking VGG-style ConvNets Great Again系列模型由清华大学丁桂光团队、旷视科技孙建等、香港科技大学和阿伯里斯特威斯大学于 2021 年提出是一种简单但功能强大的卷积神经网络架构。它拥有一个类似于 VGG 的推理期结构主体仅由 3x3 卷积和 ReLU 堆叠而成而训练期模型则采用多分支拓扑3x3 卷积分支 1x1 卷积分支 恒等映射分支。训练期与推理期结构通过重参数化reparameterization技术解耦因此该模型被称为 RepVGG。2.2 源码级解析多分支训练与单分支推理在 module.py 中RepVGGBlock类完整实现了这一思想训练阶段的前向计算forward方法中self.training为真时return self.nonlinearity(self.rbr_dense(inputs) self.rbr_1x1(inputs) id_out)其中rbr_dense是 3x3 卷积 BN 分支rbr_1x1是 1x1 卷积 BN 分支id_out是恒等映射BN分支当out_channels in_channels and stride 1时存在。三个分支的输出直接相加后经 ReLU 激活。推理阶段的重参数化eval方法首次切换到推理模式时通过get_equivalent_kernel_bias将三条分支融合为单个 3x3 卷积kernel3x3, bias3x3 self._fuse_bn_tensor(self.rbr_dense) kernel1x1, bias1x1 self._fuse_bn_tensor(self.rbr_1x1) kernelid, biasid self._fuse_bn_tensor(self.rbr_identity) return kernel3x3 self._pad_1x1_to_3x3_tensor(kernel1x1) kernelid, bias3x3 bias1x1 biasid1x1 卷积核通过_pad_1x1_to_3x3_tensor填充为 3x3恒等分支生成单位卷积核BN 的均值、方差、缩放与偏置通过_fuse_bn_tensor折算进卷积核与偏置中。融合完成后推理时forward直接执行self.nonlinearity(self.rbr_reparam(inputs))网络退化为纯 3x3 卷积栈这正是 RepVGG 高吞吐推理的关键。2.3 模型结构配置从RepVGG_B2G4.__init__中的源码可以看出 B2g4 变体的结构参数num_blocks [4, 6, 16, 1] # 四个 stage 的 RepVGGBlock 数量 width_multiplier [2.5, 2.5, 2.5, 5] # 各 stage 通道数倍率 optional_groupwise_layers [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26] self.override_groups_map {l: 4 for l in optional_groupwise_layers} # 指定层使用 group4 的分组卷积即 B2g4 表示基础宽度倍率为 2.5、部分层采用 groups4 的分组卷积。整个网络由stage0起始卷积块加上stage1~stage4四个阶段构成最后通过AdaptiveAvgPool2D全局池化和nn.Linear全连接层输出类别 logitsforward同时返回(out, feature)其中feature为全局池化后的特征向量可供下游任务使用。模块继承自paddlehub.module.cv_module.ImageClassifierModule见 paddlehub/module/cv_module.py该基类实现了training_step、validation_step、predict、serving_method、run_cmd等标准接口。三、环境依赖与模块安装3.1 环境依赖使用本模块需要满足以下版本要求paddlepaddle 2.0.0paddlehub 2.0.03.2 安装模块执行以下命令即可从 PaddleHub 官方模型库安装repvgg_b2g4_imagenet$ hub install repvgg_b2g4_imagenet如安装过程中遇到问题可参考以下零基础安装教程零基础Windows安装零基础Linux安装零基础MacOS安装安装完成后模块会连同预训练权重model.pdparams一起就绪。从 module.py 的加载逻辑可以看到hub.Module(namerepvgg_b2g4_imagenet)在未指定load_checkpoint时会自动从模块目录加载 ImageNet 预训练权重并打印load pretrained checkpoint success。四、模型 API 预测4.1 命令行预测安装完成后可直接通过hub run命令对单张图片进行预测$ hub run repvgg_b2g4_imagenet --input_path /PATH/TO/IMAGE --top_k 5--input_path待预测图片的路径必填。--top_k返回置信度最高的前 k 个分类结果默认值为 1该参数的默认值定义见 cv_module.py 中的add_module_config_arg。命令行预测的内部实现位于ImageClassifierModule.run_cmd解析参数后调用self.predict(images[args.input_path], top_kargs.top_k)因此命令行与 Python API 的预测逻辑完全一致。4.2 预测代码示例import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namerepvgg_b2g4_imagenet) result model.predict([flower.jpg])model.predict的内部流程见 cv_module.py为先调用self.eval()触发 RepVGG 的重参数化再在paddle.no_grad()环境下按batch_size分批处理对模型输出施加softmax后按置信度降序取前top_k个类别最终返回形如[{类别名: 置信度}, ...]的列表。每个输入图片会先经过模块内置的数据预处理Resize((256, 256))→CenterCrop(224)→Normalize并转成 RGB 通道顺序与 Fine-tune 时采用的预处理保持一致。五、基于 Flowers 数据集进行 Fine-tune在完成 PaddlePaddle 与 PaddleHub 安装后通过执行python train.py即可开始使用repvgg_b2g4_imagenet对 Flowers 等数据集进行 Fine-tune。仓库中的 demo/image_classification/train.py 提供了同结构的完整可运行示例默认使用resnet50_vd_imagenet_ssld将其替换为repvgg_b2g4_imagenet即可。代码步骤如下Step 1: 定义数据预处理方式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数据增强模块定义了丰富的数据预处理方式用户可按照需求替换自己需要的数据预处理方式T.Resize((256, 256))将图片缩放到 256x256支持NEAREST、LINEAR、CUBIC、AREA、LANCZOS4、RANDOM等插值模式见 paddlehub/vision/transforms.py默认线性插值。T.CenterCrop(224)从中心裁剪出 224x224 区域与 ImageNet 分类的经典输入尺寸一致。T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225])使用 ImageNet 统计的均值与标准差进行标准化。to_rgbTrue将 OpenCV 读取的 BGR 图片转为 RGB 通道顺序Compose默认还会将图片从 HWC 排列转为 CHWchannel_firstTrue。Step 2: 下载数据集并使用from paddlehub.datasets import Flowers flowers Flowers(transforms) flowers_validate Flowers(transforms, modeval)transforms数据预处理方式。mode选择数据模式可选项有train、test、val默认为train。数据集的实现参考 paddlehub/datasets/flowers.pyhub.datasets.Flowers()会自动从网络下载数据集flower_photos.tar.gz并解压到用户目录下$HOME/.paddlehub/dataset目录。该数据集共 5 个类别num_classes 5根据mode的不同分别读取train_list.txt、test_list.txt或validate_list.txt__getitem__返回(预处理后的图片, 类别索引)元组可直接被paddle.io.DataLoader使用。Step 3: 加载预训练模型model hub.Module(namerepvgg_b2g4_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion])name选择预训练模型的名字。label_list设置输出分类类别默认为 ImageNet-2012 类别即 label_list.txt 中的 1000 个类别。从 module.py 可以看出传入label_list后class_dim会按列表长度计算全连接层self.linear的维度也随之改变5 类时输出 5 维不传时则读取默认的 1000 类列表。这保证了在迁移学习时只需更换分类头维度而不必重新初始化整个骨干网络。Step 4: 选择优化策略和运行配置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)运行配置说明如下Trainer主要控制 Fine-tune 的训练实现在 paddlehub/finetune/trainer.py包含以下可控制的参数model被优化模型optimizer优化器选择use_gpu是否使用 GPU 运行默认Falseuse_vdl是否使用 VisualDL 可视化训练过程默认True日志写入checkpoint_dir/visualization目录checkpoint_dir保存模型参数的地址若为空则自动生成ckpt_{时间戳}目录compare_metrics保存最优模型的衡量指标比较函数默认取validation_step返回的第一个指标越大越好。trainer.train主要控制具体的训练过程包含以下可控制的参数train_dataset训练时所用的数据集epochs训练轮数batch_size训练的批大小如果使用 GPU请根据实际情况调整 batch_sizenum_workers数据加载子进程数量默认为 0eval_dataset验证集设置后 Trainer 会在每个save_interval轮执行一次评估log_interval打印日志的间隔单位为执行批训练的次数默认 10save_interval保存模型的间隔频次单位为执行训练的轮数默认 10。训练过程中每次评估后若验证指标优于历史最优由compare_metrics判定Trainer 会将最优模型保存到${checkpoint_dir}/best_model目录内含model.pdparams与model.pdopt同时把历史最优指标写入metrics.pkl便于断点续训时恢复。六、Fine-tune 后的模型预测当完成 Fine-tune 后验证集上表现最优的模型会被保存在${CHECKPOINT_DIR}/best_model目录下其中${CHECKPOINT_DIR}目录为 Fine-tune 时所选择的保存 checkpoint 的目录。使用该模型进行预测的predict.py脚本如下import paddle import paddlehub as hub if __name__ __main__: model hub.Module(namerepvgg_b2g4_imagenet, label_list[roses, tulips, daisy, sunflowers, dandelion], load_checkpoint/PATH/TO/CHECKPOINT) result model.predict([flower.jpg])NOTE:进行预测时所选择的 module、checkpoint_dir、dataset 必须和 Fine-tune 所用的一样。也就是说name、label_list要与训练阶段保持一致load_checkpoint指向best_model目录下的权重文件若类别顺序或数量不一致全连接层维度与标签映射将无法对齐。七、服务部署PaddleHub Serving 可以部署一个在线分类任务服务将repvgg_b2g4_imagenet封装为 HTTP API 对外提供预测能力。第一步启动 PaddleHub Serving运行启动命令$ hub serving start -m repvgg_b2g4_imagenet这样就完成了一个分类任务服务化 API 的部署默认端口号为 8866。NOTE:如使用 GPU 预测则需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则不用设置。第二步发送预测请求配置好服务端后以下数行代码即可实现发送预测请求、获取预测结果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/repvgg_b2g4_imagenet r requests.post(urlurl, headersheaders, datajson.dumps(data)) data r.json()[results][data]请求体中images为 base64 编码的图片列表top_k控制返回的 Top 类别数量。服务端收到请求后会调用模块的serving_method定义于 cv_module.py将 base64 解码为 BGR 图片、调用predict完成分类、把 numpy 置信度转为 Pythonfloat后以{data: [...]}形式返回results字段即为该返回体。八、更新历史1.0.0初始发布。至此你已经走通了 RepVGG-B2g4 从安装、推理到迁移学习、在线部署的完整链路。若需进一步了解 PaddleHub 其他预训练分类模型的用法可对比参考仓库 modules/image/classification 目录下的同类模块关于自定义数据集的接入方式可参考 docs/docs_ch/finetune/customized_dataset.md。【免费下载链接】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),仅供参考
热门专题

继续阅读更多专题内容

围绕企业服务、数字化转型与官网运营的常青话题,持续输出深度内容

企业官网建设指南 企业托管服务模式 财税政策与解读 企业数字化转型 官网SEO与获客 网站安全与运维
配套服务

读完这篇文章,了解更多服务

从整站搭建到SEO布局,17项核心服务助您打造高转化的企业官网

01

企业托管整站搭建

从信息架构到栏目预留,搭建可生长的企业站点骨架,每个页面独立原创设计。...

了解详情
02

规整可信网页设计

雪地靴温暖风原创设计,金属铜线条贯穿全页,拒绝通用模板与AI流水线。...

了解详情
03

企业服务SEO布局

关键词体系与语义化结构,从建站源头为搜索排名而生。...

了解详情
04

业务预约咨询表单

多场景表单与线索收集体系,把访问流量转化为可追踪的销售线索。...

了解详情
05

企业服务站点运维

安全巡检、数据备份与内容更新支持,全年守护网站稳定运行。...

了解详情
06

全终端商务适配

电脑、平板、手机一致呈现,移动端体验与转化同样出色。...

了解详情
需要专业建议?

让专业顾问为您解读行业趋势

关于企业官网建设、SEO获客与数字化转型的任何疑问,欢迎一对一咨询我们的专业顾问。