★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>

【队名】:易八鸽铁匠铺

【模型简介】:剑,出自易八鸽铁匠铺。

【模型链接】:https://huggingface.co/zhl1bug/sword_1bug

【AI Studio 项目】:https://aistudio.baidu.com/aistudio/projectdetail/5906465

【AI Studio 应用中心】:https://aistudio.baidu.com/aistudio/projectdetail/5906465

前言

易八鸽铁匠铺计划发布冷兵器刀、枪、剑、镗、棍、叉、耙、鞭、锏、锤、斧、钩、镰、扒、拐、弓箭、藤牌的模型

当前项目以剑为主

单拿剑来说,可以做的细节就很多很多(下3图来自互联网,如有侵权,请联系作者)



一、创意简介&效果展示

效果展示需注明prompt - 图片。

prompt: sword_1bug

二、完整的训练代码

1.1安装依赖

!pip uninstall paddlenlp -y
!pip uninstall ppdiffusers -y
# 请运行这里安装所需要的依赖环境!!
!pip install "paddlenlp>=2.5.2" "ppdiffusers>=0.11.1" safetensors --user

1.2 Hugging Face Space 登录

# 不需要上传模型可以忽略此操作
!git config --global credential.helper store
from huggingface_hub import login
login()

2. 如何训练模型,并上传到HF

2.1 上传图片

  • 首先,我们需要将所需训练的图片上传到aistudio上的文件夹, 我们可以通过👉拖拽上传 的方式,将我们所需的图片上传至指定的文件夹。
  • 在这里,我们已经在👉sword文件夹准备好了如下所示的10张图片。

轩辕、湛泸、赤霄、太阿、干将、莫邪、鱼肠、纯钧、承影、巨阙 【十大名剑】(龙泉暂无图片,替换了巨阙)

2.2 训练参数调整

在训练过程中,我们可以尝试修改训练的默认参数,下面将从三个方面介绍部分参数。

👉主要修改的参数:

  • pretrained_model_name_or_path :想要训练的模型名称或者本地路径的模型,例如:"runwayml/stable-diffusion-v1-5",更多模型可参考 PaddleNLP 文档
  • instance_data_dir:训练图片所在的文件夹目录,我们可以将图片上传至aistudio项目。
  • instance_prompt:训练所使用的 Prompt 文本。
  • resolution:训练时图像的分辨率,建议为 512
  • output_dir:训练过程中,模型保存的目录。
  • checkpointing_steps:每隔多少步保存模型,默认为100步。
  • learning_rate:训练使用的学习率,当我使用 LoRA 训练模型的时候,我们需要使用更大的学习率,因此我们这里使用 1e-4 而不是 2e-6
  • max_train_steps:最大训练的步数,默认为500步。

👉可选修改的参数:

  • train_batch_size:训练时候使用的 batch_size,当我们的GPU显存比较大的时候可以加大这个值,默认值为4
  • gradient_accumulation_steps:梯度累积的步数,当我们GPU显存比较小的时候还想模拟大的训练批次,我们可以适当增加梯度累积的步数,默认值为1
  • seed:随机种子,设置后可以复现训练结果。
  • lora_rankLoRA 层的 rank 值,默认值为4,最终我们会得到 3.5MB 的模型,我们可以适当修改这个值,如:32、64、128、256 等。
  • lr_scheduler:学习率衰减策略,可以是"linear", "constant", "cosine"等。
  • lr_warmup_steps:学习率衰减前,warmup 到最大学习率所需要的步数。

👉训练过程中评估使用的参数:

  • num_validation_images:训练的过程中,我们希望返回多少张图片,默认值为4张图片。
  • validation_prompt:训练的过程中我们会评估训练的怎么样,因此我们需要设置评估使用的 prompt 文本。
  • validation_steps:每隔多少个 steps 评估模型,我们可以查看训练的进度条,知道当前到了第几个 steps

🔥Tips:
训练过程中会每隔 validation_steps 将生成的图片保存到 {你指定的输出路径}/validation_images/{步数}.jpg

👉权重上传的参数:

  • push_to_hub: 是否将模型上传到 huggingface hub,默认值为 False
  • hub_token: 上传到 huggingface hub 所需要使用的 token,如果我们已经登录了,那么我们就无需填写。
  • hub_model_id: 上传到 huggingface hub 的模型库名称, 如果为 None 的话表示我们将使用 output_dir 的名称作为模型库名称。

在下面的例子中,由于我们前面已经登录了,因此我们可以开启 push_to_hub 按钮,将最终训练好的模型同步上传到 huggingface.co

当我们开启push_to_hub后,等待程序运行完毕后会自动将权重上传到这个路径 https://huggingface.co/{你的用户名}/{你指定的输出路径} ,例如: https://huggingface.co/junnyu/lora_outputs

%cd /home/aistudio
# 建议使用32G显存,16G容易报错,提示显存不够

!python train_dreambooth_lora.py \
  --pretrained_model_name_or_path="stabilityai/stable-diffusion-2-1"  \
  --instance_data_dir="./sword" \
  --output_dir="sword_out" \
  --instance_prompt="sword_1bug" \
  --resolution=512 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=1 \
  --checkpointing_steps=100 \
  --learning_rate=1e-4 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --max_train_steps=1000 \
  --seed=0 \
  --lora_rank=4 \
  --push_to_hub=False \
  --validation_prompt="sword_1bug,sword,simple background,upward" \
  --validation_steps=100 \
  --num_validation_images=2

2.4 挑选满意的权重上传至Huggingface

参数解释:

  • upload_dir:我们需要上传的文件夹目录。
  • repo_name:我们需要上传的repo名称,最终我们会上传到 https://huggingface.co/{你的用户名}/{你指定的repo名称}, 例如: https://huggingface.co/junnyu/lora_sks_dogs.
  • pretrained_model_name_or_path:训练该模型所使用的基础模型。
  • prompt:搭配该权重需要使用的Prompt文本。
from utils import upload_lora_folder
# 使用前请确保已经登录了huggingface hub!
upload_dir                    = "sword_out"                      # 我们需要上传的文件夹目录
repo_name                     = "sword_1bug"                     # 我们需要上传的repo名称
pretrained_model_name_or_path = "stabilityai/stable-diffusion-2-1"    # 训练该模型所使用的基础模型
prompt                        = "sword_1bug"    # 搭配该权重需要使用的Prompt文本

upload_lora_folder(
    upload_dir=upload_dir,
    repo_name=repo_name,
    pretrained_model_name_or_path=pretrained_model_name_or_path,
    prompt=prompt, 
)

3.1 预测

from ppdiffusers import StableDiffusionPipeline
import paddle

model_path = "sword_out"
pipe = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", paddle_dtype=paddle.float32)
# 注意:如果我们想从 HF Hub 加载权重,那么我们需要设置 from_hf_hub=True
pipe.unet.load_attn_procs(model_path, from_hf_hub=False)

prompt = "sword_1bug,sword,simple background,upward"
image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5).images[0]
image.save("sword.png")

3.2 结果展示

from PIL import Image
import matplotlib.pyplot as plt
img1 = Image.open('/home/aistudio/sword.png')
plt.imshow(img1)
plt.show()

3.3 训练结果展示

600

700

800

900

1000

4.0 总结与未来展望

  • 1.生成不够稳定,将持续训练模型。
  • 2.纹路,花纹的可选择性,将在未来增加关键词
  • 3.风格也将考虑进去,比如描述符合场景的词,生成那个类型风格的剑
  • 4.是个好的开始,将会有越来越多的冷兵器加入【易八鸽铁匠铺】系列,大家可以多多关注。

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