
【PaddlePaddle Hackathon 4】AIGC【高达恐龙】
男人的浪漫莫过于炫酷的机甲,本项目将以高达形态出击!!!
★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
【赛题链接】:https://github.com/PaddlePaddle/Paddle/issues/50631#task105
【PaddlePaddle Hackathon 第四期 任务总览】:https://github.com/PaddlePaddle/Paddle/issues/50629
【队名】:花开富贵
【模型简介】:机甲风炫酷恐龙一枚~~
【模型链接】: https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/
【AI Studio 项目地址】:https://aistudio.baidu.com/aistudio/projectdetail/5932453
【AI Studio 应用中心】:AIGC高达恐龙
一、创意简介&效果展示
高达恐龙
A picture of a dinosaur accompanies Gundam
将高达和恐龙的特征融合在一起:可以将高达的机器人造型和恐龙的身体特征进行融合,例如给高达增加像恐龙一样的鳞片、尾巴和爪子等,或者给恐龙添加像高达一样的机械部件和装备。
二、完整训练流程
1.paddlenlp安装
# 请运行这里安装所需要的依赖环境!!
!pip install "paddlenlp>=2.5.2" safetensors "ppdiffusers>=0.11.1" --user
from IPython.display import clear_output
clear_output() # 清理很长的内容
2. Huggingface介绍
HuggingFace简介
Hugging Face Hub和 Github 类似,都是Hub(社区)。Hugging Face可以说的上是机器学习界的Github。Hugging Face为用户提供了以下主要功能:
- 模型仓库(Model Repository):Git仓库可以让你管理代码版本、开源代码。而模型仓库可以让你管理模型版本、开源模型等。使用方式与Github类似。
- 模型(Models):Hugging Face为不同的机器学习任务提供了许多预训练好的机器学习模型供大家使用,这些模型就存储在模型仓库中。
- 数据集(Dataset):Hugging Face上有许多公开数据集。
hugging face在NLP领域最出名,其提供的模型大多都是基于Transformer的。为了易用性,Hugging Face还为用户提供了以下几个项目:
- Transformers(github, 官方文档): Transformers提供了上千个预训练好的模型可以用于不同的任务,例如文本领域、音频领域和CV领域。该项目是HuggingFace的核心,可以说学习HuggingFace就是在学习该项目如何使用。
- Datasets(github, 官方文档): 一个轻量级的数据集框架,主要有两个功能:①一行代码下载和预处理常用的公开数据集; ② 快速、易用的数据预处理类库。
- Accelerate(github, 官方文档): 帮助Pytorch用户很方便的实现 multi-GPU/TPU/fp16。
- Space(链接):Space提供了许多好玩的深度学习应用,可以尝试玩一下。
查找Hugging Face模型
本节来介绍一下如何通过Hugging Face找到你需要的模型。
首先,我们需要到来到官网的模型模块。之后我们会看到如下界面:
其主要包含三部分:
- Filter: 用于筛选你想要的模型
- 模型列表: 展示了可使用的模型。不带前缀的是官方提供的模型,例如gpt2,而带前缀的是第三方提供的模型。
- 搜索框:你可以通过搜索框按名字搜索模型。
当你点进去你的模型后,你会来到如下页面:
该页面主要的几个部分:
- 模型介绍(Model Card): 我们可以通过该文档查看该模型都提供了哪些功能,模型的表现等。
- 模型文件(Files and versions): 从该模块可以下载模型文件,一般包含多种框架的(TF、Pytorch等)模型文件和配置文件等,可以用于离线加载。
- 测试模型(Hosted inference API): 可以直接通过该模块测试自己的模型。同时Hugging Face也提供了Http API可以调用,这样就不需要本地部署了。详情请参考:https://huggingface.co/docs/api-inference/index
- 使用该模型的应用(Spaces using …):这里展示了使用该模型的应用,可以点进去玩一玩。
- 代码样例(Use in Transformers):你可以通过该模块直接查看该模型的使用方式,直接拷贝代码到项目里就可以用了。
使用Hugging Face模型
Transformers项目提供了几个简单的API帮助用户使用Hugging Face模型,而这几个简单的API统称为AutoClass
(官方文档链接),包括:
AutoTokenizer
: 用于文本分词AutoFeatureExtractor
: 用于特征提取AutoProcessor
: 用于数据处理AutoModel
: 用于加载模型
它们的使用方式均为: AutoClass.from_pretrain("模型名称")
,然后就可以用了。例如:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokenizer("I'm learning deep learning.")
1234
{'input_ids': [101, 1045, 1005, 1049, 4083, 2784, 4083, 1012, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
1
通常一个模型会包含上述4个中的部分功能,例如,对于bert-base-uncased
模型,就包含“分词”和“模型”两项功能,我们可以通过代码样例(Use in Transformers) 模块查看:
也不是所有的模型都可以使用
AutoModel
,具体还要看模型的代码示例。
参考资料来源: https://blog.csdn.net/zhaohongfei_358/article/details/126224199
3. Huggingface的注册与登录
题目要求将模型上传到 Hugging Face,需要先注册、登录。
-
注册和登录:https://huggingface.co/join
-
获取登录 Token
-
Aistudio 登录 Huggingface Hub
Tips:为了方便我们之后上传权重,我们需要登录 Huggingface Hub,想要了解更多的信息我们可以查阅 官方文档。
3. 在当前环境登录Huggingface
!git config --global credential.helper store
from huggingface_hub import login
login()
Token is valid.
Your token has been saved in your configured git credential helpers (store).
Your token has been saved to /home/aistudio/.cache/huggingface/token
Login successful
- tips:如何检测是否登录成功?
打开日志控制控制台,查看日志。
登录成功时,日志如下:
4. 如何训练模型,并上传到HF
上传图片
- 首先,我们需要将所需训练的图片上传到aistudio上的文件夹, 我们可以通过👉拖拽上传 的方式,将我们所需的图片上传至指定的文件夹。
- 在这里,我们已经在👉Dinosaur文件夹准备好了几张图片,以下展示三张。
!python train_dreambooth_lora.py \
--pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5" \
--instance_data_dir="./Dinosaur" \
--output_dir="lora_outputs" \
--instance_prompt="A picture of a dinosaur" \
--resolution=512 \
--train_batch_size=1 \
--gradient_accumulation_steps=1 \
--checkpointing_steps=100 \
--learning_rate=1e-4 \
--lr_scheduler="constant" \
--lr_warmup_steps=0 \
--max_train_steps=1000 \
--seed=0 \
--lora_rank=4 \
--push_to_hub=False \
--validation_prompt="A picture of a dinosaur accompanies Gundam" \
--validation_steps=100 \
--num_validation_images=2
W0415 18:17:11.836896 2653 gpu_resources.cc:85] Please NOTE: device: 0, GPU Compute Capability: 8.0, Driver API Version: 11.2, Runtime API Version: 11.2
W0415 18:17:11.843729 2653 gpu_resources.cc:115] device: 0, cuDNN Version: 8.2.
正在下载模型权重,请耐心等待。。。。。。。。。。
100%|███████████████████████████████████████████| 312/312 [00:00<00:00, 276kB/s]
100%|████████████████████████████████████████| 842k/842k [00:00<00:00, 5.14MB/s]
100%|████████████████████████████████████████| 512k/512k [00:00<00:00, 2.13MB/s]
100%|████████████████████████████████████████| 2.00/2.00 [00:00<00:00, 1.74kB/s]
100%|███████████████████████████████████████████| 478/478 [00:00<00:00, 521kB/s]
100%|███████████████████████████████████████████| 592/592 [00:00<00:00, 470kB/s]
[33m[2023-04-15 18:17:15,804] [ WARNING][0m - You are using a model of type clip_text_model to instantiate a model of type . This is not supported for all configurations of models and can yield errors.[0m
Downloading (…)cheduler_config.json: 100%|█████| 342/342 [00:00<00:00, 53.9kB/s]
100%|███████████████████████████████████████████| 592/592 [00:00<00:00, 556kB/s]
Downloading (…)model_state.pdparams: 100%|███| 492M/492M [01:07<00:00, 7.28MB/s]
Downloading (…)v1-5/vae/config.json: 100%|██████| 610/610 [00:00<00:00, 249kB/s]
Downloading (…)model_state.pdparams: 100%|███| 335M/335M [00:38<00:00, 8.61MB/s]
Downloading (…)1-5/unet/config.json: 100%|██████| 807/807 [00:00<00:00, 329kB/s]
Downloading (…)model_state.pdparams: 100%|█| 3.44G/3.44G [01:46<00:00, 32.3MB/s]
Train Steps: 10%|▌ | 100/1000 [00:21<02:40, 5.60it/s, epoch=0019, lr=0.0001, step_loss=0.0851]
Saved lora weights to lora_outputs/checkpoint-100
Downloading (…)1-5/model_index.json: 100%|██████| 601/601 [00:00<00:00, 117kB/s][A
Fetching 13 files: 0%| | 0/13 [00:00<?, ?it/s][A
Downloading (…)rocessor_config.json: 100%|█████| 342/342 [00:00<00:00, 68.5kB/s][A[A
Fetching 13 files: 15%|███▊ | 2/13 [00:00<00:00, 16.20it/s][A
Downloading (…)er/model_config.json: 100%|██████| 463/463 [00:00<00:00, 196kB/s][A[A
Downloading (…)okenizer_config.json: 100%|██████| 312/312 [00:00<00:00, 115kB/s][A[A
Fetching 13 files: 54%|█████████████▍ | 7/13 [00:00<00:00, 23.24it/s][A
Downloading (…)tokenizer/vocab.json: 0%| | 0.00/862k [00:00<?, ?B/s][A[A
Downloading (…)tokenizer/vocab.json: 100%|███| 862k/862k [00:00<00:00, 1.53MB/s][A[A
Downloading (…)er/added_tokens.json: 100%|█████| 2.00/2.00 [00:00<00:00, 523B/s][A[A
Downloading (…)cial_tokens_map.json: 100%|██████| 478/478 [00:00<00:00, 163kB/s][A[A
Fetching 13 files: 77%|██████████████████▍ | 10/13 [00:01<00:00, 7.34it/s][A
Downloading (…)tokenizer/merges.txt: 0%| | 0.00/525k [00:00<?, ?B/s][A[A
Downloading (…)tokenizer/merges.txt: 100%|███| 525k/525k [00:00<00:00, 1.13MB/s][A[A
Fetching 13 files: 100%|████████████████████████| 13/13 [00:01<00:00, 7.57it/s][A
Train Steps: 20%|█▍ | 200/1000 [00:50<02:22, 5.60it/s, epoch=0039, lr=0.0001, step_loss=0.408]
Saved lora weights to lora_outputs/checkpoint-200
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 14768.68it/s][A
Train Steps: 30%|█▊ | 300/1000 [01:21<02:04, 5.63it/s, epoch=0059, lr=0.0001, step_loss=0.0729]
Saved lora weights to lora_outputs/checkpoint-300
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 15033.35it/s][A
Train Steps: 40%|██▍ | 400/1000 [01:48<01:49, 5.47it/s, epoch=0079, lr=0.0001, step_loss=0.0712]
Saved lora weights to lora_outputs/checkpoint-400
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 14147.89it/s][A
Train Steps: 50%|███▌ | 500/1000 [02:16<01:28, 5.65it/s, epoch=0099, lr=0.0001, step_loss=0.308]
Saved lora weights to lora_outputs/checkpoint-500
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 16325.14it/s][A
Train Steps: 60%|███▌ | 600/1000 [02:42<01:11, 5.63it/s, epoch=0119, lr=0.0001, step_loss=0.0652]
Saved lora weights to lora_outputs/checkpoint-600
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 15033.35it/s][A
Train Steps: 70%|████▉ | 700/1000 [03:10<00:52, 5.67it/s, epoch=0139, lr=0.0001, step_loss=0.037]
Saved lora weights to lora_outputs/checkpoint-700
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 13769.18it/s][A
Train Steps: 80%|█████▌ | 800/1000 [03:39<00:35, 5.68it/s, epoch=0159, lr=0.0001, step_loss=0.169]
Saved lora weights to lora_outputs/checkpoint-800
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 15150.31it/s][A
Train Steps: 90%|██████▎| 900/1000 [04:06<00:18, 5.47it/s, epoch=0179, lr=0.0001, step_loss=0.212]
Saved lora weights to lora_outputs/checkpoint-900
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 14345.16it/s][A
Train Steps: 100%|█████| 1000/1000 [04:34<00:00, 5.43it/s, epoch=0199, lr=0.0001, step_loss=0.0823]
Saved lora weights to lora_outputs/checkpoint-1000
Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 12560.69it/s][A
Model weights saved in lora_outputs/paddle_lora_weights.pdparams
Fetching 15 files: 100%|█████████████████████| 15/15 [00:00<00:00, 12345.87it/s][A
Train Steps: 100%|█████| 1000/1000 [05:04<00:00, 3.28it/s, epoch=0199, lr=0.0001, step_loss=0.0823]
[0m
5. 上传模型
from utils import upload_lora_folder
# 使用前请确保已经登录了huggingface hub!
upload_dir = "lora_outputs" # 我们需要上传的文件夹目录
repo_name = "Gundam_Dinosaur" # 我们需要上传的repo名称
pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5" # 训练该模型所使用的基础模型
prompt = "A picture of a dinosaur accompanies Gundam" # 搭配该权重需要使用的Prompt文本
upload_lora_folder(
upload_dir=upload_dir,
repo_name=repo_name,
pretrained_model_name_or_path=pretrained_model_name_or_path,
prompt=prompt,
)
paddle_lora_weights.pdparams: 0%| | 0.00/3.23M [00:00<?, ?B/s]
Upload 1 LFS files: 0%| | 0/1 [00:00<?, ?it/s]
模型权重已经上传到了, https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/
0/1 [00:00<?, ?it/s]
模型权重已经上传到了, https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/
https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/
此文章为搬运
原项目链接
更多推荐
所有评论(0)