🌈个人主页: 十二月的猫-CSDN博客
🔥 系列专栏:PyTorch实战_十二月的猫的博客-CSDN博客
💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
🏀 专栏持续更新中~~~✨
目录
[1. 前言](#1. 前言)
[2. 文心大模型(ERNIE-ViLG)](#2. 文心大模型(ERNIE-ViLG))
[2.1 ERNIE-ViLG模型代码](#2.1 ERNIE-ViLG模型代码)
[2.2 ERNIE-ViLG模型代码讲解](#2.2 ERNIE-ViLG模型代码讲解)
[2.2.1 模型加载](#2.2.1 模型加载)
[2.2.2 模型输入输出](#2.2.2 模型输入输出)
[2.2.3 Prompt 设计原则](#2.2.3 Prompt 设计原则)
[3. 基于文心大模型的AI作画](#3. 基于文心大模型的AI作画)
[3.1 进入百度开发者社区](#3.1 进入百度开发者社区)
[3.2 开通AI作画应用](#3.2 开通AI作画应用)
[3.3 选择相应API开通](#3.3 选择相应API开通)
[3.4 Api调用方法](#3.4 Api调用方法)
[4. data(payload)写法](#4. data(payload)写法)
[4.2 举例子](#4.2 举例子)
1. 前言
大家好,我是十二月的猫。
【PyTorch实战】系列包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。
同时猫猫也将在讲解过程中,连同环境配置一起讲解,真正做到无门槛、无基础也能独立完成项目
项目环境:
- 平台:Windows11
- 语言环境:python3.8
- 编译器:PyCharm
- PyTorch版本:2.4.1(CUDA版本)
pip安装方法如下: pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
这里大家一定要对应上自己的CUDA版本、GPU版本等 (具体问题具体分析)
2. 文心大模型(ERNIE-ViLG)
2.1 ERNIE-ViLG模型代码
ERNIE-ViLG模型本质上是一种AIGC模型
AIGC(Artificial Intelligence Generated Content)登上舞台,以高效、精准、定制化等能力特征,重新定义了内容生产方式。
想要更详细了解AIGC模型,可以看我的另一篇文章【人工智能绪论】一次性搞懂什么是AIGC!_aigc的技术-CSDN博客
可惜:文心一言的ERNIE-ViLG 模型已经不开放API计量使用
因此在CSDN上看到的大部分利用ERNIE-ViLG 模型来进行文生图的方法已经不再适用
但是这里我仍然提供一下核心代码,如果有友友之前购买过ERNIE-ViLG 模型的API仍然可以使用
因为ERNIE-ViLG模型 本身已经不对外开放,所以这里我不提供完整可以运行的代码
后面的**AI作画-基础版(基于文心大模型)**我会提供完整代码
python
"""
* Created with PyCharm
* 作者: 十二月的猫
* 日期: 2024/9/23
* 时间: 10:09
* 描述:
"""
import paddlehub as hub
# from docarray import DocumentArray, Document
def run(text_prompts='汽车', style="油画"):
erniv_vilg_module = hub.Module(name='ernie_vilg')
# 古风|油画|水彩画|卡通画|二次元|浮世绘|蒸汽波艺术|low poly|像素风格|概念艺术|未来主义|赛博朋克|写实风格|洛丽塔风格|巴洛克风格|超现实主义
result = erniv_vilg_module.generate_image(text_prompts=text_prompts, style=style, topk=6, output_dir='./output')
# DocumentArray([Document().load_pil_image_to_datauri(image) for image in result[:6]]).plot_image_sprites()
2.2 ERNIE-ViLG模型代码讲解
代码核心包括两个部分:
- 模型加载
- 模型输入输出
2.2.1 模型加载
文心ERNIE-ViLG参数规模达到100亿
,是目前为止全球最大规模中文跨模态生成模型
,在文本生成图像、图像描述等跨模态生成任务上效果全球领先,在图文生成领域MS-COCO、COCO-CN、AIC-ICC
等数据集上取得最好效果。你可以输入一段文本描述以及生成风格,模型就会根据输入的内容自动创作出符合要求的图像。
python
import paddlehub as hub
from docarray import DocumentArray, Document
ernie_vilg_module = hub.Module(name='ernie_vilg')
2.2.2 模型输入输出
模型输入就是给模型提供的提示词(Prompt)
这个提示词需要有固定的格式以及固定的写法
模型输出就是模型输出图片的数量、图片的保存路径、图片的分辨率等
代码如下:
python
result = erniv_vilg_module.generate_image(text_prompts=text_prompts, style=style, topk=6, output_dir='./output')
参数
- text_prompts(str): 输入的语句,描述想要生成的
图像的内容
。 - style(Optional[str]): 生成
图像的风格
,当前支持'油画','水彩','粉笔画','卡通','儿童画','蜡笔画'。 - topk(Optional[int]): 保存前多少张图,最多保存10张。
- output_dir(Optional[str]): 保存输出图像的目录,默认为"ernievilg_output"。
返回
- images(List(PIL.Image)): 返回生成的所有图像列表,PIL的Image格式。
2.2.3 Prompt 设计原则
- text_prompts:图像生成内容
- style:图像风格
古风
|油画
|水彩画
|卡通画
|二次元
|浮世绘
|蒸汽波艺术
|low poly
|像素风格
|概念艺术
|未来主义
|赛博朋克
|写实风格
|洛丽塔风格
|巴洛克风格
|超现实主义
例如text_prompts:"山水,亭子,动物"
style:"油画"
例如text_prompts:"戴着眼镜的猫"
style:" 迷幻艺术"
3. 基于文心大模型的AI作画
3.1 进入百度开发者社区
3.2 开通AI作画应用
3.3 选择相应API开通
至此,我们就获得了有作图权限的两个Key:
Secret Key
Api Key
后面通过这两个Key,我们要获取access_token用来访问模型所在页面(登录Token应用)
3.4 Api调用方法
使用Ai作画包括两个步骤:
- 请求发送
- 结果查询
请求发送后,获得task_id,利用task_id在结果查询中获得结果
请求发送:
python
import requests
import json
API_KEY = "Your_key" # 要改的
SECRET_KEY = "Your_key" # 要改的
def main():
url = "https://aip.baidubce.com/rpc/2.0/wenxin/v1/basic/textToImage?access_token=" + get_access_token()
# 请求内容(作画的描述)
# json.dumps():将字典结构转为json类型
# json.loads():将json类型转为字典结构
# 字典结构可以认为是python中的json结构,json结构是用于网络传输的结构
payload = json.dumps(
{
"text": "汽车",
"style": "油画",
"resolution": "512*512",
"num": 1
}
)
# 确定:请求格式是json,接受格式是json
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
# 解析 response 并保存 taskId
# json结构需要利用json.loads来读取
# .text:获得服务器返回内容的内容体
response_data = json.loads(response.text)
# 字典结构可以通过[]输入关键字来获取
task_id = response_data['data']['taskId']
# 保存 taskId 到 JSON 文件
with open('task_id.json', 'w') as f:
json.dump({"taskId": task_id}, f)
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return str(requests.post(url, params=params).json().get("access_token"))
if __name__ == '__main__':
main()
查询结果:
python
import requests
import json
API_KEY = "Your_key" #要改的
SECRET_KEY = "Your_key" #要改的
def main():
# 从 JSON 文件读取 taskId
with open('task_id.json', 'r') as f:
data = json.load(f)
task_id = data['taskId']
url = "https://aip.baidubce.com/rpc/2.0/wenxin/v1/basic/getImg?access_token=" + get_access_token()
payload = json.dumps(
{
"taskId":task_id
}
)
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return str(requests.post(url, params=params).json().get("access_token"))
if __name__ == '__main__':
main()
4. data(payload)写法
4.1具体要求
参数 | 是否必选 | 类型 | 描述 |
---|---|---|---|
text | 是 | string | 输入内容,长度不超过190个字(操作指南详见文档) |
resolution | 是 | string | 图片分辨率,可支持512*512、640*360、360*640、1024*1024、720*1280、1280*720 |
style | 否 | string | 目前支持风格有:二次元、写实风格、古风、赛博朋克、水彩画、油画、卡通画,更多风格可自行探索 |
num | 否 | int | 图片生成数量,支持1-6张 |
text_content | 否 | string | 1~50个字符,支持英文、数字及常用特殊字符。若不传该参数则默认为Text-to-Image-内容ID-AI,示例:Text-to-Image-131870381_0_finaI.png-Al;若传该参数,则相应水印内容自动添加至Text-to-Image后方,示例:Text-to-Image-ABCD-131870381_0_finaI.png-Al |
text_check | 否 | integer | 模型侧的提示词检测开关,仅支持输入0和1。0:关闭,1:开启(默认值)。开启时,如果提示词未通过模型侧提示词检测则子任务的sub_task_error_code会返回501,无法生成图片。 |
4.2 举例子
写实风格,女生,半身照,都市背景,真实拍摄,8k:
写实风格,一只小老虎,细节精致,实景拍摄,色彩明亮:
摄影风格,阳光灿烂的春天,一只草编篮子放置在白色毯子上,里面装着水果和花。整个场景简洁,野餐氛围,公园绿色草坪,温暖阳光,自然光线,近景,整体温暖色调,逼真,专业拍摄,清晰细节:
卡通插画,可爱小熊,蘑菇,萤火虫,童话森林,精美细节,8K,CG,梦幻:
如果想要学习更多pyTorch实战的知识,大家可以点个关注并订阅,持续学习、天天进步
你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~