实时AI绘画模型SDXL Turbo核心基础知识详解 | 【算法兵器谱】

这篇具有很好参考价值的文章主要介绍了实时AI绘画模型SDXL Turbo核心基础知识详解 | 【算法兵器谱】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

Rocky Ding
公众号:WeThinkIn

写在前面

【算法兵器谱】栏目专注分享AI行业中的前沿/经典/必备的模型&论文,并对具备划时代意义的模型&论文进行全方位系统的解析。也欢迎大家提出宝贵的优化建议,一起交流学习💪

大家好,我是Rocky。

如果说2022年,Stable Diffusion横空出世,成为AI行业从传统深度学习时代过渡至AIGC时代的标志模型,并为工业界和投资界注入了新的活力,让AI再次性感

那么2023年1129日,StabilityAI官方发布的最新的快速文生图模型SDXL Turbo/SD Turbo,则让AI绘画领域进入了“实时生成”时代

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

那么在本文中,Rocky就深入浅出的讲解SDXL Turbo/SD Turbo模型的核心知识,一起看看这个关键AI绘画模型的价值。

本文节选自Rocky知乎上的两篇文章:Stable Diffusion XL全方位的解析文章:https://zhuanlan.zhihu.com/p/643420260,以及Stable Diffusion全方位的解析文章:https://zhuanlan.zhihu.com/p/632809634。这两篇文章目前在持续完善中,也希望大家给这两篇文章多多点赞,让Rocky有更多的动力!(也欢迎大家关注Rocky的知乎号:Rocky Ding

话不多说,在Rocky毫无保留的分享下,让我们开始学习吧!

So,enjoy(与本文的BGM一起食用更佳哦):

正文开始

----【目录先行】----

  1. SDXL Turbo整体架构初识

  2. SDXL Turbo核心原理详解

  3. SDXL Turbo效果测试

  4. SD Turbo模型介绍

SDXL Turbo整体架构初识

SDXL Turbo模型是在SDXL 1.0模型的基础上设计了全新的蒸馏训练方案(Adversarial Diffusion Distillation,ADD),经过蒸馏训练得到的。SDXL Turbo模型只需要1-4步就能够生成高质量图像,这接近实时的性能,无异让AI绘画领域的发展更具爆炸性,同时也为未来AI视频的爆发奠定坚实的基础。

SDXL Turbo模型本质上依旧是SDXL模型,其网络架构与SDXL一致,可以理解为一种经过蒸馏训练后的SDXL模型。

不过SDXL Turbo模型并不包含Refiner部分,只包含U-Net(Base)、VAE和CLIP Text Encoder三个模块。在FP16精度下SDXL Turbo模型大小6.94G(FP32:13.88G),其中U-Net(Base)大小5.14G,VAE模型大小167M以及两个CLIP Text Encoder一大一小分别是1.39G和246M。

SDXL Turbo核心原理详解

既然我们已经知道SDXL Turbo模型结构本质上是和SDXL一致,那么其接近实时的生图性能主要还是得益于最新的Adversarial Diffusion Distillation(ADD)蒸馏方案

模型蒸馏技术在传统深度学习时代就应用广泛,只是传统深度学习的落地场景只局限于ToB,任务范围不大且目标定义明确,大家往往人工设计轻量型的目标检测、分割、分类小模型来满足实际应用需求,所以当时模型蒸馏技术显得有些尴尬。

但是到了AIGC时代,大模型逻辑走通,模型蒸馏技术重新繁荣,应用于各个大模型的性能实时化中,Rocky相信模型蒸馏技术未来在AIGC时代将是一个非常关键的AI技术工具

那么,就让我们一起来解析ADD的蒸馏方案的核心知识吧。首先ADD蒸馏方案的整体架构如下图所示:

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

