微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 给设计师配一把"任意色号"的画笔:Paint-Anything如何让AI精准听懂十六进制颜色

给设计师配一把"任意色号"的画笔:Paint-Anything如何让AI精准听懂十六进制颜色

2026-10-05 09:37
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-10-05 09:37 • 科技行者

你有没有遇到过这种情况:跟AI说"给我画一件蓝色的衬衫",结果出来的蓝色和你脑子里想的完全不是一回事。

这不是AI在偷懒,而是"蓝色"这两个字本身就模糊得离谱。天蓝、藏青、宝蓝、雾霾蓝,全都能被塞进"蓝色"这个筐里。可现实中的设计工作根本容不下这种模糊。一个品牌设计师要的是品牌VI里那个精确到#1A73E8的标志蓝,一个电商美工要的是新款连衣裙上市图里那个和实物色卡分毫不差的红。这时候你不能说"要红色",你必须能说出那串24位的十六进制代码,比如#B22222。

字节跳动Seed团队的这篇论文,正是盯上了这个被长期忽视的痛点。他们做的事情说起来很朴素:让AI生成图片和编辑图片时,都能精确响应你给出的任意十六进制色号。这个能力被他们称为"任意色彩控制"。听起来是个小需求,但要真正做到,涉及的技术细节比想象中复杂得多。

颜色控制这件事,为什么一直没做好

在这篇论文之前,业内其实已经尝试过不少办法来控制AI生成图像的颜色。

有的研究给模型加一个专门的"颜色理解模块",让模型学一套额外的颜色编码方式;也有的走"训练时不动手,推理时动手脚"的路子,通过调整生成过程中的注意力权重或者采样引导来间接影响颜色。这些方法各有各的问题:有的很难扩展到没见过的新颜色,有的换个模型架构就要重新设计,有的推理速度慢得让人抓狂。

**结果就是,任意色彩生成、图像编辑、黑白图上色,这三件本该相通的事情,被当成了三个互不相干的独立问题来分别攻克。**

这就好比你想学开车,结果发现市面上没有一辆通用汽车,你得为倒车买一辆专用倒车车,为直行买一辆专用直行车,为转弯再买一辆专用转弯车。每种车都造得很精致,但没人想过要造一辆能同时干这三件事的普通汽车。

论文团队的洞察很关键:既然大语言模型已经能理解十六进制颜色代码背后的语义了,为什么不干脆把颜色需求直接写进文字提示词里,让模型像理解"猫"和"狗"这些普通词汇一样去理解"#F0FFF1"这样的颜色代码?

为了验证这个想法靠不靠谱,研究者做了个很简单的小实验:拿一个只有40亿参数的小模型Qwen3-4B去问它"#F0FFF1是什么颜色",结果这个小模型准确地描述出这是一种"浅淡的、近乎透明的浅绿白色"。再问它"#E8D00A",它说这是"一种黄色,类似金色但更暗淡,偏橙调"。

大语言模型:Qwen3-4B是通义千问系列中一个参数量较小(40亿参数)的语言模型,主要用于验证十六进制颜色代码能否被现代语言模型正确理解为颜色语义的实验对照。

这个发现让整件事有了新的可能性:既然语言模型天生就能读懂十六进制代码,那我们完全可以把颜色规范直接塞进文字提示里,用一套统一的"文字接口"同时服务生成和编辑两种任务,不需要另外造一套复杂的颜色控制系统。

Paint-Anything的核心设计:把颜色装进尖括号里

Paint-Anything给出的解决方案,说穿了就是一个看起来极其简单的语法约定:把每一个十六进制颜色值用<color>和</color>标签包起来,直接写进提示词里。

比如你想要一辆蓝色的车,提示词就写成"a photo of a <color>#CFEFFB</color> colored car";想把包的颜色改成米黄色,就说"change the bag to <color>#FFF8C4</color>"。

这个设计的巧妙之处在于,它不需要给模型加任何新的网络结构,文本编码器保持不变,训练时只是让模型在这种带标签的语法环境里,学会把这串十六进制字符和真实的像素颜色对应起来。

**这种"显式颜色标签包裹"的做法,在实验中确实带来了实打实的提升。**

如果不用尖括号包裹颜色代码,模型在ACBench-T2I上的分数只有44.06分;加上包裹之后,分数直接跳到57.16分。这就像给一份密密麻麻的文件里的关键条款画上重点符号,读的人一眼就知道"这里是关键信息,要认真对待",而不是把它淹没在一长串普通文字里让模型自己去猜哪个词才是需要精确对应的颜色值。

