【论文阅读笔记】One Diffusion to Generate Them All
One Diffusion to Generate Them All
- 介绍
- 理解
- 引言
- 二、相关工作
- 三、方法
- 预备知识
- 训练
- 推理
- 实现细节
- 训练细节
- 数据集构建
- 实验分
- 结论
- 附录
介绍
Paper:https://arxiv.org/abs/2411.16318
Code:https://github.com/lehduong/onediffusion
Authors:Allen Institute for AI(AI2)\ 加州大学欧文分校 \ 华盛顿大学
理解
利用成组的序列数据通过Attention自身去完成其内部一致性的学习,多种任务同时训练又共同促进了模型的能力。
同类文章还有 GDT https://arxiv.org/pdf/2410.15027
引言
- LLMs 能作为通用模型,用于多种任务,并进行 zero-shot 泛化,作者团队试图寻求同样功能的扩散模型
- 现有的扩散模型往往需要 add-ons 来实现特定功能,比如条件控制、身份保持、多视图生成、姿态检测、深度提取、分割等
- 受基于序列数据的扩散模型启发,我们在训练期间将所有条件和目标图像建模为一系列具有不同噪声水平的“视图”。(本质上就是将对应任务的数据成组送入到模型,并使用不同的时间不 t 进行预测)
- 提出 OneGen 数据集,可用于训练不同任务
- 对多种特定任务起到了匹配特定模型的效果
二、相关工作
- 介绍了多种基于扩散模型的针对特定生成任务的方法,如 Controlnet、T2I、instruct pix2pix、IP-adapter、PuLiD等,多视图任务有syncdreamer、mvdream 等
- 介绍多种基于扩散模型的预测任务,如光流估计、开放语义分割等。这些研究表明,扩散模型不仅对生成图像有用,而且对计算机视觉中的各种预测任务也非常有效
- 介绍了相关的统一任务生成,如 unicontrolnet,OmniGen 等
三、方法
预备知识
flow matching: 通过学习在两个概率分布之间传输的时间相关向量场来训练连续时间生成模型的框架。
L C F M ( θ ) : = E t , q ( z ) , p t ( x ∣ z ) ∥ v θ ( t , x ) − u t ( x ∣ z ) ∥ 2 \mathcal{L}_{\mathrm{CFM}}(\theta):=\mathbb{E}_{t, q(z), p_{t}(x \mid z)}\left\|v_{\theta}(t, x)-u_{t}(x \mid z)\right\|^{2} LCFM(θ):=Et,q(z),pt(x∣z)∥vθ(t,x)−ut(x∣z)∥2
根据图 2,我们将多模态条件下的图像生成问题视为序列建模,将不同任务的训练数据编组。
训练
训练:采用 SD3 的时间采样方式 t ∈ L o g N o r m ( 0 , 1 ) t \in LogNorm(0,1) t∈LogNorm(0,1),为同一序列的输入进行单独采样构建加噪后的潜变量,然后遵循其去噪损失: L ( θ ) = E [ ∥ v θ ( t 1 , … , t N , x 1 , … , x N ) − u ∥ 2 ] \mathcal{L}(\theta)=\mathbb{E}\left[\left\|v_{\theta}\left(t_{1}, \ldots, t_{N}, \mathbf{x}_{1}, \ldots, \mathbf{x}_{N}\right)-u\right\|^{2}\right] L(θ)=E[∥vθ(t1,…,tN,x1,…,xN)−u∥2]
推理
推理阶段将条件的噪声强度设置为 0,想要输出的目标图像(可能是多个)使用相同的去噪时间步 t,可以遵循正常的去噪推理流程对 ODE求解。
实现细节
- 网络架构:采用 Next-DiT 架构;设计了一个支持多种输入的变量长度定义方式;使用 3D RoPE 来处理位置编码
- 任务设定
- 文本到图像(1 个视图)。仅使用单个“视图”,训练和推理遵循与标准文本到图像扩散模型相同的过程。我们将任务标签 [[text2image]]] 添加到标题中以指定任务。
- 图像到图像(2 个视图)。我们将第一个视图设置为目标图像,第二个视图设置为条件输入。在推理过程中,我们可以使用一个或两个视图来生成,并训练模型生成目标图像。对于边界框或语义图生成等任务,我们将十六进制颜色代码和类标签添加到提示中。例如,要用黄色掩码分割鼠标,提示为:[[semantic2image]] <#FF00 黄色掩码:鼠标>一张照片。
- ID定制(2-4个视图)。我们跨视图对同一个人的图像进行采样,为每个输入图像连接字幕并使用标记 [[[imgX]] 来表示每张图像。我们还将任务标签 [[faceid]]] 添加到标题中。在推理时,我们可以以任意数量的图像为条件并生成多个输出,从而产生更一致的结果。
- 多视图生成(4-12 个视图)。受Cat3D的启发,我们使用Pl̈ucker射线嵌入来表示相机姿势。对于每个图像补丁,我们使用其射线原点o和方向d计算Pl̈ucker坐标asr = (o × d, d)。结果嵌入的维度 H/8×W/8×6,匹配潜在空间大小,并跨通道复制以形成 16 个通道嵌入。与 [18] 不同,我们将光线嵌入视为图像潜在变量的独立“视图”作为一个统一的序列,而不是通过通道连接。这种设计允许灵活的去噪,支持以相机姿势或采样光线嵌入为条件的多视图图像生成,以从图像条件下预测姿势,类似于 RayDiffusion [67]。我们将射线嵌入缩放到具有单位方差,如[47]所示。与其他任务一样,我们将任务标签 [[多视图]] 添加到标题中。在推理过程中,我们可以将图像或Pl̈ucker射线嵌入替换为高斯噪声,分别用于多视图生成和摄像机姿态估计。
训练细节
我们的模型是使用流匹配目标从头开始训练的。与之前的工作类似,我们使用三个阶段的训练配方。在第一阶段,我们以 256(500K 步) 和 512(500K 步) 的分辨率预训练文本到图像模型。在第二阶段,我们继续对混合任务进行训练,T2I 使用 512,其他任务使用 256,总共 1M 步。最后,在最后阶段,我们以 (1024) 的高分辨率对模型进行微调,用于 T2I。对于 ID 定制微调,我们使用 2-5 个视图。对于更少的视图(2-3),我们应用 512 的分辨率,而对于更多视图,我们使用 256 分辨率。
在训练期间,我们在每个阶段使用批量采样策略,以相等的概率对任务(T2I、图像到图像、ID 定制和多视图生成)进行采样。噪声调度器的移位值设置为 3,如SD3中所建议的。我们使用学习率为 η = 0.0005 的 AdamW 优化器。在第一阶段以 256 的全局批量大小为 256 的 TPU v3-256 pod 进行训练,最后的微调阶段使用相同的配置在 64 H100 GPU 上完成。
数据集构建
Text-to-Image 我们利用公共和内部(合成)数据集。公共数据集包括:PixelPenrose [52]、Unsplash、Coyo [6]、JourneyDB [40]。此外,我们使用 10M 内部合成数据集,该数据集由使用 LLAVA-NeXT [31] 和 Molmo [11] 重新描述的图像组成。每个图像的文本描述长度从 100 到 150 个单词不等。当原始提示可用时,我们使用 LLM 生成的标题和原始标题。
图像到图像 对于更简单的任务,如去模糊、修复、从canny边缘生成图像或放大,我们使用合成数据的1M样本子集,并为每个图像应用相关的预处理器来创建输入条件。对于更复杂的任务,我们按照下面概述的过程从 Midjourney、Stable Diffusion [15] 和 Flux-dev 生成的输出创建一个合成数据集:
- 语义图和检测对于每个图像,我们使用 LLAAVA-NeXT 模型来识别实体或主题(例如,人、衬衫、狗、建筑物),每张图像最多有 10 个实体。基于 LlaVA-Next 的这些主题名称,我们使用 SAM 执行语义分割并提取边界框。每个类都从预定义的列表中分配一个随机颜色。该数据集包含 350K 三元组,由语义图、边界框和原始图像组成。
- 深度图我们通过将 DepthAnything-v2 应用于从各种数据集中采样的 500K 图像来生成深度数据集,包括真实图像和合成图像。此外,我们将 Hypersim 数据集 中的 40K 图像与 LLAVA-NeXT 的标题,并将它们合并到训练集中。
- 人体姿势我们收集了一个包含 50K 图像的不同子集,主要是人类进行姿势调节。我们使用YOLOv5检测感兴趣区域的边界框,并应用ViTPose进行位姿估计
ID定制 我们通过从公开可用的图像中从游戏和电影中收集名人和人物的数据集。在过滤以确保每个受试者至少有四个图像并删除NSFW内容后,数据集包括大约60K个受试者,总共130万张图像。我们使用 LLAAVA-NeXT 对这些图像进行字幕。
多视图生成 我们使用DL3DV-10K数据集[29]、Obj厌恶[10]、CO3D[45]。对于 Objverse 数据集,我们利用从 LGM [54] 过滤拆分的 80K 和 Cap3D [38] 提供的标题。在 DL3DV 数据集中,我们从每个场景中采样图像并使用 LLAVA-Next 对其进行标题。对于 CO3D,我们排除了字幕并仅包含文本输入中的任务标记。
实验分
-
Text2Image
文本到图像任务的OneDiffusion的定性结果如图3所示。由于我们的One-Gen数据集的多样性,该模型可以处理各种艺术风格,跨越艺术和逼真的设计。继之前的工作 [15] 之后,我们评估了我们的模型在 GenEval 基准 [20] 上的文本到图像能力。对于每个提示,我们使用具有 100 步的欧拉求解器和 5 的引导尺度生成 4 张图像。 OneDiffusion 的结果以及基线模型的结果如表 1 所示。与类似大小的基线相比,我们的模型表现出强大的性能,尽管在相对较小的数据集上进行训练,但在多任务能力方面表现出色。这一性能很大程度上归功于数据集的多样性和每个样本提供的综合字幕。 -
可控图像生成
文本到图像任务的OneDiffusion的定性结果如图3所示。由于我们的One-Gen数据集的多样性,该模型可以处理各种艺术风格,跨越艺术和逼真的设计。继之前的工作 [15] 之后,我们评估了我们的模型在 GenEval 基准 [20] 上的文本到图像能力。对于每个提示,我们使用具有 100 步的欧拉求解器和 5 的引导尺度生成 4 张图像。 OneDiffusion 的结果以及基线模型的结果如表 1 所示。与类似大小的基线相比,我们的模型表现出强大的性能,尽管在相对较小的数据集上进行训练,但在多任务能力方面表现出色。这一性能很大程度上归功于数据集的多样性和每个样本提供的综合字幕。
-
多视角生成
我们使用 **Google Scanned Object 数据集 [13] 评估我们方法的多视图生成能力。**表 2 显示了我们的方法与最先进的方法(包括 Zero123 [32]、Zero123-XL [12] 和 EscherNet [15])的比较。需要注意的是,这些模型是专门为多视图生成任务设计和训练的。相比之下,我们的模型支持可变数量的条件输入,由于其灵活的去噪框架,即使相机姿势未知,也可以合并额外的条件视图。如表2所示,OneDiffusion
图 5 展示了从单个前视图图像生成多视图的两个定性示例。我们的模型成功地在不同的方位角和仰角之间生成了一致的视图。有关额外的可视化,请参阅附录中的图 10 和 11。由于我们框架的灵活性,我们还可以直接执行文本到多视图,通过“屏蔽”所有图像,并且只输入相机姿势,如附录中的图 12 所示
-
ID 保持
我们进一步评估了 ID 定制任务的 OneDiffusion,该任务涉及使用一个或多个 ID 图像作为个性化生成的输入。为了评估性能,我们使用定性和定量分析与 STOA 方法(包括 InstantID [58]、PuLID [21] 和 PhotoMaker [27])进行了比较。我们的评估超出了标准基准(unsplash-50 [16])来测试 ID 定制任务的泛化,例如不同的表达式、视点甚至非人类图像。图 6 说明了改变面部表情和注视方向(第一行)、改变视点(第二行)和定制非人类 ID(第三行)的示例。
-
深度估计
对于图像理解任务,我们使用标准基准评估我们的模型在单目深度估计上的性能:NYUv2 [51] 和 DIODE [56]。我们在表4中报告了定量结果。定量结果如表4所示,与利用预先训练的文本到图像扩散模型(如Marigold[22])的基线相比,我们的模型获得了具有竞争力的性能。然而,如图 7 所示,我们的模型表现出比 Marigold 等基于扩散的深度估计器更强的鲁棒性。具体来说,它擅长处理开放世界图像,包括绘画、朦胧天气和非常规纹理。为了进一步定性比较,请参见图 15 和图 16。
-
相机姿态估计
我们使用 Google Scanned Object 数据集 [13] 在相机位姿估计上评估我们的模型。对于这项任务,我们使用每个合成对象的六个渲染图像,并通过去噪相应的射线嵌入来估计相机姿势。在RayDiffusion[67]之后,我们应用最小二乘优化来估计相机的中心和旋转。表 5 报告了以 0.3 阈值测量的相机中心精度。
图 8 提供了我们的模型和 RayDiffusion 之间的定性比较。由于训练数据的偏差,RayDiffusion 始终预测上半球的相机姿势,例如 CO3D,它主要具有上半球视图。相比之下,由于我们的大规模训练数据集的多样性,OneDiffusion 实现了更高的准确度并避免这个限制。 -
其他任务
由于直接从原始输出图像中提取掩码、边界框和关键点并不简单,我们在附录图17和图18中分别为COCO数据集上的人体姿态估计和语义分割提供了几个定性结果。由于我们的模型在训练期间不区分条件和图像的任务,因此其在理解任务上的性能作为模型的附加指标。我们将对这方面的进一步探索留给未来的工作。
结论
我们的实验表明,OneDiffusion 在各种任务中取得了令人印象深刻的结果,包括条件 T2I 生成、深度估计、开放词汇语义分割、姿势估计、多视图生成、ID 定制和相机位姿估计。我们相信这项工作提高了扩散模型的能力,提供了一种通用且可扩展的解决方案,可与大型语言模型提供的灵活性相媲美。这代表着朝着开发通用视觉模型迈出的重要一步,该模型可以作为各种应用的主干。
附录
数据分布:
更多的结果查看原文吧
相关文章:

【论文阅读笔记】One Diffusion to Generate Them All
One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper:https://arxiv.org/abs/2411.16318 Code:https://github.com/lehduong/onediffusion Authors࿱…...

SpringCloud和Nacos的基础知识和使用
1.什么是SpringCloud 什么是微服务? 假如我们需要搭建一个网上购物系统,那么我们需要哪些功能呢?商品中心、订单中心和客户中心等。 当业务功能较少时,我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…...

人工智能技术的深度解析与推广【人工智能的应用场景】
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...

md5sum -c
md5sum -c xxx 命令用于验证文件的 MD5 校验和是否匹配。具体来说,-c 选项告诉 md5sum 命令去读取指定文件(通常是一个包含 MD5 校验和的文件),并与实际文件的 MD5 校验和进行比较。 工作原理: 生成校验和文件&#x…...

excel使用笔记
1.工作表1计算工作表2某列的和 假设我们有两个工作表,分别命名为“Sheet1”和“Sheet2”,我们想要求和这两个工作表中A1到A**单元格的数据,可以在任意一个工作表的单元格中输入以下公式: SUM(Sheet1!A1:A10, Sheet2!A1:A10) SUM…...

keepalived+nginx实现web高可用
目录 高可用集群搭建 Keepalived+nginx实现web高可用 一.节点规划 二.基础准备 1.修改主机名 2.关闭防火墙和selinux服务 三.用keepalived配置高可用 1.安装nginx服务 2.修改nginx配置文件 3.启动nginx 4.访问nginx 5.安装keepalived服务 6.编辑配置文件…...

