一、环境搭建
利用学习手册,完成阿里云PAI-DSW申请,赛事报名,并在魔搭创建PAI实例
二、Baseline获取
在终端(Terminal)加入下列代码运行,等待2~3 min
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors.git
三、Baseline运行
3.1 安装 Data-Juicer 和 DiffSynth-Studio
打开baseline.py文件,运行第一块代码,运行完成后手动重启 Notebook kernel
3.2 下载数据集
载入训练所需数据集
3.3 数据处理
共129张图片需要进行处理
3.4 模型训练
- 在训练命令中填入
--modelscope_model_id xxxxx
以及--modelscope_access_token xxxxx
后,训练程序会在结束时自动上传模型到 ModelScope- 部分参数可根据实际需求调整,例如
lora_rank
可以控制 LoRA 模型的参数量
3.5 文生图
根据下列代码可生成一张图片,通过改变prompt生成自己想要的图片
比赛要求生成八张图片的小故事,利用下面代码进行结果展示
四、结果保存与提交
在终端(Terminal)运行下列代码进行结果保存(结果将在output文件中),里面包含生成图片的jpg文件以及.ckpt文件
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/
前往魔搭,上传结果
五、后续比赛思路
5.1 prompt与negative_prompt修改
Baseline所给的prompt并非十分详细,有可能影响故事连贯性,图片质量等,后续需要构思逻辑性强,具有针对性的prompt生成更优质的图片,并尝试使用英文prompt提高质量
5.2 训练集质量提升
比赛提供美度的客观评分标准,具体代码如下
pip install simple-aesthetics-predictor
import torch, os
from PIL import Image
from transformers import CLIPProcessor
from aesthetics_predictor import AestheticsPredictorV2Linear
from modelscope import snapshot_download
model_id = snapshot_download('AI-ModelScope/aesthetics-predictor-v2-sac-logos-ava1-l14-linearMSE', cache_dir="models/")
predictor = AestheticsPredictorV2Linear.from_pretrained(model_id)
processor = CLIPProcessor.from_pretrained(model_id)
device = "cuda"
predictor = predictor.to(device)
def get_aesthetics_score(image):
inputs = processor(images=image, return_tensors="pt")
inputs = {k: v.to(device) for k, v in inputs.items()}
with torch.no_grad():
outputs = predictor(**inputs)
prediction = outputs.logits
return prediction.tolist()[0][0]
def evaluate(folder):
scores = []
for file_name in os.listdir(folder):
if os.path.isfile(os.path.join(folder, file_name)):
image = Image.open(os.path.join(folder, file_name))
scores.append(get_aesthetics_score(image))
if len(scores) == 0:
return 0
else:
return sum(scores) / len(scores)
score = evaluate("./images")
print(score)
通过设置一定的美度指标去除不合格的图片,提高模型性能