事情的起因其实非常简单。我想试试 AI 绘画。
我觉得打开网页、输入一句话、等几秒钟就能拿到图片的在线服务固然不错。
但是万一,我让它润色一下我的自拍,它把我的大头照上传了,咋办?
所以我想把绘画模型放在自己的电脑里,让它在本地画画。
至于具体怎么实现,我其实没有特别明确的计划。
我只知道自己已经准备好了一个绘画模型,电脑里也有一套可以运行它的工具。
剩下的事情,我打算交给 AI。
我的要求也不复杂,参考已有的图片,画一张风格相近的新图。画面里有一个橙色系的女孩,只不过原来的女孩是躺着的,我希望她换成趴着的姿势。
就这么一点要求。
我当时甚至已经开始期待成品了。
毕竟,AI 都能写文章、做表格、编程序了,让它帮忙画张画,应该不算什么大事吧?
后来我才知道,自己对「不算什么大事」这几个字,存在相当严重的误解。
#一、画还没开始画,画室先出了问题
如果把 AI 绘画比作请画家作画,那么我手里的这套工具,就相当于一间刚刚装修好的画室。
里面有画笔、颜料、画布,还有一位据说很会画画的画家。
问题是,这间画室还没有真正开张过。
我把要求交给 AI,让它自己安排。
它检查了一下现有的东西,决定先搭建一套最基本的绘画流程。
这个过程有点像给画家安排工作,先拿到参考图片,再理解我的要求,接着动笔,最后把成品保存下来。
听起来很合理,AI 也确实很快完成了准备。
它开始第一次尝试。系统报错了,我还没意识到问题有多麻烦。
毕竟第一次使用新工具,遇到一点小毛病很正常。
AI 检查了一番,发现问题出在一个名字上。
简单来说,它给画室里的某个抽屉贴了一张标签,写着「参考图片一」。
可是画室的管理系统要求,这张标签必须写成「图片区·参考图片一」。
少了前面几个字,管理系统就不认。
这就有点像学校教务处要求提交「高二三班张三」的作业,你只写了「张三」。
人一看就明白是谁,机器却坚持说找不到。
AI 找到了原因,修改了标签。这回成功了。
我以为事情终于走上正轨。结果没过多久,我打开绘画界面,按下运行按钮。
熟悉的错误又出现了。我看着屏幕,陷入沉思。不是刚修好吗?
#二、刚修好的错误,怎么又活过来了?
这次 AI 也没有立刻给出答案。它重新检查了画室,发现了一件很有意思的事情。
原来,这间画室有两扇门。一扇门是 AI 自己使用的,可以直接把任务交给绘画系统。
另一扇门是给人使用的,也就是我眼前那个可以拖动方框、连接线路的绘画界面。
AI 刚才修好的,是第一扇门。第二扇门里,还放着旧版本的任务单。
于是就出现了非常滑稽的一幕,AI 从自己的门进去,一切正常。我从界面进去,同一个错误原封不动地出现。
更麻烦的是,旧任务单还不止一份。
电脑里有两个地方保存着这些绘画流程,其中一处还会在启动时把自己的内容复制到另一处。
这意味着,就算今天修好了,如果没有处理干净,明天重新打开画室,旧错误还有可能回来。
AI 只好把相关的任务单全部检查一遍,统一修改,再确认重新打开时不会恢复旧版本。
这倒是很像生活中的某些场景。比如老师修改了课件,结果上课时打开的还是昨天的版本。
当时那几行报错
1 | |
这个节点的参考图输入是个会自动扩展的槽位,名字从 image_1 排到 image_16。而在 API 报文里,键必须写成带点的路径,
1 | |
扁平写法能过提交校验,死在执行阶段。根因在读得到的那几行源码里,那一层用点号把前缀和槽位名拼起来,所以在它眼里 images.image_1 和 image_1 是两个不同的东西,前者能对上前缀,后者对不上。
改完,命令行通过。
同一个报错,从界面回来。我贴了一份界面上的报错过来,问这是怎么了。一模一样的 TypeError,一模一样的 image_1。
这次的原因不在代码里。工作流存成 JSON 之后,那个槽位是这么一行,
1 | |
#三、我的电脑不大,AI 却想开一家画廊
画室终于可以正常接收任务了。
但还有一个现实问题。我的电脑并不是专门用来训练大型 AI 的昂贵设备。它只有一块显存为 8GB 的显卡。
显存可以简单理解成显卡工作时使用的桌面。
桌面越大,能同时摊开的东西越多。
而我准备的绘画模型,光是主要文件就已经超过了 10GB。
这就像你买回来一套很大的绘画工具,却发现工作台根本摆不下。
好在 AI 并没有直接宣布放弃。
它检查了模型的特点,发现可以采用一种更节省空间的运行方式。
有些暂时用不到的东西,可以先放在电脑的其他地方,需要时再拿出来。
就像画家不必把所有颜料同时摆在桌面上。
经过调整,这套模型居然真的能够在我的电脑上工作。当然,代价是速度。
AI 随后测试了两种不同的画面尺寸。
较小的画面,大约几十秒就能完成一次绘制。
换成更大的画面,等待时间就明显增加,整次任务需要两分多钟。
我这才发现,原来「画得更大」并不是把图片简单放大。
它意味着画家需要处理更多细节,也意味着电脑需要花费更多时间。
不过,对于一个刚开始折腾 AI 绘画的人来说,这已经相当令人满意。
毕竟,最初我还担心电脑根本带不动。现在至少可以确定,这间画室虽然不大,但确实能开张。
#四、别人家的豪华画室,搬过来却不能用
解决了基础问题之后,AI 开始考虑怎样让绘画更方便。
这时候,我找到了一套别人分享的绘画方案。
打开一看,密密麻麻,全是方框和连线。
足足一百多个步骤。
如果说我们刚刚搭好的流程是一间小画室,那么这套东西看起来简直像一家设备齐全的美术工厂。
我自然有点心动。
既然别人已经做好了,直接拿来使用,不就省事了吗?
于是我让 AI 检查一下,这套方案能不能在我的电脑上运行。
AI 起初给出了一个令人振奋的消息,需要的工具似乎都在。
但它没有停在这里,而是继续核对。
结果发现,第一次检查的方法出了问题。
这有点像你去仓库询问,「有没有油画颜料?」
仓库管理员没有回答,只递给你一张盖着「已受理」印章的空白纸。
你却把这张纸当成了「有货」的证明。
AI 第一次检查时,就犯了类似的错误。
它重新核对清单,结果发现,这套豪华方案不仅缺少十几种工具,还缺少一批配套材料。
为了避免误判,它又实际打开绘画界面,尝试运行。
结果也很明确,跑不起来。这套方案并不是简单补几个文件就能使用。
要让它正常工作,还需要解决一整串额外的问题。
AI 最终放弃了直接照搬的计划。
我倒没有觉得特别遗憾。别人用得很好的东西,不一定适合自己。
别人家的厨房有十几种专业设备,不代表你必须把它们全部买回来,才能做出一顿好饭。
既然豪华工厂搬不过来,那就继续经营自己的小画室好了。
#五、我只想改一个地方,AI 却可能重画整张图
接下来,事情终于开始接近我最初的愿望。
我希望 AI 不只是凭文字生成图片,还能参考已有的画面进行修改。
比如,一张画里的人物、背景、衣服和装饰都已经很好了。
我只想改其中一个小地方,其他部分最好保持原样。
这听起来很简单。
但 AI 绘画有一个麻烦的特点,你告诉它「只改这里」,它不一定真的只动这里。
它可能顺手调整背景,改变光线,甚至让人物的其他细节也发生变化。
就像你请一位画家修改人物的帽子。
第二天去取画,却发现他不仅换了帽子,还重新画了衣服,顺便把窗外的天气也改了。
画家可能觉得这样更协调。但我不一定愿意。
AI 为此设计了一套新办法。先在原图上划定一个区域,告诉绘画模型,这里可以重新画。其他地方不要动。
等新内容画好,再把修改后的部分放回原图。
这样,原来不需要修改的部分,就能直接保留下来。
听起来像是给图片做一次精细的修补。
不过,真正实现时又出现了一个意想不到的问题。
AI 发现,用来标记修改区域的东西,如果直接放进原始图片里,绘画模型可能会把它误认为图片本身的一部分。
换句话说,我原本想告诉画家「这里需要修改」。
画家看到的却可能是「这里原来就是空白的」。
两者完全不是一回事。