边界层气象:脉动量预报方程展开 | 湍流脉动速度方差预报方程 | 平均湍流动能收支方程推导
写成分量形式 原始式子: ∂ u i ′ ∂ t u ‾ j ∂ u i ′ ∂ x j u j ′ ∂ u ‾ i ∂ x j u j ′ ∂ u i ′ ∂ x j − 1 ρ ‾ ⋅ ∂ p ′ ∂ x i g θ v ′ θ ‾ v δ i 3 f ϵ i j 3 u j ′ v ∂ 2 u i ′ ∂ x j 2 ∂ ( u i ′ u j ′ ‾ ) ∂ x j…...

TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等
在第一章里面已经介绍了关于同星工程的创建和最基础的总线分析,接下来看看怎么使用TS发送报文以及图形化分析数据。 目录 一、使用Graphics分析报文信号/变量(对标CANoe Graphics) 二、使用数值窗口统计信号值/变量 三、使用TS发送报文 3…...

【操作系统】实验七:显示进程列表
实验7 显示进程列表 练习目的:编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息,进一步了解用户空间和内核空间的概念。 7.1 进程 进程是任何多道程序设计的操作系统中的基本概念。为了管理…...

day10 电商系统后台API——接口测试(使用postman)
【没有所谓的运气🍬,只有绝对的努力✊】 目录 实战项目简介: 1、用户管理(8个) 1.1 登录 1.2 获取用户数据列表 1.3 创建用户 1.4 修改用户状态 1.5 根据id查询用户 1.6 修改用户信息 1.7 删除单个用户 1.8 …...