不过光靠语法标记还不够,因为真正难啃的骨头在于:模型要从哪里学到"#CFEFFB"到底对应着屏幕上哪个具体的像素值?

数据从哪里来:Paint-500K的构建过程

要教会模型颜色,首先得有靠谱的训练数据。这里出现了论文里第一个真正棘手的技术难题。

现实世界的照片里,同一个物体的颜色从来都不是单一均匀的。想象一件红色毛衣,阳光照到的地方偏亮红,阴影里的褶皱又偏暗红,衣服边缘反光的地方可能还泛白。如果你想给这件毛衣打上一个"这是什么颜色"的标签,选哪个像素点作为代表,结果可能天差地别。

论文管这个现象叫"阴影导致真实图像标签只能是近似颜色",这个描述听起来平淡,但背后其实是整个数据标注环节最容易翻车的地方。

传统做法通常在RGB空间里用K-means聚类算法给像素分堆,但这带来两个问题:一是RGB空间的距离和人眼真实感知到的颜色差异不是一回事,可能把肉眼看起来很像的两种颜色硬生生分开,也可能把明显不同的颜色错误地归到一堆;二是不同物体天然具有的主色数量是不固定的,你非要设定一个固定的聚类数K,结果要么把简单的物体过度切碎成一堆冗余标签,要么把复杂的物体强行压缩成一种颜色。

CIELAB色彩空间:一种更符合人类视觉感知规律的颜色表示方式,不同于RGB按硬件成像原理设计,CIELAB空间里两个颜色之间的数值距离更接近人眼实际感受到的差异程度。

MeanShift聚类:一种不需要事先指定簇数量的聚类算法,能根据数据本身的分布密度自动决定应该分成几类,这正好解决了固定K值带来的僵化问题。

论文团队的做法是,先把像素颜色转换到CIELAB空间,再用MeanShift算法自适应地聚类,让聚类的数量跟着每个物体实际的颜色复杂度走。论文里给出了一个直观的对比:同样是给一小块皮肤区域做颜色聚类,固定K=3或K=5的K-means会把这块本该完整的肤色区域切成好几个碎片,而MeanShift算法能给出一个更连贯、更符合直觉的主色区域。

这就像有个整理师帮你收拾衣柜,如果他非要按照固定的三个或五个箱子来分类,你那些介于两种颜色之间的衣服就会被生硬地塞进某一个箱子,结果分类结果七零八落。而一个懂得根据你衣服实际颜色分布来灵活调整箱子数量的整理师,才能给出真正合理的分类。

有了合理的颜色提取方法,接下来的问题是怎么把颜色和具体物体、具体文字描述绑定起来。团队搭建了一整套自动化流水线:先用视觉语言模型(VLM)从图片说明文字里找出值得关注的物体,再用叫做SAM3的分割模型精确抠出这些物体的像素区域,然后在CIELAB空间里做颜色聚类提取主色,最后再让VLM把提取出的颜色代码写回到原本的文字描述里,变成"a <color>#6998A2</color> sky"这样的句子。

视觉语言模型(VLM):一种能同时理解图片和文字的AI模型,在这套流水线里承担了"在照片里找出哪些物体值得标注颜色"和"把颜色代码自然地写进句子"这两项任务。

SAM3:Meta开发的图像分割模型的最新版本,能够根据文字描述精确框出并分割出图片中对应的物体区域,是整套颜色提取流程里负责"精确圈出物体轮廓"的关键工具。

整个流水线不光过滤掉了低质量的颜色标注(比如聚类结果覆盖不到物体总像素15%的会被丢弃,整体保留覆盖率不到90%的实例整个作废),还额外生产出了编辑任务需要的数据:先用一个编辑模型把某张照片里的物体改成另一种颜色作为"编辑前"的源图,再拿原始照片当作"编辑后"的目标图,配上一句"把这个物体改成某某色号"的指令,这样模型就能学会怎么根据指令做颜色编辑,而且目标图片本身来自真实照片,没有生成模型带来的伪影问题。

最终团队用这套流水线攒出了整整50万条训练样本,构成了论文里叫做Paint-500K的数据集:40万条文字生成数据(其中10万条是单物体特写,30万条是多物体组合场景),10万条编辑数据。

纯色锚点:给模型一个绝对靠谱的参照物

真实照片标注出来的颜色终究只是"近似值",这个短板论文团队心知肚明。为了弥补这个先天缺陷,他们引入了一个听起来很朴素但效果拔群的补丁:纯色锚点样本。

