1.2 虚拟试衣实战:基于阿里 PAI 平台的 SD + LoRA 微调

1.2 虚拟试衣实战:基于阿里 PAI 平台的 SD + LoRA 微调

本篇将 6 份课件压缩整合为一篇,围绕虚拟试衣项目展开:在阿里云 PAI 平台上,通过 Stable Diffusion + LoRA 微调实现虚拟上装。全流程覆盖背景与原理、PAI 平台、环境搭建、模型微调、部署推理。

虚拟试衣大纲


一、虚拟试衣背景

1.1 什么是虚拟试衣

虚拟试衣是一种结合计算机图形学和人工智能、实现虚拟试穿效果的创新技术:将虚拟服装模型与真实人体模型相结合,模拟出真实的试穿场景,解决在线购物时缺乏试穿机会的问题。

传统在线购物的局限:消费者只能通过图片/视频查看商品,无法亲身感受质地、舒适度等实际效果;实体店试穿受时间、地点、成本限制,导致购买决策犹豫。

1.2 应用场景

场景 作用
电商 消费者在线试穿商品,提高购物决策准确性
虚拟现实/增强现实 虚拟服装模型与真实人体结合,更逼真的 VR/AR 体验
时尚设计 个性化搭配推荐、定制化设计、时尚趋势预测,提高设计效率
影视制作 快速预览搭配、增强视觉效果、优化角色造型设计

1.3 虚拟试衣的优势

  • 节省时间精力:无需到店即可在线试穿多个商品,提升购物效率
  • 提高决策准确性:更好了解商品效果,避免购买不合适商品
  • 个性化推荐与定制:根据需求喜好推荐合适商品,提供定制化设计
  • 增强品牌形象:消费者更直观了解商品效果,增强品牌认知和信任
  • 降低成本与库存风险:按需生产备货,预测商品受欢迎程度,减少滞销和退换货

1.4 虚拟试衣的方法

方法一:使用 LoRA 进行服饰训练和可控生成——通过添加少量可微调参数和使用少量数据集,快速微调模型,为模特、动作、背景等提供广泛的生成空间。

LoRA服饰训练方法

方法二:基于 SAM 和 ControlNet 的人体重绘技术——在 SDWebUI 中同时利用多个 ControlNet 完成图像生成中的部分内容编辑,在完整保留原始图像衣物细节后,对其余部分(人物、背景)进行创意重绘。

SAM+ControlNet人体重绘

1.5 课程安排

在 PAI 平台搭建虚拟试衣环境 → 加载预训练模型参数 → 通过 WebUI 启动模型推理,实时展示虚拟上装效果。

PAI 平台课程收获:适用于企业缺乏数据算力的场景(NLP、CV 各领域);未来趋势(百度千帆、阿里 PAI、讯飞星火);企业降本增效;减小环境搭建和部署难度,快速上手。


二、阿里云人工智能平台 PAI

2.1 AIGC 的领域划分与 AI 研发新范式

AIGC领域划分

AI 研发形成三类用户的新范式:

AI研发新范式

  • 上游:通用模型生产者与平台方(如阿里)
  • 中游:利用垂直行业知识对模型进行优化(生态伙伴)
  • 下游:最终 AI 应用的使用者(最广大的用户群体)

2.2 PAI 4.0 架构

PAI 4.0 采用三层架构:

PAI4.0架构

  • 下层:强大的基础设施
  • 中间层:PAI 灵骏智算集群,专门面向超大规模分布式,重点解决预训练、Finetune、推理等工作
  • 最上层:Model as a Service 概念,让不懂算法但需要应用 AI 的人进行全链路 AI 创新

2.3 PAI 平台的作用

提升开发效率,提供全生命周期的 AI 平台,核心子产品:

子产品 作用
PAI-DSW 交互式建模,云端机器学习开发 IDE
PAI-DLC 分布式训练
PAI-EAS 模型服务与 AI 推理,一键部署为 Restful API

2.4 PAI 产品结构

PAI产品结构

支持丰富的机器学习算法(基础聚类/回归、文本分析、特征处理);兼容 TensorFlow、PyTorch、Caffe、MXNet 等主流深度学习框架;Designer 提供拖拽式可视化建模,无需编程。

一站式机器学习体验:数据上传与预处理 → 特征工程与模型训练 → 模型评估与一键部署。

2.5 PAI 平台架构