JavaScript ES6+ 语法速通
一、ES6 基础语法 1. let 和 const 声明变量 let:块级作用域,可以重新赋值。const:块级作用域,声明常量,不能重新赋值。 let name Li Hua; name Li Ming; // 可修改const age 21; // age 22; // 报错࿰…...

移动端h5自适应rem适配最佳方案
网页开发中,我们常用的单位有如下几个: px:像素固定,无法适配各分辨率的移动设备em: 该单位受父容器影响,大小为父元素的倍数rem: 因为html根元素大小为16px,所以默认 1rem 16px,rem只受根元素…...

2024年使用 Cython 加速 Python 的一些简单步骤
文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 文章有点长,期望您能坚持看…...

EasyExcel设置表头上面的那种大标题(前端传递来的大标题)
1、首先得先引用easyExcel的版本依赖,我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的实体类,&…...

【Linux网络编程】第十弹---打造初级网络计算器:从协议设计到服务实现
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Protocol.hpp 1.1、Request类 1.1.1、基本结构 1.1.2、构造析构函数 1.1.3、序列化函数 1.1.4、反…...

无限弹窗?无限重启?
Windows开机自启目录: "%USERPROFILE%\AppData\Roaming\Microsoft\windows\StartMenu\Programs\Startup" 基于这个和 start 命令, shutdown 命令, 编写 bat 病毒程序。 无限弹窗 echo start cmd > hack.txt echo %0 >>…...