做法很简单:随机采样一批24位RGB数值,把每个数值直接渲染成一整张纯色图片,配上对应的"<color>#十六进制</color>"提示词,让模型去学习"这个颜色代码" 就应该对应"这整张图的像素值"这种毫无歧义的精确映射。

这就好比教小孩认颜色,你不能只靠给他看一件带阴影和反光的红苹果照片,因为苹果上深浅不一的红色会让孩子搞不清楚到底哪个红才是"标准红"。但如果你直接拿出一张纯粹涂满同一种红色颜料的卡片,告诉他"这就是红色",孩子马上就能建立起最精确的对应关系。

不过这里出现了一个很微妙的技术抉择:如果纯色锚点样本和真实照片样本混在一起,不分场合地训练,会发生什么?

论文的消融实验给出了答案:不加时间步门控地引入纯色锚点,虽然生成任务的分数从57.16涨到了63.83,但编辑任务的分数反而从73.89掉到了70.39。

这个现象背后的道理其实和图像生成的去噪过程有关。生成模型是从一堆随机噪声开始,逐步去噪还原出最终图像的,这个过程可以用一个连续的"时间步"来刻画,数值范围从0到1,1代表完全是噪声,0代表完全清晰的图像。研究团队做了个细致的可视化实验(论文里的图9),观察纯色图像生成轨迹中,颜色究竟是在哪个阶段"定型"的,结果发现:早在时间步还在0.8左右、图像整体还看起来是一团噪声的时候,模型对最终颜色的预测就已经基本稳定下来了。

这意味着颜色这种"全局的、粗粒度的"信息,在去噪过程的早期高噪声阶段就已经决定好了,而后面越来越低噪声的阶段,模型主要在雕琢物体的形状、纹理、细节这些"局部精细"的信息。

时间步(timestep):描述图像生成过程中噪声程度的一个数值指标,数值为1代表纯噪声,数值为0代表最终清晰图像,扩散和流匹配类生成模型都是沿着这条从噪声到清晰图像的路径逐步去噪的。

基于这个观察,团队做了一个"高噪声门控"的设计:纯色锚点样本只在时间步落在0.8到1.0这个高噪声区间时参与训练,真实图像的生成和编辑训练照常覆盖整个0到1区间。

这个设计带来的效果非常明显:加上门控之后,生成任务的分数从63.83涨到68.58,编辑任务的分数从70.39涨到75.57,两边都提升了,而且门控阈值在0.7、0.8、0.9几个不同取值下表现都比较稳定,团队最终选定了0.8这个值。

**如果不做这个时间步的区分对待,模型会把纯色图片这种极端简化的样本,和需要处理复杂物体形状、光影、纹理的真实编辑任务混为一谈,结果在编辑任务上"用力过猛",反而把原本该保留的场景细节给带偏了。**

这就像教一个学徒工同时学习"调色"和"精细雕刻"两门手艺。如果你让他在雕刻最需要专注细节的阶段还分心去练习纯色调配的基本功,反而会干扰到他手上正在做的精细活。但如果你安排他只在准备阶段、还没正式动刀之前专门练色彩,正式雕刻阶段就让他心无旁骛地处理细节,两门手艺都能练得更扎实。

怎么衡量模型是不是真的"听懂"了颜色

光有方法还不够,得有靠谱的尺子来量。论文团队专门搭建了一套新的评测体系,叫做Any Color Benchmark,简称ACBench,分成两个子集:ACBench-T2I用来测生成任务,ACBench-Edit用来测编辑任务。

ACBench-T2I包含1000条生成提示词,其中500条是单物体单颜色的简单任务(比如"给我一辆#CFEFFB颜色的车"),另外500条是双物体各配一个不同颜色的组合任务(比如"一只#FFF8C4颜色的狗和一把#CFEFFB颜色的椅子")。ACBench-Edit则包含500条真实图片的重新上色任务。

评测的核心逻辑是:先用SAM3把生成或编辑出来的图片里对应的目标物体区域精确抠出来,计算这块区域里所有像素的平均RGB值,再和目标要求的十六进制色号做逐通道比较,算出平均绝对误差(简称MAE)。这个误差再通过一个分段线性函数转换成0到100的分数:误差在16以内给满分,误差超过64直接给0分,中间区域按比例线性扣分。

平均绝对误差(MAE):这里指生成图像中物体的实测平均颜色,与目标十六进制色号在红绿蓝三个通道上分别求差取绝对值后的平均数,数值越小说明颜色越准。

