从零入门AI生图原理&实践是Datawhale 2024年AI夏令营第四期“AIGC”方向的学习活动,基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展的实践学习。
主要是通过对模型的微调,以及对prompt的调整,可以根据要求生成不同的图片。
下面是跑一遍baseline的过程
跑通baseline
第一步:搭建代码环境
登录阿里云账号(首次须先注册阿里云账号,并完成实名认证)领取算力时,,领取成功后关闭该页面,然后完成魔搭社区授权
链接:https://www.modelscope.cn/my/mynotebook/authorization
第二步:创建PAI实例
链接:https://www.modelscope.cn/my/mynotebook/authorization
1.点击创建实例
2.随意起一个名字,注意GPU选择第二个,认准“支持资源包抵扣”,随后下滑点击下一步
3.点击创建实例即可
4.点击打开,就可以进入实例界面
第三步:git baseline文件
1.点击进入终端Terminal
2.复制命令,回车运行
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors.git
第四步:运行代码
1.点击进入kolors文件夹,打开后缀为.ipyhb的baseline文件
2.执行第一个代码块,完成Data-Juicer、DiffSynth-Studio的安装
3.安装完成后重启kernel,避免爆显影响baseline的运行
4.重启后顺序运行全部代码,即可得到图片
调整prompt,设置想要生成的图片风格,依次修改八张图片的描述内容,生成你想要生成的内容
优质的提示词、提示词的排序、书写策略、模型介入等对最后出图的效果都有影响。
prompt提示词一般包括:主体、表情、服装、场景、环境、灯光、画质、渲染器等
越靠前的Tag权重越高,可以适当地使用括号法则、数字法则、混合
例如:
我的prompt调整为:
torch.manual_seed(0)
image = pipe(
prompt="二次元,一个黑色长发小女孩,在茶几旁坐着,双手端着一杯茶,很悠闲,全身,绿色连衣裙,裙上有竹叶的纹路",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")
torch.manual_seed(1)
image = pipe(
prompt="二次元,中国风,落地窗户外有一片竹林,林中有一只梅花鹿,一个黑色长发小女孩穿着裙上有竹叶的纹路的绿色连衣裙坐在茶几旁看向落地窗外,窗外的梅花鹿也正看向窗内",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("2.jpg")
torch.manual_seed(2)
image = pipe(
prompt="二次元,中国风,一个黑色长发小女孩穿着裙上有竹叶的纹路的绿色连衣裙坐在茶几旁,温柔的掩嘴笑",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,色情擦边",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("3.jpg")
torch.manual_seed(5)
image = pipe(
prompt="二次元,中国风,一个黑色长发小女孩穿着裙上有竹叶的纹路的绿色连衣裙起身走到落地窗旁边",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("4.jpg")
torch.manual_seed(0)
image = pipe(
prompt="二次元,中国风,一个黑色长发小女孩穿着裙上有竹叶的纹路的绿色连衣裙蹲在落地窗旁边,隔着玻璃温柔的看着凑近的梅花鹿",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("5.jpg")
torch.manual_seed(1)
image = pipe(
prompt="二次元,中国风,一个黑色长发小女孩穿着裙上有竹叶的纹路的绿色连衣裙回到茶几旁,拿起一袋鹿饼干",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("6.jpg")
torch.manual_seed(7)
image = pipe(
prompt="二次元,中国风,一个黑色长发小女孩穿着裙上有竹叶的纹路的绿色连衣裙,拿着鹿饼干,打开落地窗旁边的门走到竹林中",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("7.jpg")
torch.manual_seed(0)
image = pipe(
prompt="二次元,中国风,一个黑色长发小女孩穿着裙上有竹叶的纹路的绿色连衣裙,蹲下给围过来的梅花鹿喂鹿饼干",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("8.jpg")
我最后生成的图为
可以看到,图片内容与prompt中描述的略有差距,这就需要后面调整描述的权重,或者是对模型的参数进行微调,不过需要注意的是,越精细的生成所需的时间就越长。
保存
那么如何保存我们调试后的程序以及示例图呢?
首先新创建一个terminal,战帖命令,回车执行
mkdir /mnt/workspace/kolors/output & cd
cp /mnt/workspace/kolors/models/lightning_logs/version_0/checkpoints/epoch\=0-step\=500.ckpt /mnt/workspace/kolors/output/
cp /mnt/workspace/kolors/1.jpg /mnt/workspace/kolors/output/
随后,在执行完代码后,将模型文件以及示例图下载到本地
至此就完整跑通了baseline,记得及时关闭正在运行的实例,否则会一直消耗算力时。
常见出图参数说明:
batch size:也就是并行数量,增加bs需要同步增加学习率对应 倍率
enablebucket :开启bucket来支持不同长宽比的训练图片
resolution :训练时图片的分辨率
flip_aug: 水平翻转数据增强,要求训练目标对左右方向不敏感
random crop:随机裁剪数据增强
color aug:颜色数据增强,要求训练目标对颜色不敏感
shuffle caption: 打乱文本描述,保证最前面的几个 tag 不被打乱,默认为1
keep tokens:学习次数,每张图片在一个epoch内重复多少次