深入详解人工智能机器学习常见算法中的K-means聚类
目录 引言 1. K-means聚类的基本概念 1.1 K-means聚类的定义 1.2 K-means聚类的核心思想 1.3 K-means聚类的目标函数 2. K-means聚类的核心原理 2.1 初始化 2.2 分配 2.3 更新 2.4 迭代 3. K-means聚类的具体实现 3.1 K-means聚类的算法流程 3.2 K-means聚类的Pyt…...

lc146LRU缓存——模仿LinkedHashMap
146. LRU 缓存 - 力扣(LeetCode) 法1: 调用java现有的LinkedHashMap的方法,但不太理解反正都不需要扩容,super(capacity, 1F, true);不行吗,干嘛还弄个装载因子0.75还中途扩容一次浪费时间。 class LRUC…...

全面深入解析:C语言动态库
引言 动态库(Dynamic Library)是现代软件开发中不可或缺的一部分,它们不仅提高了代码的重用性和维护性,还显著提升了系统的性能和资源利用率。本文将全面探讨C语言中的动态库,从基础概念到高级应用,通过丰…...

运用 SSM 实现垃圾分类系统智能化升级
目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10 …...

LeNet-5:深度学习与卷积神经网络的里程碑
目录 编辑 引言 LeNet-5的结构与原理 输入层 C1层:卷积层 S2层:池化层 C3层:卷积层 S4层:池化层 C5层:卷积层 F6层:全连接层 输出层 LeNet-5的算法基础 LeNet-5的优点 LeNet-5的现代应用 …...

