★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
易八鸽铁匠铺计划 收录计划收录18般武器,刀、枪、剑、戟、斧、钺、钩、叉、鞭、锏、锤、戈、镋、棍、槊、棒、矛、耙等

建议

32g显存起步,训练完使用释放显存命令,避免溢出。

易八鸽铁匠铺

*如有不对,请在评论区指出,谢谢

名称 拼音 文件命名 英文 数据集来源 数据集情况
dao dao Tang Dao 互联网
qiang qiang spear
jian4 jian4 sword 互联网
ji ji halberd
fu fu axe
yue yue Yue
gou gou hook
cha cha fork
bian bian whip
jian3 jian3 Mace
chui chui hammer by:Pavel Kutejnikov
ge ge dagger-axe
tang tang Tang
gun gun stick
shuo shuo Group name
bang bang stick
mao mao spear
pa pa rake

1.安装依赖

!pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple

!pip install -r requirements.txt

2.选择一个配置运行

# 刀

# 修改拼音
%env name = dao  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/dao 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/dao
%env OUTPUT_DIR_LORA=./1bug_model_lora/dao
# 修改对应英文
%env name_en = Tang Dao,knife
# 枪

# 修改拼音
%env name = qiang  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/qiang 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/qiang
%env OUTPUT_DIR_LORA=./1bug_model_lora/qiang
# 修改对应英文
%env name_en = spear
# 剑

# 修改拼音
%env name = jian4  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/jian4 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/jian4
%env OUTPUT_DIR_LORA=./1bug_model_lora/jian4
# 修改对应英文
%env name_en = sword
# 戟

# 修改拼音
%env name = ji  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/ji 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/ji
%env OUTPUT_DIR_LORA=./1bug_model_lora/ji
# 修改对应英文
%env name_en = spear
# 斧

# 修改拼音
%env name = fu
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/fu
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/fu
%env OUTPUT_DIR_LORA=./1bug_model_lora/fu
# 修改对应英文
%env name_en = axe
# 钺

# 修改拼音
%env name = yue
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/yue
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/yue
%env OUTPUT_DIR_LORA=./1bug_model_lora/yue
# 修改对应英文
%env name_en = Yue
# 钩

# 修改拼音
%env name = gou
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/gou
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/gou
%env OUTPUT_DIR_LORA=./1bug_model_lora/gou
# 修改对应英文
%env name_en = hook
# 叉

# 修改拼音
%env name = cha
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/cha
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/cha
%env OUTPUT_DIR_LORA=./1bug_model_lora/cha
# 修改对应英文
%env name_en = fork
# 鞭

# 修改拼音
%env name = bian
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/bian
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/bian
%env OUTPUT_DIR_LORA=./1bug_model_lora/bian
# 修改对应英文
%env name_en = whip
# 锏

# 修改拼音
%env name = jian3
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/jian3
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/jian3
%env OUTPUT_DIR_LORA=./1bug_model_lora/jian3
# 修改对应英文
%env name_en = Mace
# 戈

# 修改拼音
%env name = ge
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/ge
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/ge
%env OUTPUT_DIR_LORA=./1bug_model_lora/ge
# 修改对应英文
%env name_en = dagger-axe
# 镋

# 修改拼音
%env name = tang
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/tang
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/tang
%env OUTPUT_DIR_LORA=./1bug_model_lora/tang
# 修改对应英文
%env name_en = Tang
# 槊

# 修改拼音
%env name = shuo
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/shuo
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/shuo
%env OUTPUT_DIR_LORA=./1bug_model_lora/shuo
# 修改对应英文
%env name_en = Group name
# 棒

# 修改拼音
%env name = bang  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/bang 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/bang
%env OUTPUT_DIR_LORA=./1bug_model_lora/bang
# 修改对应英文
%env name_en = 	stick
# 锤

# 修改拼音
%env name = chui  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/chui 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/chui
%env OUTPUT_DIR_LORA=./1bug_model_lora/chui
# 修改对应英文
%env name_en = hammer
# 棍

# 修改拼音
%env name = gun  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/gun 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/gun
%env OUTPUT_DIR_LORA=./1bug_model_lora/gun
# 修改对应英文
%env name_en = stick
# 矛

# 修改拼音
%env name = mao  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/mao 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/mao
%env OUTPUT_DIR_LORA=./1bug_model_lora/mao
# 修改对应英文
%env name_en = spear
# 耙

# 修改拼音
%env name = pa  
%env MODEL_NAME= runwayml/stable-diffusion-v1-5
# 修改数据集
%env INSTANCE_DIR=./1bug_data/pa 
# 修改输出模型路径
%env OUTPUT_DIR=./1bug_model/pa
%env OUTPUT_DIR_LORA=./1bug_model_lora/pa
# 修改对应英文
%env name_en = rake