ADD蒸馏方案的主要流程是这样的:将预训练好的SDXL模型作为学生模型(预训练好的网络能显著提高对抗性损失(adversarial loss)的训练效果),它接收经过forward diffusion process后的噪声图片,并输出去噪后的图片,然后用这个去噪后的图片与原图输入判别器中计算adversarial loss以及与教师模型输出的去噪图片计算distillation loss。ADD蒸馏算法中主要通过优化这两个loss来对SDXL Turbo进行训练:

  1. **adversarial loss:**借鉴了GAN的思想,设计了Hinge loss(支持向量机SVM中常用的损失函数)作为SDXL的adversarial loss,通过一个Discriminator来辨别学生模型(SDXL Turbo)生成的图像和真实的图像,以确保即使在一个或两个采样步数的低步数状态下也能确保高图像保真度,同时避免了其他蒸馏方法中常见的失真或模糊问题。

  2. **distillation loss:**经典的蒸馏损失函数,让SDXL 1.0模型作为教师模型并冻结参数,让学生模型(SDXL Turbo)的输出和教师模型的输出尽量一致,具体计算方式使用的是跨周期的L2损失。
    最后,ADD蒸馏训练中总的损失函数就是adversarial loss和distillation loss的加权和,如下图所示,其中权重 λ \lambda λ设置2.5:

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

SDXL Turbo效果测试

目前StabilityAI官网已经上线SDXL Turbo模型,大家可以免费体验:https://clipdrop.co/stable-diffusion-turbo

因为SDXL Turbo网络结构与SDXL一致,所以大家也可以直接在Stable Diffusion WebUI上使用SDXL Turbo模型,我们只需按照本文3.3章中的教程使用Stable Diffusion WebUI即可。

同时ComfyUI上也已经支持SDXL Turbo的使用:https://comfyanonymous.github.io/ComfyUI_examples/sdturbo/,然后我们按照本文3.1章的教程使用ComfyUI工作流即可运行SDXL Turbo。

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

当然的,diffusers库也已经支持SDXL Turbo的使用运行了,可以进行文生图和图生图的任务,相关代码和操作流程如下所示:

# 加载diffusers和torch依赖库
from diffusers import AutoPipelineForText2Image
import torch