结果确实让人意外。表格里的数据显示,同样是FLUX.2系列模型,参数量越大理论上应该越强,但没经过颜色专门训练的56B参数FLUX.2-dev,在ACBench-T2I上的得分是51.70分,而经过Paint-Anything方案训练的仅有8B总参数的FLUX.2-4B模型,得分是68.58分,直接把这个体量是自己七倍的大模型甩开了16.88分。

这里插一句我自己的感受:一般直觉都是"参数越多越强",可这次的结果告诉我们,颜色精度这种能力和模型规模关系不大,它更依赖你有没有专门设计过针对性的训练数据和训练策略。这多少提醒我们,AI能力的提升路径不是只有"堆参数"这一条。

再看CompColor这个独立第三方基准,它原本是用"paleturquoise"这种颜色名字来测试模型能不能同时给两个物体分别绑定不同颜色,论文团队额外设计了一个"十六进制转换"版本,把颜色名字统统换成对应的十六进制代码,结果发现原始的FLUX.2-4B模型一旦看到十六进制代码而不是熟悉的颜色单词,分数直接从0.72暴跌到0.38,几乎腰斩。而经过Paint-Anything训练之后,十六进制版本的分数不仅回升,还反超了原来用颜色名字时的分数,达到0.79,甚至比训练前用颜色名字时的0.72还要高。

这个细节很值得琢磨。它说明原始模型其实"认识"颜色名字背后的语义,但一换成数字代码就抓瞎了,这恰恰印证了论文最初的判断:十六进制颜色代码需要专门的对应训练才能被模型真正吃透,而这种训练不仅没有损害模型原有的颜色理解能力,反而把两种表达方式都打通了。

论文还专门做了个实验来验证编辑能力在颜色跨度很大的场景下是否依然可靠。团队按照源物体颜色和目标颜色之间的色彩距离(用专业的CIEDE2000指标衡量),把编辑样本切成四个由近到远的区间,还单独挑出色相相差超过120度的"近似互补色"极端场景。结果显示,Paint-Anything在所有区间都保持了不错的分数,而且越是颜色跨度大的场景,反而表现得越突出:在跨度最大的那组,Paint-Anything拿到88.9分,基础模型FLUX.2-4B只有56.3分;在近似互补色场景下,差距更悬殊,86.9分对50.8分。

这个反直觉的结果解释起来其实不难:颜色跨度小的编辑任务(比如把浅蓝改成天蓝)本身就比较容易蒙混过关,因为改变幅度小,模型即使理解得不够精确也能凑合。而颜色跨度极大的编辑任务(比如把黄色改成深紫色)对模型的颜色理解精度要求极高,这时候训练充分与否的差距就会被彻底放大。

从消融实验看每个设计决策到底值多少分

论文里的消融实验部分是我个人觉得最扎实的一块,因为它把每个技术决策单独拎出来称重量,而不是笼统地说"我们的方法更好"。

第一个决策是全量微调还是用轻量级的LoRA微调。结果很清楚:在完全相同的训练配方、相同学习率、相同训练步数下,全量微调在生成任务上拿到68.58分,LoRA只有48.45分;编辑任务上全量微调75.57分,LoRA只有58.71分;CompColor上全量微调0.79分,LoRA只有0.54分。差距相当大。

LoRA(低秩适应):一种参数高效的模型微调技术,只训练模型里一小部分新增的低秩矩阵参数,而不改动模型主体的绝大部分权重,通常能省下大量算力,但表达能力也会受限。

这个结果其实符合直觉:颜色精确控制这种要求高保真度的能力,需要模型在更大的参数空间里做出细致调整,用一个受限的低秩子空间去逼近,天然就会打折扣。

第二个决策是颜色标签包裹(也就是前面提到的尖括号语法)加不加,加了之后从44.06分(裸露十六进制字符串)提升到57.16分,效果显著。

第三个决策是加不加纯色锚点,前面已经详细讲过。

第四个决策是加不加时间步门控,也已经详细讲过。

把这四个决策叠加在一起,最终配方(全量微调加标签包裹加纯色锚点加高噪声门控)在生成、编辑、组合绑定三项指标上全部拿到最高分:68.58、75.57、0.79。缺任何一环,成绩都会打折扣。这说明这不是靠单一秘诀取胜,而是几个环环相扣的设计共同作用的结果。