PAI平台架构

  • 基础设施层:CPU、GPU、FPGA 及 NPU
  • 计算引擎和容器服务层:MaxCompute、EMR、实时计算及容器服务 ACK
  • 计算框架层:Alink、TensorFlow、PyTorch、Megatron、DeepSpeed、Caffe、MapReduce、SQL 及 MPI
  • 按机器学习全流程的产品
    • 数据准备:智能标注,支持多场景数据标注和数据集管理
    • 模型开发与训练:可视化建模(Designer)、交互式建模(DSW)、分布式训练(DLC)、特征平台(FeatureStore)
    • 模型部署:模型在线服务(EAS)和推理加速工具(Blade)
  • 业务层:应用于金融、医疗、教育、交通、安全等领域

三、阿里云注册、实名认证与开通 PAI

要完成虚拟试衣任务需进行实名认证。

3.1 注册阿里云

进入阿里云官网,单击右上角登录/注册 → 注册。三种注册方式:

方式 步骤要点
账号密码注册 设置登录名(525 字符,可含字母或汉字,不含特殊字符,避免敏感信息,推荐中文)→ 设置密码(620 字符,字母/数字/标点至少含 2 种)→ 手机号验证码
扫码注册 用阿里云 APP/支付宝/钉钉扫码 → 授权使用账号 ID 与手机号 → 完成后绑定,可用扫码登录
手机号注册 输入手机号 → 获取验证码 → 验证通过后勾选协议注册

3.2 实名认证

购买阿里云产品、提现余额需完成实名认证,分个人认证和企业认证。个人认证两种方式:

  • 支付宝授权认证:支付宝已完成实名认证可快速授权完成。登录控制台 → 账号中心 → 实名认证 → 选个人支付宝授权认证 → 勾选同意读取认证信息 → 登录支付宝验证
  • 扫脸认证:选个人扫脸认证 → 用手机阿里云 App 或手机淘宝 App 扫码 → 手机端完成实人扫脸认证 → 返回电脑端单击"我已完成认证"

3.3 开通 PAI

  1. 登录 PAI 控制台(控制台 → 账号中心 → 左侧菜单人工智能平台 PAI)
  2. 左上角选择需开通的地域,单击页面中间"开通引导"按钮
  3. 右侧订单详情页确认基本信息,配置关键参数:
    • 组合开通:建议同步开通 OSS(AI 资产存储介质,不使用不收费),其他云产品按需开通
    • 子账号角色:主账号下子账号多时建议取消勾选"将全部子账号赋予默认工作空间算法开发角色",后续按需授权
    • 授权:单击"去授权"完成相关授权,获取访问云资源权限
  4. 确认后单击"确认开通并创建默认工作空间"

3.4 领取免费试用资源

资源领取链接:https://free.aliyun.com/?product=1358,1395 ,领取 OSS 和 DSW 的使用资源即可。


四、PAI-DSW 环境搭建

4.1 PAI-DSW 简介

PAI-DSW 是 PAI 产品的云端机器学习开发 IDE,适用于不同水平的开发者。集成了开源 JupyterLab,以插件化形式深度定制开发,提供丰富计算资源,对接多种数据源;通过 EASCMD 可将训练模型进行模型部署服务。

产品特点

  • 一站式服务:从数据处理到模型部署全流程
  • 文件系统支持:支持多种文件系统挂载,方便管理数据资源
  • 插件化开发与部署:深度定制化开发,轻松将模型部署为服务

4.2 开发流程

PAI开发流程

4.3 创建 DSW 实例

成功登录阿里云后,在【产品类别】下选择【人工智能与机器学习】>【人工智能平台 PAI】,进入工作空间。在工作空间中创建 DSW 实例,关键参数配置(实例信息、资源配置、存储配置)后取默认即可。

快速开始:PAI 产品组件,集成国内外 AI 开源社区优质预训练模型,支持零代码实现从训练到部署再到推理。支持地域:华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)。


五、虚拟试衣实践

完整流程:创建 DSW 实例 → 安装 Diffusers → 配置 accelerate → 下载 SD-WebUI 开源库 → SD+LoRA 模型微调 → 模型部署 → 推理验证。

5.1 下载教程文件

在 DSW 的 Notebook 页签 Launcher 页面,单击 Tool 下的 DSW Gallery,搜索"AIGC Stable diffusion 文生图 Lora 模型微调实现虚拟上装"教程,单击"在 DSW 中打开",自动下载所需资源和教程文件 stable_diffusion_try_on.ipynb,按步骤依次运行命令即可。

