从零到上线:用华为云 ModelArts 训练图像分类模型并部署为 API

举报
yd_280727371 发表于 2026/10/23 09:05:12 2026/10/23
【摘要】 一、背景与痛点想做一个垃圾分类的小工具,核心需求很简单:拍张照,识别出是哪种垃圾。但真正动手时发现几个拦路虎:算力贵:本地没有 GPU,买卡不划算,租云服务器配环境又麻烦环境配置繁琐:CUDA、cuDNN、PyTorch 版本一堆坑,配一天不一定跑通训练完不知道怎么用:模型训好了,但怎么让别人通过手机/网页调用?ModelArts 的思路就是把这些全托管了:训练用按需实例,推理一键部署,AP...

一、背景与痛点

想做一个垃圾分类的小工具,核心需求很简单:拍张照,识别出是哪种垃圾。
但真正动手时发现几个拦路虎:
  1. 算力贵:本地没有 GPU,买卡不划算,租云服务器配环境又麻烦
  2. 环境配置繁琐:CUDA、cuDNN、PyTorch 版本一堆坑,配一天不一定跑通
  3. 训练完不知道怎么用:模型训好了,但怎么让别人通过手机/网页调用?
ModelArts 的思路就是把这些全托管了:训练用按需实例,推理一键部署,API 网关直接对外暴露。

二、方案设计

整体流程:
本地标注数据集
   ↓
上传到 OBS
   ↓
ModelArts 创建数据集(自动切分训练/验证集)
   ↓
选择预置算法(ResNet50/ MobileNet)启动训练
   ↓
模型转换(Ascend 适配 / 导出)
   ↓
部署为在线推理服务
   ↓
API 网关对外暴露 HTTPS 接口
选型理由:
  • OBS:数据集和模型文件的统一存储,ModelArts 直接读取
  • ModelArts 训练:按需 GPU 实例,训练完即释放,不浪费钱
  • ModelArts 推理:托管在线服务,自动扩缩容
  • APIG:给推理服务套一层标准 RESTful API,方便前端/小程序调用
避坑点:如果数据集较小(< 1000 张/类),优先用预置算法做迁移学习,不要从头训练,否则容易过拟合且训练慢。

三、实操步骤

3.1 准备数据集

垃圾分类分 4 类:可回收物、有害垃圾、厨余垃圾、其他垃圾。
每张图片放到对应类别文件夹下,目录结构:
garbage-dataset/
├── recyclable/
│   ├── img_001.jpg
│   └── ...
├── hazardous/
├── kitchen/
└── other/
建议每类至少 200 张图片,总计 800+ 张。图片尺寸不要求统一,训练时会自动 resize。
打包上传到 OBS:
# 用 OBS Browser+ 或 obsutil 上传
obsutil cp -r ./garbage-dataset obs://my-ai-bucket/datasets/garbage/

3.2 在 ModelArts 创建数据集

  1. 进入 ModelArts 控制台 → 数据管理 → 数据集
  2. 创建数据集,类型选「图像分类」
  3. 数据存储位置选择 OBS 中刚上传的目录
  4. 标注场景选「图像分类」,标签集填:recyclable, hazardous, kitchen, other
  5. 创建后系统自动按 8:2 切分训练集和验证集
如果图片还没标注,可以在 ModelArts 的标注页面手动标注,支持多人协作标注。

3.3 启动训练

  1. ModelArts 控制台 → 训练管理 → 训练作业
  2. 算法来源选「预置算法」→ ResNet50 (ImageNet 预训练)
  3. 训练输入:选择上一步创建的数据集
  4. 训练输出:指定 OBS 路径,如 obs://my-ai-bucket/output/garbage-resnet50/
  5. 规格选择:GPU: 1 * NVIDIA-V100 (32GB)(按需,训练完即停)
  6. 超参配置:
    • batch_size: 32
    • learning_rate: 0.001
    • epochs: 50
    • optimizer: Adam