3.创建模型文件夹

import os
import shutil

if not os.path.exists('./1bug_model/'):
       os.mkdir('./1bug_model/')
if not os.path.exists('./1bug_model_lora/'):
       os.mkdir('./1bug_model_lora/')


OUTPUT_DIR = os.getenv('OUTPUT_DIR')
if not os.path.exists(OUTPUT_DIR):
       os.mkdir(OUTPUT_DIR)
       print('创建',OUTPUT_DIR)

OUTPUT_DIR_LORA = os.getenv('OUTPUT_DIR_LORA')
if not os.path.exists(OUTPUT_DIR_LORA):
       os.mkdir(OUTPUT_DIR_LORA)
       print('创建',OUTPUT_DIR_LORA)

4.1.dreambooth单机单卡训练

!python -u train_dreambooth.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --instance_data_dir=$INSTANCE_DIR \
  --output_dir=$OUTPUT_DIR \
  --instance_prompt=$name \
  --resolution=512 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=1 \
  --learning_rate=5e-6 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --max_train_steps=400

4.2.dreambooth预测生成图片

from ppdiffusers import StableDiffusionPipeline
import paddle
import random
import os
# 我们所需加载的模型地址,这里我们输入了训练时候使用的 output_dir 地址
model_path = os.getenv('OUTPUT_DIR')
pipe = StableDiffusionPipeline.from_pretrained(model_path)
name = os.getenv('name')
name_en = os.getenv('name_en')
prompt = name
# 指定seed
seed = random.randint(0, 999999)
generator = paddle.Generator().manual_seed(seed)

# guidance_scale
guidance_scale = 3.5
prompt = "<"+name+">,simple background,up,upward,"+name_en
print('seed:',seed)
print('generator:',generator)
print('prompt:',prompt)
negative_prompt = ""
# negative_prompt = "(worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, skin spots, acnes, skin blemishes, age spot, glans, (watermark:2),"
image = pipe(prompt, negative_prompt=negative_prompt, num_inference_steps=50, height=768, width=512, guidance_scale=guidance_scale, generator=generator).images[0]

# 保存图片,我们可以查看 yoda-pokemon.png 图片。
image.save(name+".png")

5.1.lora单机训练

!python train_dreambooth_lora.py \
  --pretrained_model_name_or_path=$MODEL_NAME  \
  --instance_data_dir=$INSTANCE_DIR \
  --output_dir=$OUTPUT_DIR_LORA \
  --instance_prompt=$name \
  --resolution=512 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=1 \
  --checkpointing_steps=100 \
  --learning_rate=1e-4 \
  --report_to="visualdl" \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --max_train_steps=500 \
  --validation_prompt=$name \
  --validation_epochs=50 \
  --lora_rank=4 \
  --seed=0

5.2.lora预测

from ppdiffusers import DiffusionPipeline, DPMSolverMultistepScheduler
import paddle

import random
import os
# 我们所需加载的模型地址,这里我们输入了训练时候使用的 output_dir 地址
model_path = os.getenv('OUTPUT_DIR_LORA')
model_name = os.getenv('MODEL_NAME')
name = os.getenv('name')
name_en = os.getenv('name_en')
prompt = name
# 指定seed
seed = random.randint(0, 999999)
generator = paddle.Generator().manual_seed(seed)

# guidance_scale
guidance_scale = 3.5
prompt = "<"+name+">,simple background,up,upward,"+name_en
print('seed:',seed)
print('generator:',generator)
print('prompt:',prompt)
negative_prompt = ""
# negative_prompt = "(worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, skin spots, acnes, skin blemishes, age spot, glans, (watermark:2),"

print(model_name)
pipe = DiffusionPipeline.from_pretrained(model_name)
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)

pipe.unet.load_attn_procs("./1bug_model_lora/dao/paddle_lora_weights.pdparams", from_hf_hub=False)


image = pipe(prompt, negative_prompt=negative_prompt, num_inference_steps=10, height=768, width=512, guidance_scale=guidance_scale, generator=generator).images[0]

# 保存图片,我们可以查看 yoda-pokemon.png 图片。
image.save(name+".png")
!echo $OUTPUT_DIR_LORA
# 移动模型
!eval "cp -r $OUTPUT_DIR_LORA/paddle_lora_weights.pdparams ./gradio/$name.pdparams"
# 释放显存
paddle.device.cuda.empty_cache()

总结和未来展望

  • 1.需要持续优化
  • 2.数据集素材很重要
  • 3.模型关键词也很重要

此文章为搬运
原项目链接

Logo

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

更多推荐