基于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),仅供参考
企业数字化 ERP 产品动态
相关推荐
C++继承机制详解:从语法到最佳实践 1. 继承的本质与价值在C的世界里,继承就像家族基因的传递。想象你从父母那里继承了眼睛的颜色和身高,同时又发展出自己独特的技能和性格。这就是继承的核心思想——在已有类的基础上构建新类,既保留基类特性,又扩展专属功能。我见… · 2026/9/23 9:47:13
UVC摄像头开发实战:C++与C#双语言采集方案与避坑指南 简介:这份资源面向从事USB摄像头开发的C与C#程序员,聚焦UVC(USB Video Class)设备驱动与应用开发这一细分领域。UVC标准让摄像头无需专用驱动即可在Windows、Linux、macOS上完成视频传输,而包内代码正是围绕该协议展开… · 2026/9/23 9:47:13
3步搞定注册msn账号,附性能优化避坑指南 3步搞定注册msn账号,附性能优化避坑指南 配置环境就卡半天?注册个账号还要配SSL证书、改DNS、调防火墙,搞不好还撞了IP限流,性能优化直接拉胯。别急,今天不聊虚的,直接上实操。很多开发者把精力全耗在账号注册的“前置配置”上,结果核心业… · 2026/9/23 9:47:13
使用Trae为Github项目编写中英双语文档:TaoToken统一Key接入与config.toml配置实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 14:09:27
Salt 实战指南:使用 slack_notify 执行模块向 Slack 发送消息与告警 运维配置管理后端 【免费下载链接】salt Software to automate the management and configuration of infrastructure and applications at scale. 项目地址: https://gitcode.com/gh_mirrors/sa/salt 点击查看 免费下载 导读
slack_notify 是 Salt 内置的一个执行… · 2026/9/23 14:09:20
TPM与PKI实战:PCR读取、Hash验证与证书链构建 简介:本资源是华中科技大学可信计算课程线上测试的完整题库与参考答案,面向网络安全、信息安全及相关专业本科生与考研备考者,聚焦可信计算核心概念、技术原理与典型应用场景的系统性梳理。文档以Word格式(.docx)单文件… · 2026/9/23 14:09:13
TPM PCR扩展与PKI签名验证实操指南 简介:本资源是华中科技大学可信计算课程线上测试的完整题库与参考答案,面向网络安全、信息安全及计算机相关专业本科生与考研备考者,聚焦可信计算核心概念、技术原理与典型考题解析。文档系统梳理了可信计算的四大知识模块:可信性… · 2026/9/23 14:09:13
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29