启动后可以在「训练作业」页面查看日志,一般 800 张图 + 50 epoch 在 V100 上约 20-30 分钟跑完。
训练完成后,验证集精度(Accuracy)达到 85%+ 即为可用水平。

3.4 模型转换与导入

  1. 训练作业完成后,在输出路径找到模型文件(通常是 .pth 或 .onnx)
  2. 模型管理 → 导入模型
  3. 选择模型来源为 OBS 中的训练输出
  4. 推理框架选 TensorFlow 或 PyTorch(根据训练时用的框架)
  5. 配置推理脚本(如果预置算法没有自带,需自己写 customize_service.py):
import torch
from PIL import Image
import torchvision.transforms as transforms

class GarbageClassifier:
    def __init__(self, model_path):
        self.model = torch.load(model_path)
        self.model.eval()
        self.labels = ['recyclable', 'hazardous', 'kitchen', 'other']
        self.transform = transforms.Compose([
            transforms.Resize((224, 224)),
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225])
        ])

    def predict(self, image_bytes):
        image = Image.open(image_bytes).convert('RGB')
        input_tensor = self.transform(image).unsqueeze(0)
        with torch.no_grad():
            output = self.model(input_tensor)
            _, predicted = torch.max(output, 1)
        return self.labels[predicted.item()]

3.5 部署在线推理服务

  1. 模型管理 → 点击刚导入的模型 → 部署 → 在线服务
  2. 规格选择:CPU: 2U8G(推理不需要 GPU,省钱)
  3. 实例数:1(测试阶段)
  4. 等待状态变为「运行中」
部署完成后,ModelArts 会生成一个临时 API 地址,可以先在控制台「在线服务 → 预测」里上传图片测试。

3.6 通过 API 网关对外暴露

ModelArts 自带的 API 地址有时效限制,生产环境建议走 API 网关:
  1. API 网关控制台 → 创建 API
  2. 前端类型:HTTP/HTTPS
  3. 后端类型:HTTP/HTTPS,URL 填 ModelArts 推理服务的地址
  4. 认证方式:简单认证(AppCode)或 IAM 认证
  5. 发布到 RELEASE 环境
调用示例(Python):
import requests

url = "https://your-apig-domain.com/v1/garbage-classify"
headers = {"X-Apig-AppCode": "your-app-code"}

files = {"images": open("test.jpg", "rb")}
response = requests.post(url, headers=headers, files=files)
print(response.json())
# 输出: {"predicted_label": "recyclable", "confidence": 0.92}

四、验证结果


测试图片
模型预测
置信度
是否正确
矿泉水瓶
recyclable
0.94
✅
电池
hazardous
0.88
✅
剩饭
kitchen
0.91
✅
烟头
other
0.76
✅
单张推理耗时约 200-400ms(CPU 实例),满足实时交互需求。
成本回顾(按需计费):
  • 训练:V100 × 30 分钟 ≈ ¥15
  • 推理:2U8G CPU × 24h ≈ ¥8/天(测试阶段用完可停)
  • OBS 存储:几 GB,几乎可忽略

五、总结与可扩展

这次实践验证了 ModelArts 全托管 AI 开发的可行性:
  • 零环境配置:开箱即用的训练环境和预置算法
  • 按需付费:不用买 GPU 服务器,训练完即释放
  • 一键部署:模型到 API 的链路很短,适合快速验证
后续可扩展方向:
  1. 数据增强:加入旋转、裁剪、色彩抖动,提升小数据集下的泛化能力
  2. 模型轻量化:换 MobileNetV3 或做量化,推理延迟可降到 100ms 以内
  3. 批量推理:用 ModelArts 批量服务处理历史图片
  4. 前端对接:小程序/Web 直接调 APIG 接口,做完整应用
  5. 自动标注:用训练好的模型对未标注图片做预标注,再人工校正,形成数据飞轮


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。