Lora模型微调实现虚拟上装实验

更新时间:
复制为 MD 格式

本文将介绍如何基于Diffusers开源库实现虚拟上装的应用。

场景简介

  • AIGC 是指通过人工智能技术自动生成内容的生产方式,国内外多家公司进入技术竞赛白热化阶段,Microsoft,Google,Meta等公司深度投入,已经成为继互联网时代的下一个产业时代风口。其中,文图生成(Text-to-image Generation)任务是流行的跨模态生成任务,旨在生成与给定文本对应的图像。典型的文图模型例如OpenAI开发的DALL-EDALL-E2。近期,业界也训练出了更大、更新的文图生成模型,例如Google提出的PartiImagen,基于扩散模型的Stable Diffusion等。基于Stable Diffusion形成了庞大的开源社区,并衍生出了许多有趣的应用。

  • 本文将介绍如何基于Diffusers开源库实现虚拟上装的应用。

背景知识

  • PAI

    人工智能平台PAI是阿里云专为开发者打造的一站式机器学习的平台,其主要由可视化建模(Designer)、交互式建模(DSW)、分布式训练(DLC)、模型在线服务(EAS)等核心功能模块组成,为您提供数据标注、模型开发、模型训练、模型部署的AI全链路研发服务,具有支持多种开源框架、多项AI优化能力、灵活易用的优势。

  • DSW(Data Science Workshop)

    DSW是为算法开发者量身打造的一站式AI开发平台,集成了JupyterLab、WebIDE、Terminal多种云端开发环境,提供代码编写、调试及运行的沉浸式体验。提供丰富的异构计算资源,预置多种开源框架的镜像,实现开箱即用的高效开发模式。

  • Stable Diffusion

    Stable Diffusion是强大的图像生成模型,能够生成高质量、高分辨率的图像,并具有良好的稳定性和可控性。

  • Stable Diffusion WebUI

    Stable Diffusion WebUI开源项目在模型的基础上进行封装,基于Gradio开发了可视化图形界面,为用户提供了丰富的生图工具。

  • AIGC(Artificial Intelligence Generative Content)

    AIGC指利用人工智能技术自动生成内容的一种新型技术。这项技术主要基于机器学习和自然语言处理,能够自动化地生成包括文本、图像、音频在内的多种类型的内容。

实验室资源方式简介

进入实操前,请确保阿里云账号满足以下条件:

  • 个人账号资源

    • 使用您个人的云资源进行操作,资源归属于个人。

    • 平台仅提供手册参考,不会对资源做任何操作。

  • 确保已完成云工开物300元代金券领取。

  • 已通过实名认证且账户余额≥0元。

本场景主要涉及以下云产品和服务:PAI、DSW

本实验,预计产生资源消耗:14.553元/小时,本次实验产生的费用将优先使用优惠券进行抵扣。

如果您调整了资源规格、使用时长,或执行了本方案以外的操作,可能导致费用发生变化,请以控制台显示的实际价格和最终账单为准。

领取专属权益及开通授权

  1. 第一步:在开始实验之前,请先点击右侧屏幕的“进入实操”再进行后续操作。

    image

  2. 第二步:领取300元高校专属权益优惠券(若已领取请跳过)。

    image

    重要

    实验产生的费用优先使用优惠券,优惠券使用完毕后需您自行承担。

    学生认证

  3. 第三步:进入阿里云官网,搜索“试用”,点击“立即试用”

    image

    可试用人群选“个人认证”,选择“交互式建模 PAI-DSW”,点击“立即试用”

    image

    点击“立即试用”

    image

    提交成功后,点击“前往控制台”

    image

    可参考文档完成创建DSW角色及授权等操作

    image

  4. 第四步:领取学生专属300元优惠券后,点击访问人工智能平台 PAI——点击“立即开通”,完成PAI平台开通与授权。

    image

    后期若想再次进入PAI平台可通过“控制台”进入。

    image

    跳转至控制台后,点击人工智能平台PAI,进入PAI平台页面。

    image

实验步骤

一、创建实例

  • PAI平台左侧选项卡中找到交互式建模(DSW),点击新建实例。

    image

  • 配置实例。

    资源规格:ecs.gn6v-c8g1.2xlarge  (8 vCPU, 32 GiB, NVIDIA V100 * 1)

    镜像:stable-diffusion-webui-develop:1.0-pytorch2.0-gpu-py310-cu117-ubuntu22.04

    配置完毕点击确定。

    image

    重要

    本次实验产生的费用将优先使用300元优惠券进行抵扣。

  • 当资源准备完毕后,点击“打开”。

    image

二、进入Notebook调试页面

  1. 在左侧文件目录空白处,单击鼠标右键,新建一个Notebook。使用Python3,单击Select。

    image

    image

  2. Diffusers安装。

    • 安装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

      image

    • 配置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
      

      image

    • 下载stable-diffusion-webui开源库

      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], "./")
      

      image

      ! 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
      

      image

  3. Stable Diffusion+LORA模型fintune

    • 准备数据集及训练代码

      我们提供了训练代码及一个小的示例数据,可以参照该格式准备自定义数据.

      ! 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
      

      image

      此过程将会下载各种文件,在页面左侧文件目录处可以查看到。

      image

      在此目录中存放的是训练模型用的图片,以及标签文件。

      Metadata.jsonl中存放的是标签。

      image

      说明

      拓展:如果在这个文件目录下添加新的图片文件,并在metadata.jsonl中添加对应的标签内容。在之后的步骤:模型训练以及问生图中,将“cloth1”更换成新创建的标签,便可以实现更换衣服。

    • 查看示例服装

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

      image

    • 下载预训练模型并转化成diffusers格式

      为了加速下载我们在oss做了缓存,用户可以运行如下命令直接下载

      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
      

      image

      重要

      这段代码运行时间较长,大约在10分钟左右,请耐心等待。

    • 模型训练

      设置num_train_epochs200,进行lora模型的训练

      ! 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
      

      image

      重要

      这段代码运行时间较长,大约在15分钟左右,请耐心等待。

    • 准备webui所需模型文件

      • lora模型拷贝到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
        
        

        image

      • 准备额外模型文件

        为了加速下载我们在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
        
        

        image

  4. DSW中启动WebUI。

    启动webui服务,左键点击生成的URL:http://127.0.0.1:7860 跳转到webui前端。若下载库失败,请重新尝试。

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

    image

    通过下方设置可从示例衣服生成如下图片。

    image

    • 正向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>

    • 负向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

    • 采样方法: Eular a

    • 采样步数: 50

    • 宽高: 640,768

    • 随机种子: 1400244389

    • CFG scale 7

    image

清理资源

请同学们一定要按照步骤释放实验资源及时关闭服务,避免资源浪费!

如果需要继续使用,请随时关注账号扣费情况,避免模型会因欠费而被自动停止。

  • 前往PAI控制台

  • PAI平台页面——模型开发与训练——交互式建模DSW,找到目标服务。先停止正在运行的服务。

    image

  • 之后点击删除。

    image

关闭实验

  • 在完成实验后,点击 结束实操

    image

  • 点击 取消 回到实验页面,点击 确定 跳转实验评分

    image

  • 请为本次实验评分,并给出您的建议,点击 确认,结束本次实验

    image