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

建议

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

易八鸽铁匠铺

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

名称拼音文件命名英文数据集来源数据集情况
daodaoTang Dao互联网
qiangqiangspear
jian4jian4sword互联网
jijihalberd
fufuaxe
yueyueYue
gougouhook
chachafork
bianbianwhip
jian3jian3Mace
chuichuihammerby:Pavel Kutejnikov
gegedagger-axe
tangtangTang
gungunstick
shuoshuoGroup name
bangbangstick
maomaospear
paparake

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 >>>

更多推荐