# 构建SDXL Turbo模型的Pipeline,加载SDXL Turbo模型
pipe = AutoPipelineForText2Image.from_pretrained("/本地路径/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
# "本地路径/sdxl-turbo"表示我们需要加载的SDXL Turbo模型,
# 大家可以关注Rocky的公众号WeThinkIn,后台回复:SDXLTurbo模型,即可获得资源链接
# "fp16"代表启动fp16精度。比起fp32,fp16可以使模型显存占用减半。

# 使用GPU进行Pipeline的推理
pipe.to("cuda")

# 输入提示词
prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."

# Pipeline进行推理
image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
# Pipeline生成的images包含在一个list中:[<PIL.Image.Image image mode=RGB size=1024x1024>]
#所以需要使用images[0]来获取list中的PIL图像

完成上面的整个代码流程,我们就能生成一张小浣熊的图片了。这里要注意的是,SDXL Turbo模型在diffusers库中进行文生图操作时不需要使用guidance_scale和negative_prompt参数,所以我们设置guidance_scale=0.0

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

接下来,Rocky再带大家完成SDXL Turbo模型在diffusers中图生图的整个流程:

from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image

pipe = AutoPipelineForImage2Image.from_pretrained("/本地路径/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")

init_image = load_image("/本地路径/用于图生图的原始图片").resize((913, 512))

prompt = "Miniature model, axis shifting, reality, clarity, details, panoramic view, suburban mountain range, game suburban mountain range, master work, ultra-high quality, bird's-eye view, best picture quality, 8K, higher quality, high details, ultra-high resolution, masterpiece, full of tension, realistic scene, top-level texture, top-level light and shadow, golden ratio point composition, full of creativity, color, future city, technology, smart city, aerial three-dimensional transportation, pedestrian and vehicle separation, green building, macaron color, gorgeous, bright"

image = pipe(prompt, image=init_image, num_inference_steps=2, strength=0.5, guidance_scale=0.0).images[0]

完成上面的整个代码流程,我们就能生成一张新的城郊山脉的图片。需要注意的是,当在diffusers中使用SDXL Turbo模型进行图生图操作时,需要确保num_inference_steps*strength大于或等于1。因为前向推理的步数等于int(num_inference_steps * strength)步。比如上面的例子中,我们就使用SDXL-Turbo模型前向推理了0.5 * 2.0 = 1 步。

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

StabilityAI官方发布的报告中表示SDXL Turbo在推理速度上提供了重大改进。在A100上,SDXL Turbo以207ms的速度生成一张512x512的图像(prompt encoding + a single denoising step + decoding, fp16),其中U-Net部分耗时占用了67ms

Rocky也测试了一下SDXL Turbo的图像生成效率,确实非常快,在V100上,4 steps生成512x512尺寸的图像基本可以做到实时响应(1.02秒,平均1 step仅需250ms)

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

在我们输入完最后一个prompt后,新生成的图像就能马上显示,推理速度确实超过了Midjourney、DALL·E 3以及之前的Stable Difusion系列模型,可谓是“天下武功,无坚不破,唯快不破”的典范。SDXL Turbo在生成速度快的同时,生成的图像质量也非常高,可以比较精准地还原prompt的描述

为了测试SDXL Turbo的性能,StabilityAI使用相同的文本提示,将SDXL Turbo与SDXL和LCM-XL等不同版本的文生图模型进行了比较。测试结果显示,在图像质量和Prompt对齐方面,SDXL Turbo只用1个step,就击败了LCM-XL的4个steps生成的图像,以及达到SDXL 1.0 Base通过50个steps生成的图像效果

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

接着当我们将采样步数提高到4时,SDXL Turbo在图像质量和Prompt对齐方面都已经略微超过SDXL 1.0 Base:

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

论文里表示目前SDXL Turbo只能生成512x512像素的图片,Rocky推测当前开源的SDXL Turbo只在单一尺寸上进行了蒸馏训练,后续估计会有更多优化版本发布。Rocky也在512x512像素下测试了不同steps(1-8 steps)时SDXL Turbo的出图效果,对比结果如下所示:

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

可以看到当steps为1和4时,效果都非常好,并且4steps比1step效果更好,这是可以理解的。不过当steps大于4之后,生成的图像明显开始出现过拟合现象。总的来说,如果是急速出图的场景,可以选择1 step;如果想要更高质量,推荐选择4 steps

同时Rocky测试了一下SDXL Turbo在不同尺寸(768x768,1024x1024,512x768,768x1024,768x512,1024x768共6中尺寸)下的图像生成质量,可以看到除了1024x1024存在一定的图片特征不完善的情况,其余也具备一定的效果,但是整体上确实不如512x512的效果好。

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

SDXL Turbo的一个直接应用,就是与游戏相结合,获得2fps的风格迁移后的游戏画面:

SDXL Turbo发布后,未来AI绘画和AI视频领域有了更多的想象空间。一定程度上再次整合加速了生成领域的各种工作流应用,未来的潜力非常大。不过由于SDXL Turbo模型需要通过蒸馏训练获得,并且其中包含了GAN的对抗损失训练,在开源生态中像训练特定SDXL模型一样的训练出特定SDXL Turbo模型,并且能保证出图的质量,目前来看是有一定难度的

SD Turbo模型介绍

SD Turbo模型是在Stable Diffusion V2.1的基础上,通过蒸馏训练得到的精简版本,其本质上还是一个Stable Diffusion V2.1模型,其网络架构不变。

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

比起SDXL Turbo,SD Turbo模型更小、速度更快,但是生成图像的质量和Prompt对齐方面不如前者。

但是在AI视频领域,SD Turbo模型有很大的想象空间,因为Stable Video Diffusion的基础模型是Stable Diffusion V2.1,所以未来SD Turbo模型在AI视频领域很可能成为AI视频加速生产的有力工具之一。

为了测试SD Turbo的性能,StabilityAI使用相同的文本提示,将SD Turbo与LCM-LoRA 1.5和LCM-LoRA XL等不同版本的文生图模型进行了比较。测试结果显示,在图像质量和Prompt对齐方面,SD Turbo只用1个step,就击败了LCM-LoRA 1.5和LCM-LoRA XL生成的图像。

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

diffusers库已经支持SDXL Turbo的使用运行了,可以进行文生图和图生图的任务,相关代码和操作流程如下所示:

from diffusers import AutoPipelineForText2Image
import torch

pipe = AutoPipelineForText2Image.from_pretrained("/本地路径/sd-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")

prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]

这里要注意的是,SD Turbo模型在diffusers库中进行文生图操作时不需要使用guidance_scale和negative_prompt参数,所以我们设置guidance_scale=0.0