论文还专门做了一系列稳健性检查,来证明ACBench这套评测体系本身是靠谱的,不是凑巧算出来的好看数字。他们换了五种不同的区域颜色统计方式(平均RGB、MeanShift主色、中位数RGB、中位数Lab、主导Lab聚类),结果发现无论用哪种统计口径,Paint-Anything领先基础模型的排名都没有变化,领先幅度也都保持在0.25到0.35分(0到1量表)左右的稳定区间。他们还把物体分割用的SAM3检测阈值从0.1一路调到0.9,领先优势始终存在。

除此之外,团队还找了15位参与者做了一场真人偏好实验:给他们看目标颜色色卡,再给他们看Paint-Anything和基础模型生成的两张匿名图片,让他们选哪张更接近目标颜色。总共1200次判断里,Paint-Anything被偏好的比例是55%,打平的是32%,落败的是13%,如果只算有明确偏好没打平的情况,Paint-Anything的胜率高达80.9%。

这些交叉验证放在一起,让人比较信服这次的提升不是评测方法本身的巧合,而是模型确实学到了更精准的颜色控制能力。

这个方案给整个行业带来了什么

回过头看,Paint-Anything真正有意思的地方,不在于它用了多复杂的新模块,恰恰相反,它证明了一件事:有时候解决问题最有效的办法,不是给模型加一个全新的大脑区域,而是想办法把已有能力(大语言模型天生理解十六进制颜色语义的能力)和已有架构(现成的文生图扩散模型)用恰当的数据和恰当的训练技巧连起来。

这条思路和这两年大模型领域一个越来越明显的趋势是呼应的:与其造一个专门针对某个狭窄任务的定制系统,不如想办法把新能力"塞进"已有的通用语言接口里,让一套提示词语法同时服务多个任务。论文里反复强调的"统一提示接口覆盖生成和编辑",其实就是这个思路的具体落地。

论文本身也坦诚地提到了局限:目前的训练数据里还没有涵盖"调色板级别"的监督,也就是说,如果用户想要的不是单个物体的一个颜色,而是整张图片按某种既定的多色调色板来渲染,这套方法目前还没有针对性地覆盖到。这算是留给后续研究的一块空地。

写在后面

读这篇论文的过程中,最触动我的其实不是最终的分数提升有多高,而是那个用小模型Qwen3-4B验证"AI能不能读懂十六进制颜色"的小实验。这个实验本身极其简单,几乎不需要任何计算资源,但它精准地回答了一个决定整个研究方向是否可行的关键问题:如果连基础的语言模型都读不懂颜色代码的语义,后面所有基于这个假设搭建的训练流程都会是空中楼阁。

这让我想到很多研究工作真正的分水岭,往往不在于最后那个复杂的系统有多精巧,而在于研究者一开始有没有找准那个最便宜、最快能验证的关键假设。花几分钟问一个小模型几个问题,可能比直接投入几十万条数据训练一个大模型更早地告诉你这条路走不走得通。

另一个让我反复琢磨的细节,是纯色锚点训练时那个高噪声门控的设计。它背后其实揭示了一个更普遍的规律:图像生成里,不同层次的信息(全局颜色、整体结构、局部纹理)是在去噪过程的不同阶段依次"浮现"出来的。这个规律不只对颜色控制有用,如果换成别的属性,比如材质、光照方向、构图布局,是不是也存在类似的"信息浮现时间表"?如果真的存在,未来是不是能针对每种属性都设计专属的、更细粒度的时间步调度策略,而不是笼统地把整个0到1区间当作一个均匀的训练空间?

这个问题,论文没有回答,但它留下的这个思路,值得往下想。

Q&A

Q1:Paint-Anything是什么?

A:Paint-Anything是字节跳动Seed团队提出的一种统一的颜色控制方案,能让AI在图像生成和图像编辑时都精确响应用户指定的24位十六进制颜色代码,比如#F0FFF1这样具体的色号,而不只是模糊的颜色名称。

Q2:Paint-Anything为什么能用比基础模型小得多的参数量做到更好的颜色控制?

A:因为它不靠堆参数取胜,而是通过构建Paint-500K数据集和纯色锚点等专门的训练技巧,让模型学会精确对应十六进制代码和真实像素颜色的关系,8B参数的模型在ACBench-T2I上就超过了56B参数的FLUX.2-dev基础模型。

Q3:纯色锚点和时间步门控具体是怎么起作用的?

A:纯色锚点是把随机的十六进制颜色值渲染成整张纯色图片配上对应文字提示,给模型一个绝对精确的颜色参照。时间步门控则规定这些纯色样本只在生成过程的高噪声阶段(0.8到1.0)参与训练,避免干扰模型在低噪声阶段处理真实图像细节的能力,这样处理后生成和编辑任务的分数都有明显提升。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-