【PyTorch实战·1】多模态图片生成(文心一言大模型)

news2024/12/25 12:51:51

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏:PyTorch实战_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

🏀 专栏持续更新中~~~

目录

1. 前言

2. 文心大模型(ERNIE-ViLG)

2.1 ERNIE-ViLG模型代码

2.2 ERNIE-ViLG模型代码讲解

2.2.1 模型加载 

2.2.2 模型输入输出

2.2.3 Prompt 设计原则

3. 基于文心大模型的AI作画

3.1 进入百度开发者社区

3.2 开通AI作画应用

3.3 选择相应API开通

3.4 Api调用方法

4. data(payload)写法

4.1具体要求

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作画-基础版(基于文心大模型)我会提供完整代码

"""
 * 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等数据集上取得最好效果。你可以输入一段文本描述以及生成风格,模型就会根据输入的内容自动创作出符合要求的图像。

import paddlehub as hub
from docarray import DocumentArray, Document

ernie_vilg_module = hub.Module(name='ernie_vilg')

2.2.2 模型输入输出

模型输入就是给模型提供的提示词(Prompt)

这个提示词需要有固定的格式以及固定的写法

模型输出就是模型输出图片的数量、图片的保存路径、图片的分辨率

代码如下:

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作画包括两个步骤:

  1. 请求发送
  2. 结果查询

请求发送后,获得task_id,利用task_id在结果查询中获得结果

请求发送:

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()
查询结果:
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具体要求

参数是否必选类型描述
textstring输入内容,长度不超过190个字(操作指南详见文档)
resolutionstring图片分辨率,可支持512*512、640*360、360*640、1024*1024、720*1280、1280*720
stylestring目前支持风格有:二次元、写实风格、古风、赛博朋克、水彩画、油画、卡通画,更多风格可自行探索
numint图片生成数量,支持1-6张
text_contentstring1~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_checkinteger模型侧的提示词检测开关,仅支持输入0和1。0:关闭,1:开启(默认值)。开启时,如果提示词未通过模型侧提示词检测则子任务的sub_task_error_code会返回501,无法生成图片。

4.2 举例子 

写实风格,女生,半身照,都市背景,真实拍摄,8k:

写实风格,一只小老虎,细节精致,实景拍摄,色彩明亮:

 摄影风格,阳光灿烂的春天,一只草编篮子放置在白色毯子上,里面装着水果和花。整个场景简洁,野餐氛围,公园绿色草坪,温暖阳光,自然光线,近景,整体温暖色调,逼真,专业拍摄,清晰细节:

卡通插画,可爱小熊,蘑菇,萤火虫,童话森林,精美细节,8K,CG,梦幻:

如果想要学习更多pyTorch实战的知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2167694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信安 实验1 用Wireshark分析典型TCP/IP体系中的协议

实验1 用Wireshark分析典型TCP/IP体系中的协议 实验目的 通过Wireshark软件分析典型网络协议数据包,理解典型协议格式和存在的问题,为后续学习和相关实验打下基础。 实验内容 (1)安装Wireshark,熟悉功能菜单。 &…

「空间智能」跨越维度壁垒 - 构筑AI驱动的XR元宇宙

引言 在AI和XR技术快速融合的背景下,一场由「空间智能」(Spatial Intelligence)引领的革命正在悄然展开,为元宇宙的发展注入新的动力。这场革命的核心推动者之一,是由"AI教母"李飞飞领导的World Labs。Wor…

Diffusers Image Outpaint - AI一键扩图工具 本地整合包下载

Diffusers Image Outpaint 是一个基于扩散模型的图像外延技术,它能够根据已有的图像内容,生成图像的额外部分。 它通过先进的机器学习算法,使得图像生成更加自然和逼真,为用户提供了一种创新的图像处理方式。该工具基于Realvist V…

【linux-Day5】Linux权限

【linux-Day5】Linux权限 linux用户用户分类su:用户之间进行切换exit/ctrld:退出当前账户/回退到上一个登录账户 权限和文件sudo:暂时提高用户对指令操作的权限Linux权限身份目标文件属性文件的权限表示修改文件的权限chmod:设置文…

高级自动化测试常见面试题(Web、App、接口)

一、Web自动化测试 1.Selenium中hidden或者是display = none的元素是否可以定位到? 不能,可以写JavaScript将标签中的hidden先改为0,再定位元素 2.Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以…

黄子恒的传奇故事

从社会小白到传奇人物,需要经过怎样的历练过程?每一份成功与辉煌都并非偶然,只有经过千百次的锤炼,才能如钢铁般更硬更强。我们的主人公——黄子恒,正是通过不断奋斗逆袭,蜕变成如今的演讲家,用…

Arduino中读取陀螺仪MPU6050六轴数据——三个加速度、三个角速度

1、工程创建 创建和添加I2C、MPU6050的.CPP、.h文件。 (1)功能和测试 (2)主程序代码 #include "MsTimer2.h" #include "KalmanFilter.h" #include "I2Cdev.h" #include "MPU6050.h" //…

kubernetes K8S 结合 Istio 实现流量治理

目录 1.Istio介绍? 1.1 Istio是什么? 1.2 Istio流量管理 1.2.1 熔断 1.2.2 超时 1.2.3 重试 2.Istio架构 3.istio组件详解 3.1 Pilot 3.2 Envoy 3.3 Citadel 3.4 Galley 3.5 Ingressgateway 3.5 egressgateway 扩展、k8s1.23及1.23以下版…

双卫星终端首发!遨游通讯织密天地一体应急通信网

2024年9月,全球通信行业的目光再次聚焦于北京,2024年中国国际信息通信展览会如期而至。展会次日,遨游通讯展台前热闹非凡,观众们纷纷驻足体验,对5G防爆手机、防爆车载台、PDT多模终端、DMR多模终端、卫星通信终端、单北…

【CAS框架自定义登录异常提示-固定时间内限制登录失败次数提醒】

CAS框架自定义登录异常提示 CAS框架自定义登录异常提示cas自定义异常自定义异常的步骤-三步走1定义自定义异常类2配置文件配置3逻辑代码中抛出自定义异常总结 自定义异常显示失败问题查找 自定义异常带msg参数不显示问题处理最后 CAS框架自定义登录异常提示 本地CAS框架异常提…

MySQL数据库进阶知识(四)《视图、存储过程、触发器》

学习目标: 掌握数据库视图基础知识 掌握数据库存储过程原理 掌握数据库触发器相关知识 学习内容: 一. 视图 介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询…

Acwing 最小生成树

最小生成树 最小生成树:由n个节点,和n-1条边构成的无向图被称为G的一棵生成树,在G的所有生成树中,边的权值之和最小的生成树,被称为G的最小生成树。(换句话说就是用最小的代价把n个点都连起来) Prim 算法…

大疆会搞微单相机吗,直接和索尼、佳能、尼康竞争?

网传信息,不知道大疆后续是否真会考虑这块的业务。 在消费类电子的cmos领域,类似豪威、格科、斯特威等国产公司,已经有了一些突破。不过在高端的单反、微单领域,日本还是处于绝对的垄断地位。 2023年,全球cmos市场占有…

操作系统复习3 malloc如何分配内存

malloc分配内存 malloc是c语言的库函数,不支持重载 malloc的返回值是void*类型需要强制转换 malloc申请完的内存需要用free来进行释放内存 malloc申请空间失败会返回值为空 malloc申请的是虚拟内存地址,只有这块内存被访问时,才能发生映…

基于quill2.0的富文本编辑器,Fluent Editor,支持表格,图片,表情等

官网&#xff1a;Fluent Editor | 基于 Quill 2.0 的富文本编辑器 安装 npm i opentiny/fluent-editor quill 使用案例 <template><div class"publish-form-container"><!-- TODO --><div ref"quillEditorRef" class"quill…

comfyui 工作流生成图片使用history接口获取返回时 outputs为空 问题请教,希望有大佬可以帮忙解答一下

comfyui github地址&#xff1a; GitHub - comfyanonymous/ComfyUI: The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.…

flush cache line dirty bytes

结论&#xff1a; ARM :To mark these lines, each line of the cache has an associated dirty bit (or bits) 所以这个依赖硬件实现&#xff0c;可能只刷出dirty bytes of cache line to memory.有的硬件只有一个dirty bit&#xff0c;所以会刷出整条cache line x86没有找…

1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解

目录 软件开发整体流程 软件开发流程 角色分工 软件环境 苍穹外卖项目介绍 项目介绍 产品原型 技术选型 开发环境搭建 前端环境搭建 后端环境搭建 完善登录功能 导入接口文档 Swagger 介绍 使用方式 常用注解 软件开发整体流程 软件开发流程 需求分析&#x…

Supabase 入门指南

Supabase 是一个开源替代品&#xff0c;用于 Firebase 提供的后端服务。它基于 PostgreSQL&#xff0c;提供实时数据库、身份验证、存储等功能。本文将深入探讨 Supabase 的主要功能&#xff0c;并结合不同场景给出代码实例。 1. 创建 Supabase 项目 首先&#xff0c;访问 S…

Cannon-es物理引擎中物体动力控制的深度探索

本文目录 前言1、cannon-es给物体施加力1.1 前置代码1.2 效果1.3 给小球施加力1. applyForce效果 2. applyImpulse效果 3. applyLocalImpulse效果 4. applyTorque效果 区别总结 前言 在三维物理引擎的世界里&#xff0c;Cannon-ES以其轻量级和高效能著称&#xff0c;为开发者提…