接下来,Rocky再带大家完成SD Turbo模型在diffusers中图生图的整个流程:

from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image
import torch

pipe = AutoPipelineForImage2Image.from_pretrained("/本地路径/sd-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")

init_image = load_image("/本地路径/test.png").resize((512, 512))
prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k"

image = pipe(prompt, image=init_image, num_inference_steps=2, strength=0.5, guidance_scale=0.0).images[0]

需要注意的是,当在diffusers中使用SD Turbo模型进行图生图操作时,需要确保num_inference_steps*strength大于或等于1。因为前向推理的步数等于int(num_inference_steps * strength)步。比如上面的例子中,我们就使用SD Turbo模型前向推理了0.5 * 2.0 = 1 步

推荐阅读

1、加入AIGCmagic社区知识星球

AIGCmagic社区知识星球不同于市面上其他的AI知识星球,AIGCmagic社区知识星球是国内首个以AIGC全栈技术与应用为主线的学习交流平台,涉及AI绘画、AI视频、ChatGPT等大模型、数字人、全行业AIGC赋能等50+应用方向,内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AIGC模型、AIGC数据集和源码等

那该如何加入星球呢?很简单,我们只需要扫下方的二维码即可。知识星球原价:299元/年,目前限量活动价,第一年只需要199元/年。大家只需要扫描下面的星球优惠卷即可享受最大优惠:

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

sdxlturbo.ai,WeThinkIn文章内容,人工智能,stable diffusion,机器学习,AIGC,深度学习,AI作画,chatgpt

2、GPT-4,ChatGPT Plus稳定使用教程

一文读懂GPTs的构建与玩法(GPTs保姆级教程)|【WeThinkIn出品】

3、Stable Diffusion XL核心基础知识,从0到1搭建使用Stable Diffusion XL进行AI绘画,从0到1上手使用Stable Diffusion XL训练自己的AI绘画模型,AI绘画领域的未来发展等全维度解析文章正式发布

码字不易,欢迎大家多多点赞:

Stable Diffusion XL文章地址:https://zhuanlan.zhihu.com/p/643420260

4、Stable DiffusionV1-V2核心原理,核心基础知识,网络结构,经典应用场景,从0到1搭建使用Stable Diffusion进行AI绘画,从0到1上手使用Stable Diffusion训练自己的AI绘画模型,Stable Diffusion性能优化等全维度解析文章正式发布

码字不易,欢迎大家多多点赞:

Stable Diffusion文章地址:https://zhuanlan.zhihu.com/p/632809634

5、ControlNet核心基础知识、核心网络结构、从0到1在WebUI中使用ControlNet进行AI绘画、从0到1上手构建ControlNet高级应用等全维度解析文章正式发布

码字不易,欢迎大家多多点赞:

ControlNet文章地址:https://zhuanlan.zhihu.com/p/660924126

6、最全面的AIGC面经《手把手教你如何成为AIGC算法工程师,斩获AIGC算法offer!》文章发布

码字不易,欢迎大家多多点赞:

文章地址:https://zhuanlan.zhihu.com/p/651076114

7、10万字大汇总《“三年面试五年模拟”之算法工程师的求职面试“独孤九剑”秘籍》文章发布

码字不易,欢迎大家多多点赞:

文章地址:https://zhuanlan.zhihu.com/p/545374303

8、其他

除此之外Rocky还将YOLOv1-v7全系列大解析也制作成相应的pdf版本,大家可在公众号后台 【精华干货】菜单或者回复关键词“YOLO” 进行取用。

Rocky一直在运营技术交流群(WeThinkIn-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于算法,开发,竞赛,科研以及工作求职等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请添加小助手微信Jarvis8866,拉你进群~)文章来源地址https://www.toymoban.com/news/detail-795307.html