5.2 安装 Diffusers

! pip install -U http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/diffusers-0.22.0.dev0-py3-none-any.whl

5.3 配置 accelerate

可直接下载默认配置文件;若需自定义,在 Terminal 执行 accelerate config 并按 DSW 实例详情选择配置:

! mkdir -p /root/.cache/huggingface/accelerate/
! wget -c http://pai-vision-data-sh.oss-cn-shanghai.aliyuncs.com/aigc-data/accelerate/default_config.yaml -O /root/.cache/huggingface/accelerate/default_config.yaml

5.4 下载 stable-diffusion-webui 开源库

为提升下载速度,OSS 上缓存了代码包(stable-diffusion-webui、stablediffusion、taming-transformers、k-diffusion、CodeFormer、blip),用 aria2 多线程下载:

import os
! apt update
! apt install -y aria2

def aria2(url, filename, d):
    !aria2c --console-log-level=error -c -x 16 -s 16 {url} -o {filename} -d {d}

url_prefix = {
    "cn-shanghai": "http://pai-vision-data-sh.oss-cn-shanghai-internal.aliyuncs.com",
    "cn-hangzhou": "http://pai-vision-data-hz2.oss-cn-hangzhou-internal.aliyuncs.com",
    "cn-shenzhen": "http://pai-vision-data-sz.oss-cn-shenzhen-internal.aliyuncs.com",
    "cn-beijing":  "http://pai-vision-data-bj.oss-cn-beijing-internal.aliyuncs.com",
    "ap-southeast-1": "http://pai-vision-data-ap-southeast.oss-ap-southeast-1-internal.aliyuncs.com"
}
dsw_region = os.environ.get("dsw_region")
prefix = url_prefix[dsw_region] if dsw_region in url_prefix else "http://pai-vision-data-sh.oss-cn-shanghai.aliyuncs.com"
webui_url = f"{prefix}/aigc-data/code/stable-diffusion-webui-v1.tar.gz"
aria2(webui_url, webui_url.split("/")[-1], "./")

下载完成后解压并配置:

! tar -xf stable-diffusion-webui-v1.tar.gz
! cd stable-diffusion-webui && wget -c http://pai-vision-data-sh.oss-cn-shanghai.aliyuncs.com/aigc-data/webui_config/config_tryon.json -O config.json

5.5 SD + LoRA 模型微调

(1)准备数据集及训练代码(提供训练代码和小示例数据,可参照格式准备自定义数据):

! wget -c http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/try_on/cloth_train_example.tar.gz && tar -xvf cloth_train_example.tar.gz
! wget -c http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/try_on/train_text_to_image_lora_v2.py

查看示例图片:

from PIL import Image
display(Image.open("cloth_train_example/train/20230407174450.jpg"))

训练示例图片

(2)下载预训练模型并转成 diffusers 格式:下载 safety_checker、clip-vit-large-patch14、chilloutmix 模型,再用转换脚本转为 diffusers 格式:

safety_checker_url = f"{prefix}/aigc-data/hug_model/models--CompVis--stable-diffusion-safety-checker.tar.gz"
aria2(safety_checker_url, safety_checker_url.split("/")[-1], "./")
! tar -xf models--CompVis--stable-diffusion-safety-checker.tar.gz -C /root/.cache/huggingface/hub/

clip_url = f"{prefix}/aigc-data/hug_model/models--openai--clip-vit-large-patch14.tar.gz"
aria2(clip_url, clip_url.split("/")[-1], "./")
! tar -xf models--openai--clip-vit-large-patch14.tar.gz -C /root/.cache/huggingface/hub/

model_url = f"{prefix}/aigc-data/sd_models/chilloutmix_NiPrunedFp32Fix.safetensors"
aria2(model_url, model_url.split("/")[-1], "stable-diffusion-webui/models/Stable-diffusion/")

! wget -c http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/convert_original_stable_diffusion_to_diffusers.py
! python convert_original_stable_diffusion_to_diffusers.py \
  --checkpoint_path=stable-diffusion-webui/models/Stable-diffusion/chilloutmix_NiPrunedFp32Fix.safetensors \
  --dump_path=chilloutmix-ni --from_safetensors

(3)模型训练(关键参数:640×768、batch_size=1、200 epochs、lr=1e-4、rank=128):

