PaddleHub SpinalNet 宝石识别实战:基于 ResNet50 的 Gemstone 图像分类模型使用指南

发布时间:2026/9/24 2:27:13
PaddleHub SpinalNet 宝石识别实战:基于 ResNet50 的 Gemstone 图像分类模型使用指南 人工智能大模型微调模型推理服务【免费下载链接】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 图像分类模块spinalnet_res50_gemstone展开该模块以 ResNet50 为骨干网络、SpinalNet 全连接结构为分类头在 Gemstone 数据集上训练而成可用于对宝石图像进行细粒度分类。读完本文你将掌握该模块的安装方式、命令行与 Python API 预测方法、底层网络结构原理以及基于同一系列模型ResNet50 / ResNet101 / VGG16进行宝石识别与微调的基本思路。一、模型基本信息spinalnet_res50_gemstone是 PaddleHub 提供的一个图像分类模块核心信息如下表所示来源modules/image/classification/spinalnet_res50_gemstone/README.md属性值模型名称spinalnet_res50_gemstone类别图像-图像分类网络resnet50数据集gemstone是否支持 Fine-tuning否模块以推理为主详见下文说明模型大小137MB最新更新日期-数据指标-该模块的用途非常明确使用 PaddleHub 的 SpinalNet 预训练模型进行宝石识别并可在此基础上完成宝石的预测任务。模型接收一张宝石图像输出该图像所属宝石类别的标签及对应概率适用于宝石鉴定、珠宝商品分类等场景。说明README 表格中标注“是否支持 Fine-tuning否”指该模块发布形态以直接推理为主不过从源码看模块构造函数支持load_checkpoint参数加载自定义 checkpoint见下文仓库内也附带了基于 PaddleHub Fine-tune API 的微调示例代码需要微调时可参考该部分内容。二、SpinalNet 结构解析从源码理解模型原理在动手使用之前先通过源码理解该模型的结构这有助于解释预测结果并指导后续微调。2.1 骨干网络ResNet50模块的骨干网络定义在 modules/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/module.py 中包含两个核心组件BottleneckBlock标准残差瓶颈块expansion 4由 1×1、3×3、1×1 三层卷积加 BatchNorm 与 ReLU 组成并通过残差连接out identity缓解深层网络的梯度消失问题module.pyResNet按layer_cfg[50] [3, 4, 6, 3]组织 4 个残差阶段stage并包含 7×7 卷积、最大池化和AdaptiveAvgPool2D((1, 1))全局平均池化。网络输出 2048 维特征module.py。2.2 分类头SpinalNet 层级全连接SpinalNet_ResNet50类module.py在 ResNet50 特征之后构建了 SpinalNet 分类头其关键设计为half_in_size round(2048 / 2) # 1024将 2048 维特征对半切分 layer_width 20 # 每层 Spinal 神经元宽度 self.fc_spinal_layer1 nn.Sequential(nn.Dropout(p0.5), nn.Linear(half_in_size, layer_width), nn.BatchNorm1D(layer_width), nn.ReLU()) self.fc_spinal_layer2 nn.Sequential(nn.Dropout(p0.5), nn.Linear(half_in_size layer_width, layer_width), nn.BatchNorm1D(layer_width), nn.ReLU()) self.fc_spinal_layer3 nn.Sequential(nn.Dropout(p0.5), nn.Linear(half_in_size layer_width, layer_width), nn.BatchNorm1D(layer_width), nn.ReLU()) self.fc_spinal_layer4 nn.Sequential(nn.Dropout(p0.5), nn.Linear(half_in_size layer_width, layer_width), nn.BatchNorm1D(layer_width), nn.ReLU()) self.fc_out nn.Sequential(nn.Dropout(p0.5), nn.Linear(layer_width * 4, class_dim))SpinalNet 的前向传播forward采用了“脊柱式”递进连接先将 2048 维特征展平并切分为两半各 1024 维第一层仅消费前半段特征后续每一层都将上一层的输出拼接回特征再计算层层累积信息最后把 4 层输出拼接后送入fc_out得到类别得分y1 self.fc_spinal_layer1(y[:, 0:self.half_in_size]) y2 self.fc_spinal_layer2(paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y1], axis1)) y3 self.fc_spinal_layer3(paddle.concat([y[:, 0:self.half_in_size], y2], axis1)) y4 self.fc_spinal_layer4(paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y3], axis1)) y paddle.concat([y1, y2, y3, y4], axis1) y self.fc_out(y)这种结构与文献中 SpinalNet 的层间连接思想一致相比传统 MLP 分类头它能更充分地利用浅层信息。forward同时返回分类得分y与 backbone 特征feature便于后续做特征分析或迁移。2.3 输入预处理模块内置的transformsmodule.py定义了与训练一致的预处理流程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)即先将图像缩放至 256×256再中心裁剪为 224×224最后按 ImageNet 统计均值/方差归一化。这意味着模型输入尺寸为224×224×3调用 API 时无需自行做这些处理。2.4 模块注册与权重加载类通过moduleinfo装饰器注册为 PaddleHub 模块声明了namespinalnet_res50_gemstone、typeCV/classification、version1.0.0等元信息。构造时若不传label_list会从模块目录下的 label_list.txt 读取标签列表并据此确定类别数共 87 类同时自动加载随模块分发的预训练权重spinalnet_res50.pdparams。若传入load_checkpoint则加载自定义 checkpoint这也是微调后恢复模型的关键入口。三、环境准备与模块安装3.1 环境依赖使用该模块前需要满足以下依赖见 README.mdpaddlepaddle 2.0.0深度学习框架paddlehub 2.0.0模型管理与推理框架。PaddleHub 的详细安装方法可参考 PaddleHub 安装文档。安装过程中如遇问题可按操作系统查阅零基础安装指南Windows | Linux | MacOS。3.2 安装模块在命令行执行$ hub install spinalnet_res50_gemstone安装完成后模块即被 PaddleHub 托管可通过hub.Module(namespinalnet_res50_gemstone)或命令行直接调用。需要指定版本时如回退到 1.0.0可执行$ hub install spinalnet_res50_gemstone1.0.0四、模型预测命令行与 Python API4.1 命令行预测无需编写代码直接通过hub run命令即可完成单张图像的宝石分类$ hub run spinalnet_res50_gemstone --input_path /PATH/TO/IMAGE/PATH/TO/IMAGE替换为待预测图像的绝对路径。如需查看更多预测结果可追加--top_k 5参数输出概率最高的前 5 个类别该参数在仓库示例文档 SpinalNet_Gemstones/README.md 的命令行示例中出现。PaddleHub 命令行指令的完整说明见 PaddleHub 命令行指令文档。4.2 Python 代码预测在 Python 脚本中加载模块并预测的完整示例import paddlehub as hub import cv2 classifier hub.Module(namespinalnet_res50_gemstone) result classifier.predict([/PATH/TO/IMAGE]) print(result)其中cv2用于图像读取predict接收图像路径组成的列表返回与输入一一对应的预测结果列表。4.3 predict API 说明模块对外暴露的分类接口如下def predict(images)参数imageslist类型待预测的图像图像路径列表返回resultlist类型每个元素为对应输入图片的预测结果。预测结果为dictkey 为该图片分类结果 labelvalue 为该 label 对应的概率。例如对一张宝石图片预测输出形如[{Cats Eye: 0.9867, ...}]即模型认为该图最可能是“Cats Eye”类别置信度约 98.67%。4.4 输入图像示例以下两幅图像取自仓库内置的测试图片目录 testImages可直接作为--input_path或predict的输入验证模块效果图 1萤石Fluorite测试样本具有典型的蓝绿-紫色多色带特征对应 label_list.txt 中的 Fluorite 类别。![猫眼石Cats Eye样本弧面切割带光带效应](https://raw.gitcode.com/gh_mirrors/pa/PaddleFormers/raw/dd107683c324e75919f6393426fcb9c792d57747/./modules/image/classification/SpinalNet_Gemstones/testImages/Cats Eye/cats_eye_3.jpg?utm_sourcegitcode_repo_files)图 2猫眼石Cats Eye测试样本弧面切割并呈现典型“猫眼光带”对应标签列表中的 Cats Eye 类别。五、分类标签体系模型的输出类别由 label_list.txt 定义共87 个宝石类别涵盖常见宝石及变种例如Alexandrite亚历山大石、Amber琥珀、Amethyst紫水晶、Diamond钻石、Emerald祖母绿、Fluorite萤石、Jade玉、Opal欧泊、Pearl珍珠、Ruby红宝石、Sapphire Blue / Pink / Purple / Yellow各色蓝宝石、Topaz黄玉、Tourmaline碧玺、Turquoise绿松石、Cats Eye猫眼石、Tigers Eye虎眼石等。该文件由SpinalNet_ResNet50.__init__在未显式传入label_list时自动读取并逐行解析去掉换行符后加入列表class_dim len(self.labels)决定分类头输出维度因此若需在自定义标签集上使用该网络可直接传入label_list参数覆盖默认标签。六、同系列模块与微调扩展6.1 同系列兄弟模块SpinalNet 宝石识别在仓库中共有三个变体目录 SpinalNet_Gemstones模块名骨干网络源码spinalnet_res50_gemstoneResNet502048 维特征Spinal 宽度 20module.pyspinalnet_res101_gemstoneResNet1012048 维特征Spinal 宽度 20module.pyspinalnet_vgg16_gemstoneVGG16512×7×7 特征Spinal 宽度 4096module.py三个模块共享相同的 SpinalNet 递进连接结构与预处理逻辑仅骨干网络和 Spinal 层宽度不同VGG16 版将特征展平为 512×7×7 后对半切分Spinal 宽度为 4096。加载与预测方式完全一致import paddlehub as hub spinal_res101 hub.Module(namespinalnet_res101_gemstone) spinal_vgg16 hub.Module(namespinalnet_vgg16_gemstone) result spinal_res101.predict([/PATH/TO/IMAGE])6.2 微调Fine-tune扩展虽然模块表格标注“不支持 Fine-tuning”但仓库示例 SpinalNet_Gemstones/README.md 完整演示了基于 PaddleHub Fine-tune API 的微调流程可归纳为 5 个步骤加载必要库Trainer、GemStones数据集类与 paddle 框架定义数据预处理与模块内置一致即Resize((256, 256)) CenterCrop(224) Normalize(ImageNet 均值/方差)定义数据集基于 gem_dataset.py 中的GemStones(paddle.io.Dataset)构造 train/eval 数据集其内部通过paddle.vision.DatasetFolder按子目录结构读取图像并生成class_to_idx标签映射开始训练微调使用paddle.optimizer.Momentum(learning_rate0.001, momentum0.9)优化器与Trainer配置训练例如trainer.train(gem_train, epochs5, batch_size128, eval_datasetgem_validate, save_interval1, log_interval10)微调后再预测重新加载模块并对新图像进行预测。从源码看微调后的权重可通过构造参数load_checkpoint传入模块完成恢复这与 module.py 中“加载自定义 checkpoint 成功”的分支逻辑相互印证。七、更新历史1.0.0初始发布首个发布版本支持宝石图像分类推理可通过以下命令安装指定版本$ hub install spinalnet_res50_gemstone1.0.0总结spinalnet_res50_gemstone是一个开箱即用的宝石图像分类模块以 ResNet50 为骨干、SpinalNet 递进式全连接为分类头在 Gemstone 数据集上训练并识别 87 类宝石。通过hub run命令或hub.Module.predictAPI 即可快速完成单张/多张图像的分类若需自定义识别场景同目录的 ResNet101、VGG16 变体以及微调示例提供了完整的扩展路径。相关代码与数据可分别在 module.py、gem_dataset.py 与 label_list.txt 中继续深入阅读。赞分享人工智能大模型微调模型推理服务【免费下载链接】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 spinalnet_res50_gemstone基于 SpinalNet-ResNet50 的宝石图像分类模块实战指南PaddleHub spinalnet_res50_gemstone基于 SpinalNet ResNet50 的宝石图像分类模块实战指南 本文以 Paddl人工智能大模型微调模型推理服务PaddleHub 宝石图像分类实战SpinalNet-ResNet101 Gemstone 预训练模型的加载、预测与微调PaddleHub 宝石图像分类实战SpinalNet ResNet101 Gemstone 预训练模型的加载、预测与微调 导读 本文以 PaddleHub人工智能大模型微调模型推理服务基于 PaddleHub 的 SpinalNet 宝石图像分类模型架构、预测与 Fine-tune 实战指南基于 PaddleHub 的 SpinalNet 宝石图像分类模型架构、预测与 Fine tune 实战指南 导读 本文以仓库 modules/image/人工智能大模型微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考