到了这里,关于实时AI绘画模型SDXL Turbo核心基础知识详解 | 【算法兵器谱】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI绘画:SDXL版ControlNet模型和使用方法!

    SDXL是目前最强的AI绘画基础模型,直接加载模型,就可以生成不错的效果。但是它有一个致命的问题,就是不支持ControlNet。 在AI绘画中,ControlNet是一个非常重要的工具。有了它,就可以生成更加可控精准的图片。ControlNet的用途非常多,比如,控制人物姿势、线稿上色、动漫

    2024年02月09日
    浏览(19)
  • AI绘画stablediffusion comfyui SDXL Controlnet模型终于全了 tile来了

    以前一直在直播中吐槽说不建议大家用SDXL生态,即便已经出来了Turbo,即便除了SDXLLighting等等周边但是我们最最喜欢用的controlnet还是补全,即便是现在也不算完全意义的全,但是最起码我们今天呢能够带来第一个期待已久的tile模型,和隐藏款的QRmonsterXL(小声使用,别人还不

    2024年04月25日
    浏览(61)
  • 智能AI问答系统ChatGPT网站系统源码+Midjourney绘画+支持GPT-4-Turbo模型+支持GPT-4图片理解能力

    SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型+国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!

    2024年02月04日
    浏览(41)
  • AI绘画使用Stable Diffusion(SDXL)绘制中国古代神兽

    说到神奇异兽,脑海中首先就会跳出我国古代神话传说中的各种神兽。比如青龙、白虎、朱雀、玄武,再比如麒麟、凤凰、毕方、饕餮等等,这些都是大家耳熟能详的的神兽。 这些神兽不仅体现了人们丰富的创造力和想象力,更是我国传统文化中的重要元素。 那么这些古代

    2024年02月05日
    浏览(30)
  • AI绘画使用Stable Diffusion(SDXL)绘制玉雕风格的龙

    灵感来源于在逛 LibLib 时,看到的 Lib 原创者「熊叁gaikan」发布的「翠玉白菜 sdxl|玉雕风格」 的 Lora 模型。简直太好看了,一下子就被吸引了! 科普下「翠玉白菜」: 翠玉白菜是由翠玉所琢碾出白菜形状的清代文物,现藏台北故宫博物院。是台北故宫博物馆的镇馆三宝之一

    2024年02月03日
    浏览(25)
  • AI绘画SDXL【插件篇】:风格插件StyleSelectorXL,灵活自由切换画风

    大家好,我是程序员晓晓。 在传统的SD1.5中,不同的绘画风格需要选择不同的大模型或者LORA,而现在SDXL,我们可以在同一个模型中绘制各种不同风格的图像,那么我们如何来绘制我们想要风格的图像呢?今天给大家介绍的这款插件,主要就是用于来帮助我们快速实现不同种

    2024年04月23日
    浏览(17)
  • AI模型部署基础知识(一):模型权重与参数精度

    一般情况来说,我们通过收集数据,训练深度学习模型,通过反向传播求导更新模型的参数,得到一个契合数据和任务的模型。这一阶段,通常使用pythonpytorch进行模型的训练得到pth等类型文件。AI模型部署就是将在python环境中训练的模型参数放到需要部署的硬件环境中去跑,

    2024年01月20日
    浏览(30)
  • 第二章:AI大模型基础知识 2.1 机器学习基础

    随着计算机技术的飞速发展,人工智能已经成为了当今科技领域的热门话题。在这个过程中,机器学习作为人工智能的一个重要分支,扮演着至关重要的角色。本文将从机器学习的基本概念、核心算法原理、具体操作步骤、实际应用场景等方面进行详细讲解,帮助读者更好地

    2024年02月21日
    浏览(25)
  • 原神盲盒风格:AI绘画Stable Diffusion原神人物公仔实操:核心tag+lora模型汇总

    本教程收集于:AIGC从入门到精通教程汇总 在这篇文章中,我们将深入探讨原神盲盒的艺术风格,以及如何运用AI绘画技术(Stable Diffusion)——来创造原神角色公仔。我们将通过实践操作让读者更好地理解这种技术,以及如何利用关键标签和Lora模型来优化生成的结果。 原神作

    2024年02月16日
    浏览(21)
  • [AI绘画] 即插即用!SDXL+T2I-Adapters 高效可控的生成图片

    标题:T2I-Adapter: Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models 论文:https://arxiv.org/pdf/2302.08453.pdf 博客:https://huggingface.co/blog/t2i-sdxl-adapters 代码:https://github.com/TencentARC/T2I-Adapter 使用地址:https://huggingface.co/spaces/TencentARC/T2I-Adapter-SDXL 大家好,AI 绘画太火

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包