于是 AI 改变了方案。
它把原始图片和修改范围分开保存。
一份告诉画家原来的画面是什么样。另一份专门告诉它哪里可以修改。再把结果组合起来。
经过测试,这套方法终于跑通。修改范围之外的原图,可以原样保留。
这一次,我们的小画室总算有了一项真正实用的本领,不是每次都重新画一张,而是可以只修改画面中需要改变的地方。
#六、我说参考第二张,它偏偏看上第三张
到这里,我已经开始觉得事情有希望了。
AI 不仅能够绘画,还能够同时参考多张图片。
这正是我需要的功能。
因为很多时候,我们想要的效果并不完整存在于某一张图片中。
可能第一张的人物姿势很好,第二张的服装漂亮,第三张的头饰更符合想象。
如果能把这些特点组合起来,就方便多了。
于是我让 AI 按照第二张参考图进行修改。
结果出来之后,我发现有点不对。
它好像参考了第三张。
我把情况告诉 AI。它重新做了一组对照测试。
先要求使用第二张,再要求使用第三张。
结果非常有趣,两次生成的内容,都明显偏向同一张参考图。
也就是说,AI 并没有可靠地理解我所说的「第二张」「第三张」。
这件事乍看有点不可思议。
毕竟,我们平时看图片时,第一张、第二张、第三张,分得清清楚楚。
但绘画模型理解多张图片的方式,并不一定和人类看相册的方式相同。
AI 于是换了一种表达方法。
不再简单地说,「参考第二张图片的头饰。」
而是改成,「参考那张带有黑色蕾丝和深红色玫瑰装饰的头饰。」
结果这次,它找对了。
同样的参考图片,同样的绘画设置,只是把要求说得更具体,结果就发生了变化。
这件事和日常生活中与人沟通的经验很相似。你告诉学生「把第二段改一下」,对方可能还要数第二段是哪一段。
但如果你说「把描写秋天落叶的那一段改得更生动」,意思就清楚得多。
和 AI 沟通时,具体描述事物的特征,有时比单纯告诉它编号更可靠。
#七、从修改图片,到凭空画出一张图
到这里,画室已经能够完成一件重要的事,拿着已有的图片,根据要求进行修改。
但我最初想折腾的是 AI 绘画。
总不能永远拿着别人的图片改来改去。
我还希望有一天,自己只需要描述一个场景,AI 就能从空白画布开始,把它画出来。
比如,黄昏时分,一间安静的旧书店,窗外正在下雨,暖黄色的灯光落在木质书架上。
没有参考图片。只有文字。能不能画出来?
于是,我们开始搭建另一套绘画流程。
这一次,AI 不再需要先拿到一张图片,而是直接根据文字创建画面。
过程中也遇到了一些限制。
例如,现有工具中适合这套模型的空白画布,只能直接生成正方形。
如果想画成长方形,就没有之前那么方便。
AI 检查了原因,发现并不是随便调整一个数字就能解决。
这套绘画模型对画布的内部格式有自己的要求,不能直接套用其他模型常见的办法。
它没有强行拼凑一套看似能用的方案,而是先按照现有条件完成了正方形画布的绘画流程。
至少现在,画室已经具备两种能力,一种是根据文字,从头画出一张图片。另一种是参考已有图片,对画面进行修改。
对于刚开始尝试本地 AI 绘画的我来说,这已经比最初预想的进展大得多。
#八、最后才发现,画室还会偷偷恢复旧布置
就在我以为事情终于可以结束的时候,又出现了一个小插曲。
我找到了这套绘画模型官方提供的工作流程。
既然是官方版本,自然值得拿来比较一下。
于是我让 AI 检查,我们自己搭建的流程,和官方提供的到底有什么区别?
结果相当令人欣慰。主要步骤、连接方式和关键设置都一致。
不同的地方,主要是示例文字、随机设置,以及保存图片时使用的名称。
也就是说,AI 之前根据说明自己搭建的流程,并没有漏掉重要环节。
这让我放心了不少。不过,检查过程中,AI 又发现了一个容易被忽视的问题。
还记得前面那两份绘画任务单吗?
原来,每次启动画室时,其中一个文件夹里的内容都会被复制到另一个文件夹。
而且,这种复制可能直接覆盖已有内容。
这就意味着,你今天在绘画界面里认真调整了半天,还点击了保存。
明天重新启动,昨天的修改却可能不见了。启动程序又把旧版本搬了回来。
这简直像一间神奇的教室。放学前明明已经重新布置了桌椅。
第二天早上进门,却发现所有桌椅又恢复成了上周的样子。
AI 最后统一整理了两边的文件,让它们保持一致。
多余的版本也进行了清理。
到这里,这间折腾了两天的小画室,才算真正收拾妥当。
#九、两天过去,我终于拥有了一间能用的 AI 画室
回头看看,这两天发生的事情实在有些出乎意料。
我最初只是想让 AI 帮忙画张画。
具体一点,是让参考图片里的女孩换个姿势。
结果,AI 先后忙着修理绘画工具、处理反复出现的错误、研究电脑能不能带动模型、检查别人分享的方案、尝试局部修改、纠正参考图片的识别问题,最后还得防止保存好的成果被旧文件覆盖。
如果把这些过程全部写成技术记录,大概就是一篇充满陌生名词、参数和错误信息的文章。
但站在一个普通使用者的角度,我看到的其实是另一件事。
我提出一个愿望,AI 尝试把它变成现实。
遇到问题时,它需要寻找原因。
发现方案不合适时,它需要重新选择。
第一次判断错了,就得重新检查。
有时候它甚至需要推翻自己刚刚得出的结论。
而我不必从第一天起就理解所有工具的内部原理。
当然,这不意味着 AI 什么都能做对。
恰恰相反,这两天里,它也犯过错误。
它曾经把一次没有得到明确结果的检查当成成功。
它也曾经以为修好了一个问题,结果另一个入口还留着同样的毛病。
有些问题,是直到真正运行起来才暴露的。
所以,我越来越觉得,使用 AI 并不是把一句话交给它,然后闭着眼睛等待奇迹。
更像是和一个知识丰富、行动积极,但偶尔也会犯迷糊的助手一起完成任务。
你需要告诉它自己想要什么。
看到结果不符合预期时,需要指出来。
至于具体该怎么修、怎么试、怎么安排步骤,可以让它承担更多工作。
这可能才是普通人接触这些新工具时,最有意思的地方。
过去,想在自己的电脑上搭建一套 AI 绘画工具,意味着先学习大量陌生知识。
现在,至少可以尝试换一种顺序。
先有一个想法。
让 AI 帮忙寻找实现的方法。
在一次次尝试中,慢慢理解自己正在使用的东西。
不必等到什么都学会了,才允许自己开始。
当然,这次折腾也留下了一个颇为滑稽的事实,我原本是来学画画的,结果前两天几乎都在装修画室。
好消息是,画室终于能用了。
接下来,总该轮到真正画画了吧?
希望如此。
毕竟,我最初想要的那张画,还在等着呢。
评论