! export MODEL_NAME="chilloutmix-ni" && \
export DATASET_NAME="cloth_train_example" && \
accelerate launch --mixed_precision="fp16" train_text_to_image_lora_v2.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --train_data_dir=$DATASET_NAME \
  --caption_column="text" \
  --width=640 --height=768 --random_flip \
  --train_batch_size=1 \
  --num_train_epochs=200 --checkpointing_steps=5000 \
  --learning_rate=1e-04 --lr_scheduler="constant" --lr_warmup_steps=0 \
  --seed=42 \
  --output_dir="cloth-model-lora" \
  --validation_prompt="cloth1" --validation_epochs=100 --rank=128

5.6 模型部署

(1)将 LoRA 模型转成 WebUI 支持格式并拷贝到 WebUI 目录

! wget -c http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/convert-to-safetensors_v2.py
! python convert-to-safetensors_v2.py --file='cloth-model-lora/pytorch_lora_weights.safetensors'
! mkdir -p stable-diffusion-webui/models/Lora
! cp cloth-model-lora/pytorch_lora_weights_converted.safetensors stable-diffusion-webui/models/Lora/cloth_lora_weights.safetensors

(2)下载额外模型文件(embedding、人物 LoRA、bert,OSS 加速缓存):

embedding_url = f"{prefix}/aigc-data/embedding/ng_deepnegative_v1_75t.pt"
aria2(embedding_url, embedding_url.split("/")[-1], "stable-diffusion-webui/embeddings/")

model_lora_url = f"{prefix}/aigc-data/lora/koreanDollLikeness_v10.safetensors"
aria2(model_lora_url, model_lora_url.split("/")[-1], "stable-diffusion-webui/models/Lora/")

bert_url = f"{prefix}/aigc-data/hug_model/models--bert-base-uncased.tar.gz"
aria2(bert_url, bert_url.split("/")[-1], "~/.cache/huggingface/hub")
! cd ~/.cache/huggingface/hub && tar -xvf models--bert-base-uncased.tar.gz

(3)在 DSW 中启动 WebUI

! cd stable-diffusion-webui && python launch.py --no-half-vae --xformers

由于 GitHub 访问不稳定,若运行后未出现正常返回且提示网络相关原因(如 Network is unreachable、unable to access ‘https://github.com/...' ),可重新运行命令。

5.7 推理验证

在 WebUI 页签配置以下参数:

Prompt(正向提示词)

cloth1,<lora:koreanDollLikeness_v10:0.4>, (extremely detailed CG unity 8k wallpaper),(RAW photo, best quality), (realistic, photo-realistic:1.2), a close up portrait photo, 1girl, shopping mall rooftop cafe, outdoor, smile, (high detailed skin:1.4), puffy eyes, gorgeous hair, air bangs, brown black hair, soft lighting, high quality,<lora:cloth_lora_weights:1>

Negative prompt(负向提示词)

ng_deepnegative_v1_75t,paintings, sketches, (worst quality:2),(low quality:2), (normal quality:2), lowres, ((monochrome)), (grayscale:1.2), skin spots, acnes, skin blemishes, age spot, glans,extra fingers,fewer fingers,(watermark:1.2),(letters:1.2),(nsfw:1.2),teeth

其他参数

参数 取值
采样方法 Sampler Euler a
采样迭代步数 Steps 50
宽度和高度 640,768
随机种子 seed 1400244389
提示词相关性 CFG Scale 7
面部修复 选中 codeformer

点击生成,得到虚拟试衣效果:

虚拟试衣生成结果


总结

本篇演示了基于阿里云 PAI 平台的虚拟试衣全流程

  1. 背景与原理:虚拟试衣结合计算机图形学和 AI,解决在线购物缺乏试穿的问题,核心方法是用 LoRA 微调 + SAM/ControlNet 人体重绘
  2. PAI 平台:阿里云人工智能平台,三层架构(基础设施/智算集群/MaaS),提供 DSW 交互式建模、DLC 分布式训练、EAS 模型服务全生命周期能力
  3. 环境准备:阿里云注册 → 实名认证 → 开通 PAI → 创建 DSW 实例
  4. 模型微调:在 DSW 中安装 Diffusers、配置 accelerate、下载 SD-WebUI,用 LoRA(rank=128、200 epochs)微调 chilloutmix 模型
  5. 部署推理:LoRA 权重转 WebUI 格式,启动 WebUI,配置正负向提示词和采样参数,生成虚拟试衣效果