Task1:从零入门AI生图原理&实践
提示:本文为对平台文档的解读注释和补充
Task1:从零入门AI生图原理&实践
Task1:从零入门AI生图原理&实践 文生图 LoRA 提示词 模型参数解读和测试 模型参数解读 提示词(prompt)测试 总结文生图
文生图是AIGC ( AI Generated Content )框架中的一个关键技术,通过文字描述,将文字转化为图像并展示出来。文生图具有白动化程度高、精度高、可扩展性强、可定制化等优势,具有广泛的应用前景,可以为人们提供更便捷高效的绘图解决方案。本文主要讲解其中应用的LoRA模型。
LoRA
Stable Diffusion中的Lora(LoRA)模型是一种轻量级的微调方法,它代表了“Low-Rank Adaptation”,即低秩适应。Lora不是指单一的具体模型,而是指一类通过特定微调技术应用于基础模型的扩展应用。在Stable Diffusion这一文本到图像合成模型的框架下,Lora被用来对预训练好的大模型进行针对性优化,以实现对特定主题、风格或任务的精细化控制。
众所周知,大模型所涉及的参数都是以10亿起的,往往上百亿千亿级的参数。这些模型进行预训练后的基座模型(Base Model)在具体的应用场景下需要进一步微调。这时面临两种选择:
1.全参数的微调:毫无疑问,这个需要加载所有的参数进行调整训练,费时费力更费钱。
2.部分参数的微调:只针对某些层的权重和参数进行调整训练,能够减少存储空间和加速部署,但存在一些性能和模型质量的损耗。
LoRA在保留基座模型全部参数的同时,拆分出权重矩阵的更新并进行矩阵分解,通过调整训练这个由低秩矩阵乘积表示的更新矩阵来减少存储空间的同时保留了模型的质量和微调速度。
模型具体原理详见:http://t.csdnimg.cn/mm7mK
提示词
提示词的设计和选择直接影响最终生成图像的质量和风格。写出一份比较好的提示词是文生图技术的关键。
要写好一份提示词,遵循原则为尽可能详细并且具体,从不同角度进行详细描述。
常用的正面提示词关键词类别包括如下:
(1) 主体 subject
(2) 媒介 medium
(3) 风格 style
(4) 画家 artist
(5) 网站 website
(6) 分辨率 resolution
(7) 额外细节 additional details
(8) 色调 color
(9) 光影 lighting
当然,输入提示词时,不需要包括到每个类别,只需作为一个列表检查下哪些可以用到。
同样,负面提示词也很重要,即填入不想要的主体或者身体部位,以在采样过程中避免出现。比如说,sd v1 版本不擅长生成手,就可以在负向提示词里输入“hand”或者“extra limbs”来隐藏或修正。主要有 4 个可以使用负面提示词的应用场景,分别是:
(1) 移除物体 removing things
(2) 修改图片 modifying images
(3) 关键词切换 keyword switching
(4) 修改风格 modifying styles
具体介绍详见大佬总结的:http://t.csdnimg.cn/ARjTn
模型参数解读和测试
模型参数解读
在输入这行代码后:
!python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py -h
我们可以看到模型参数输出如下:
-pretrained_unet_path 预训练UNet模型路径
预训练模型的路径 (UNet)。如,models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors
–pretrained_text_encoder_path 预训练文本编码器路径
预训练模型的路径 (文本编码器)。如,models/kolors/Kolors/text_encoder
–pretrained_fp16_vae_path 预训练VAE模型路径
预训练模型的路径 (VAE)。如,models/kolors/Kolors/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors
–lora_target_modules LoRA目标模块
包含LoRA模块的层。
–dataset_path 数据集路径
输入数据集的路径。
–output_path 输出路径
保存模型的路径。
–steps_per_epoch 每轮步数
–height 图像高度
–width 图像宽度
–center_crop 中心裁剪
是否将输入图像裁剪到指定分辨率的中心。如果不设置,图像将被随机裁剪。图像将首先调整到指定分辨率,然后再进行裁剪。
–random_flip 随机翻转
是否随机水平翻转图像。
–batch_size 批量大小
训练数据加载器的批量大小(每个设备)。
–dataloader_num_workers 数据加载器子进程数
用于数据加载的子进程数量。0表示数据将在主进程中加载。
–precision {32,16,16-mixed} 训练精度
–learning_rate 学习率
–lora_rank LoRA秩
LoRA更新矩阵的维度。
–lora_alpha LoRA系数
LoRA更新矩阵的权重。
–use_gradient_checkpointing 梯度检查点
是否使用梯度检查点。
–accumulate_grad_batches 梯度累积批次数
–training_strategy 训练策略{auto,deepspeed_stage_1,deepspeed_stage_2,deepspeed_stage_3}
–max_epochs 最大轮数
–modelscope_model_id ModelScope 模型ID
如果提供模型ID,模型将自动上传至ModelScope。
–modelscope_access_token ModelScope访问令牌
ModelScope上的访问密钥。如果希望将模型上传到ModelScope,需要提供访问令牌。
于是,我们便可以根据官方的参数介绍来调整参数模型进行训练,例如:
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
--lora_rank 16 \ # LoRA更新矩阵的秩
--lora_alpha 4.0 \ # LoRA更新矩阵的权重系数
--dataset_path data/lora_dataset_processed \
--output_path ./models \
--max_epochs 1 \
--center_crop \ # 对图像进行中心裁剪
--use_gradient_checkpointing \ # 使用梯度检查点来节省内存
--precision "16-mixed" # 使用混合精度 (FP16 + FP32) 进行训练
""".strip()
os.system(cmd)
提示词(prompt)测试
在首次测试我分别使用中文,英文提示词测试模型效果。
英文提示词如下:
prompt="(flower:1.2),lgirl,Dynamic posture,red eyes,medium balls,dynamic angle, bare feet ,looking at viewer, best quality,realistic, worldmasterpiece,",
negative_prompt="animal,baddream,EasyNegative,verybadimagenegative vl.3, censored,lowres, bad anatomy,bad hands, text,error,missing fingers,extradigit,fewer digits,cropped,worst quality, low quality,signature, watermark, username, blurry,missing arms, long neck,humpbacked, bad feet, ",
可以看到生成的图片基本涵盖了我全部正面提示词的要求,特别是realistic风格。但bad feet这一问题仍存在,多生成了几次也未能修复。在后续Task的测试中我将通过模型调参和添加数据集来优化。
中文提示词如下:
prompt="二次元,虚拟偶像,紫发紫眼,女仆装,头戴印有紫色船锚标志的白色厨师帽,眼神呆滞",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指",
可以看到生成的图片也基本涵盖了我全部正面提示词的要求,但忽略了。但“紫色船锚标志”这个点。同时我们可以看出,在使用中文提示词“二次元”时,首先生成的图片是偏2d的人物形象。在其他生成的图片中也印证了这一猜想。
中文提示词2:
prompt="二次元,红色长发少女,身着红色战斗服,站在开阔的操场中央,双手叉腰,眼神中闪烁着不屈的光芒,嘴角挂着自信的微笑",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指",
总结
本人在此次活动Task1完成了对文生图的初步探索,后续会从模型调参与数据集,提示词等方面进行学习和优化。
最后,推荐给大家一个提示词网站:
http://www.atoolbox.net/Tool.php?Id=1101
总结
### 文章总结:从零入门AI生图原理&实践这篇文章介绍了AI生成内容(AIGC)框架中的关键技术——文生图(Text-to-Image Generation),主要聚焦于LoRA模型的应用及其原理,并通过实践操作验证了其效果。以下是对文章的详细总结:
#### 一、文生图技术概述
- **技术定义**:文生图通过文字描述转化为图像,具有高度的自动化、精度和可扩展性。
- **应用优势**:自动化程度高、精度高、易于定制化,广泛应用于图像创作领域。
- **重点讲解**:本文详细讲解了其中应用的LoRA模型。
#### 二、LoRA模型详解
- **定义**:Stable Diffusion中的LoRA(Low-Rank Adaptation)模型是一种轻量级微调方法,用于在预训练模型基础上进行针对性优化。
- **优势**:相比全参数微调,LoRA通过拆分权重矩阵并更新低秩矩阵,显著减少存储空间并加速部署,同时保留了模型的质量和微调速度。
- **应用场景**:在Stable Diffusion框架下,Lora被用于特定主题、风格或任务的精细化控制。
#### 三、提示词(Prompt)的设计与应用
- **重要性**:提示词直接影响生成图像的质量和风格,详细且具体的提示词是关键技术。
- **正面提示词**:常用类别包括主体(subject)、媒介(medium)、风格(style)、画家(artist)、网站(website)、分辨率(resolution)、额外细节(additional details)、色调(color)、光影(lighting)等。
- **负面提示词**:用于减少或排除不希望的图像特征,如“bad hands”、“extra limbs”等,有助于修正常见问题。
#### 四、模型参数解读与测试
- **参数解读**:通过执行特定代码可以看到LoRA模型的详细参数,如预训练模型的路径、数据集路径、输出路径、图像尺寸、批量大小等。
- **调整参数**:可根据具体需求调整参数进行训练,如设置LoRA秩、权重系数、训练精度、最大轮数等。
- **实际测试**:通过中英文提示词测试模型效果,尽管部分细节如“紫色船锚标志”未精确体现,但整体满足了提示词要求。
#### 五、未来优化方向
- **模型调参**:进一步调整模型参数以提升图像质量。
- **数据集优化**:增加和优化数据集,提高模型对于特定主题和风格的处理能力。
- **提升提示词能力**:学习更多高级技巧,设计更细致具体的提示词以提高生成图像的质量。
#### 六、推荐资源
- **提示词网站**:推荐使用了一处提示词网站的链接,便于用户获取更多灵感和技巧。
### 结语
通过对文生图技术及LoRA模型的详细讲解与实践探索,本文为读者提供了从零入门的AI生成图像的初步指南。未来在模型调参、数据集优化及提示词设计等方面进一步学习与尝试,将能够进一步提升AI生图的效果和应用价值。