当前位置:AIGC资讯 > AIGC > 正文

【Datawhale X 魔搭 AI夏令营第四期-AIGC方向】 Task1笔记:跑通baseline

前言

Datawhale的官方速通文档:https://linklearner.com/activity/14/10/24

本篇文章基于官方文档内容进行归纳总结。

跑通代码

Step0:开通阿里云PAI-DSW试用

阿里云PAI-DSW(Data Science Workshop)是一个云端的开发工具平台,提供所需的一切工具和资源来创建和训练AI模型,不用担心你自己的电脑性能是否足够强大。所以我们第一步需要进入阿里云PAI-DSW官网来开通领取5000算力时,为接下来环境的搭建等后续工作做准备。

链接:阿里云免费试用 - 阿里云

第一次登录的话可以使用支付宝登录,然后进行个人身份验证后再领取试用。

Step1:报名赛事

 赛事链接:https://tianchi.aliyun.com/competition/entrance/532254

使用支付宝登录并实名认证,点击报名参赛,同意协议点击报名即可,记得组建或者加入队伍。

Step2:在魔搭社区创建PAI实例

魔搭社区类似于阿里云PAI-DSW这台性能强大的主机的操作系统。你可以在魔搭社区中创建和管理你的项目,进行模型训练等。

链接:https://www.modelscope.cn/my/mynotebook/authorization

点击链接进入页面,按照上图,依次点击“授权ModelScope”→“开通并授权PAI”→“创建实例”,中间步骤根据提示走就行

在点击创建实例后的页面,实例随便起个名字,资源规格选第二个,之后就点击下一步、点击创建实例,启动完成后打开实例即可。

如果先前阿里云PAI-DSW试用没有领取成功则先用可使用魔搭的免费Notebook实例(比如我)

Step3:运行代码

1. 下载baseline文件(大约需要2分钟)

打开终端,粘贴以下代码,回车运行

git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors.git

2. 双击右侧kolors进入文件夹,双击打开baseline文件

3. 安装环境,然后重启kernel

安装 Data-Juicer 和 DiffSynth-Studio
Data-Juicer:数据处理和转换工具,旨在简化数据的提取、转换和加载过程
DiffSynth-Studio:高效微调训练大模型工具

4. 调整prompt,设置目标图片风格,依次修改8张图片的描述(可选)

正向描述词:你想要生成的图片应该包含的内容
反向提示词:你不希望生成的图片的内容

这里我尝试复刻魔女的夜宴宁宁线的剧情,修改描述为:

torch.manual_seed(0)
image = pipe(
    prompt="杰作,高精细,美丽细致的眼睛,细腻的发质,二次元,一个白色长发有呆毛的女孩,一个黑色凌乱头发的男孩,在社团活动室,男孩在一边坐着面无表情地趴在桌子上,女孩坐着和另一个路人女孩讲话,两人穿着蓝色高中校服,桌子上放着一个单单发白光的小瓶子,远景,不看着镜头,",
    negative_prompt="丑陋,变形,嘈杂,低对比度,nsfw,owres,解剖不好,手不好,文本,错误,手指缺失,多余的数字,更少的数字,裁剪,质量最差,低质量,正常质量,jpeg伪影,签名,水印,用户名,模糊,手指缺失、手不好、手臂缺失、长颈,驼背",
    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="杰作,高精细,美丽细致的眼睛,细腻的发质,二次元,不看着镜头,45°侧面,全身,一个白色长发有呆毛的女孩,一个黑色凌乱头发的男孩,两人穿着蓝色高中校服,两人坐在公园长椅上,闭眼微笑,头靠在一起",
    negative_prompt="丑陋,变形,嘈杂,低对比度,nsfw,owres,解剖不好,手不好,文本,错误,手指缺失,多余的数字,更少的数字,裁剪,质量最差,低质量,正常质量,jpeg伪影,签名,水印,用户名,模糊,手指缺失、手不好、手臂缺失、长颈,驼背",
    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="丑陋,变形,嘈杂,低对比度,nsfw,owres,解剖不好,手不好,文本,错误,手指缺失,多余的数字,更少的数字,裁剪,质量最差,低质量,正常质量,jpeg伪影,签名,水印,用户名,模糊,手指缺失、手不好、手臂缺失、长颈,驼背",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("5.jpg")

torch.manual_seed(1)
image = pipe(
    prompt="二次元,在拥挤的学校走廊,一个白色长发的女孩,穿着蓝色高中校服,神情悲伤失落,女生看向男生",
    negative_prompt="丑陋,变形,嘈杂,低对比度,nsfw,owres,解剖不好,手不好,文本,错误,手指缺失,多余的数字,更少的数字,裁剪,质量最差,低质量,正常质量,jpeg伪影,签名,水印,用户名,模糊,手指缺失、手不好、手臂缺失、长颈,驼背",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("6.jpg")

torch.manual_seed(7)
image = pipe(
    prompt="杰作,高精细,美丽细致的眼睛,细腻的发质,二次元,一个白色长发有呆毛的女孩,一个黑色凌乱头发的男孩,两人穿着蓝色高中校服,在社团活动室,男孩摔倒躺在地上,手碰到一个发光的白色水晶,女孩坐在很远的一边,神情惊讶,俯视视角,中景",
    negative_prompt="nsfw,owres,解剖不好,手不好,文本,错误,手指缺失,多余的数字,更少的数字,裁剪,质量最差,低质量,正常质量,jpeg伪影,签名,水印,用户名,模糊,手指缺失、手不好、手臂缺失、长颈,驼背",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("7.jpg")

torch.manual_seed(0)
image = pipe(
    prompt="杰作,高精细,美丽细致的眼睛,细腻的发质,二次元,背面,紧紧拥抱在一起,闭眼微笑,眼角有泪花,在社团活动室,白色长发小女孩,一个黑色凌乱头发小男孩,两人穿着蓝色高中校服,",
    negative_prompt="nsfw,owres,解剖不好,手不好,文本,错误,手指缺失,多余的数字,更少的数字,裁剪,质量最差,低质量,正常质量,jpeg伪影,签名,水印,用户名,模糊,手指缺失、手不好、手臂缺失、长颈,驼背",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("8.jpg")

这里从网上借鉴了正、反向tag组合

5. 依次顺序运行剩余的代码块,点击代码框左上角执行按钮,最终获得图片(大约需要20分钟)

下面的代码块按照功能主要分成这几类
1. 使用Data-Juicer处理数据,整理训练数据文件
2. 使用DiffSynth-Studio在基础模型上,使用前面整理好的数据文件进行训练微调
3. 加载训练微调后的模型
4. 使用微调后的模型,生成用户指定的prompt提示词的图片

生成图片效果如下

Step4:微调结果上传魔搭

上传链接:https://www.modelscope.cn/models/create

1.移动结果文件

创建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/

2. 下载结果文件

双击进入output文件夹,分别下载两个文件到本地

3. 创建并上传模型所需内容

  点击魔搭链接,创建模型,中文名称建议格式:队伍名称-可图Kolors训练-xxxxxx

这样就算创建完成并发布在创空间讨论区了。

4. 来到创空间,查看自己的模型是否发布

5.关闭PAI实例

完成后记得关闭实例,以防算力浪费

链接:https://www.modelscope.cn/my/mynotebook/authorization

若是使用魔搭的免费Notebook实例则在上方点击魔搭平台免费实例再点击关闭

总结

Task1的内容相对简单,可以充分激发新人兴趣。

不过新人对于图片生成效果无法精确掌控,有时候即使修改tag仍会生成改前的图片,这时可以尝试修改torch.manual_seed(0)中的参数。

同时我发现即使是同一tag有时会生成截然不同的内容,特别是对画风的描述,比如光是“二次元”这一描述,生成的画风有时会天差地别。另外,部分关于构图方面的描述,比如“近景远景,正面侧面,人物是否看向镜头”等词条效果不明显,或者可以说完全无效。对于多主角的图片效果也很差,经常出现少人、互动动作错误等情况,总的来说有很大的调整空间。

总结

### 文章总结
本文是一篇基于Datawhale官方速通文档的实践指南,旨在指导用户通过阿里云PAI-DSW和魔搭社区平台完成从环境搭建到AI图片生成的完整流程。文章分为以下几个主要步骤进行介绍:
#### 一、环境准备
1. **开通阿里云PAI-DSW试用**:
- 用户进入阿里云官网领取5000算力时,为后续的环境搭建和模型训练做准备。
- 使用支付宝登录并完成个人身份验证。
2. **报名赛事**:
- 访问天池大赛官网,使用支付宝登录并报名加入指定赛事,同时组建或加入队伍。
3. **在魔搭社区创建PAI实例**:
- 登录魔搭社区,通过授权ModelScope并创建PAI实例,用于后续的代码运行和模型训练。
- 若阿里云PAI-DSW试用未成功,可选择使用魔搭提供的免费Notebook实例。
#### 二、代码运行与图像生成
1. **下载baseline和安装环境**:
- 通过Git命令下载baseline文件,并安装必要的组件(Data-Juicer和DiffSynth-Studio)用于数据处理和模型训练。

2. **调整prompt并生成图片**:
- 通过修改prompt(正向描述和反向提示词)以及控制参数(如cfg_scale、num_inference_steps等),定制化生成具有特定风格和内容的图片。
- 示例中展示了如何通过修改prompt参数生成多张不同风格和内容的二次元风格图片。
3. **图像处理和数据准备**:
- 使用Data-Juicer处理数据,整理训练数据文件。
- 使用DiffSynth-Studio在基础模型上进行模型训练和微调。
- 最终加载微调后的模型生成指定prompt的图片。
#### 三、模型微调结果上传与关闭实例
1. **上传微调结果**:
- 将训练好的模型和生成的图片文件移动到指定目录,并从魔搭平台下载到本地。
- 在魔搭社区创建并上传模型,填写相关信息,并发布至讨论区。

2. **关闭PAI实例**:
- 完成所有操作后,及时关闭PAI实例以节省算力资源。
#### 四、结论
- **任务特点**:Task1的内容相对简单,有利于激发新人的兴趣和参与度。
- **操作难点**:新人对图片生成效果的掌控不够精确,可能需要多次调整prompt和参数。
- **优化空间**:图片生成效果受多种因素影响,如tag描述、画布构图等,有较大的优化空间。
通过本指南,用户可以了解并实践基于AI技术的图像生成流程,为进一步的学习和深入探索打下基础。

更新时间 2024-09-01