从资产流动分析WIF市场潜力X.game深究其他未知因素
近日,两则关于WIF最新消息引起了投资者们的注意。据报道,11月28日Vintermute在过去13小时内累计从Binance交易所提取了价值533万美元的WIF,此举不仅彰显了其强大的资金实力,更在某种程度上推动了WIF币价的反弹;另一方面…...

深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理
深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理 响应式系统的基本原理 作为一个热门的JavaScript框架,Vue在3.x版本中引入了基于Proxy的响应式系统。这个系统的核心思想是利用Proxy对象拦截对数据的访问和修改,从而实现数据的自动更…...

FPGA实现GTP光口数据回环传输,基于Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案 3、工程详细设计方案工程设计原理框图用户数据发送模块基于GTP高速接口的数据回环传输架构GTP IP 简介GTP 基本结构GTP 发送和接收…...

Linux网络 UDP socket
背景知识 我们知道, IP 地址用来标识互联网中唯一的一台主机, port 用来标识该主机上唯一的一个网络进程,IPPort 就能表示互联网中唯一的一个进程。所以通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp&…...

如何持续优化呼叫中心大模型呼入机器人的性能?
如何持续优化呼叫中心大模型呼入机器人的性能? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 持续优化呼叫中心大模型呼入机器人的性能是一个复杂而细致的过程,它涉及到数据、模型结构…...

鸿蒙项目云捐助第四讲鸿蒙App应用的登陆注册页实现
根据app的操作流程可以知道,当启动页启动后,点击启动页中的页面就进入到了登录页。本讲就是针对于登录注册页的实现,实现的界面参考下图。 这里根据这个素材的参考实现鸿蒙Next云捐助的登录页。 一、鸿蒙Next云捐助登录页的实现 在项目中继…...

Windows本地搭建Redis集群(集群模式)
手打不易,如果转摘,请注明出处! 注明原文:https://blog.csdn.net/q258523454/article/details/144477957 前言 Redis版本:redis 5.0.14.1 Windows版本:Windows10 本文只讲集群模式 1. 安装Redis 1.1 …...

使用FastGPT制做一个AI网站日志分析器
越来越的多网站面临每天上千次的扫描和各类攻击,及时发现攻击IP,并有效的屏蔽不良访问成为网站安全的重要保障,这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器,下面就开始: …...

探索 Echarts 绘图:数据可视化的奇妙之旅
目录 一、Echarts 初印象 二、搭建 Echarts 绘图环境 三、绘制第一个图表:柱状图的诞生 四、图表的美化与定制:让数据更具吸引力 1. 主题切换:一键变换风格 2. 颜色调整:色彩搭配的艺术 3. 标签与提示框:丰富信…...