Sean Ren AI 体验产品设计师

输入访问码

这份作品集仅供受邀查看。

跳到​案例​正文

未完成我把​衬衫​留​成了​空白​的​纸。一个​模型​从中​读​出了​一件​衬衫。 代码​用​模型​的​数字​把​它​画出来。

一个​反​思​性​项目:我的​一幅​肖像,以及​两​个​开​源 AI 模型​在​我的​笔记​本​电脑​上​对​它​做了​什么。下面​的​每​个​词、每​个​数字​和​每一​帧​都​来自​这些​运行。

角色
艺术​家
创意​技术​专家
类型
反​思​性​项目
模型
BLIP、SDXL Inpainting
工具
Claude Code、Python、PyTorch、React
运行​环境
本地​设备
渲染
Canvas 2D 实​时​渲染
每​个​数字​是​它​所在​位置​的​明度,0 最​暗,9 最​亮。衬衫​是​模型​的 token ID,以​钴​蓝​显示。把​指针​移到​画​上,或者​按住​它,就​能读​到​它们。

读作

“”

a 90%man 1%the 1%

寻找​衬衫​时​看​的​地方

领口,以及下面的空白纸面

“white”的​概率​为 62%,接着“shirt”为 88%。我​从​没​画​过​衬衫。

织​自

320308653932078653032015792523131253651815061

图像​模型​运行​时​用​的 13 个 token ID,以​钴​蓝​显示。

概​览

我画画,也设计 AI 产品。
这一次,模型帮我画完自己的画。

设计​问题
在​我​自己​的​画​里,模型​的​帮助​应该​止于​哪里,它的​那​一部分​又​该​怎样​显露出来?
模型
图像​描述​模型 BLIP 读​这​幅​画,Stable Diffusion XL 局部​重​绘​起草​衬衫。画​作​一直​留在​我的​笔记​本​电脑​上。
约束
模型​的​部分​以​它​自己​的​材​质​呈现:钴​蓝色​的​数字,覆盖​在​我​未​动​过的​颜料​之上。
研究
Justin Jay Wang 用代码做的图形,每幅图都是一套由系统行为构建的规则;Better Images of AI,关于如实呈现机器;Grad-CAM,关于模型看向哪里;以及 Model Studies,我的第一个研究,在那里我用玩具模型画了同样的机制。

绘画

在​任何​模型​之前:笔触、明度​和​一套​色​板。

这​是​我​作为​画家​读​同一​幅​画​的​方式。每一​笔​都​重​画​成​一行​属于​它​自己​的​明度​数字,0 最​暗,9 最​亮,用​构成​这​幅​画​的​八​种​颜色,从​最​暗​的​画​起,就像​我​起稿​一幅​肖像​那样。

明度,0 最​暗,9 最​亮

我的​色​板,从​颜料​中​取样​的​八​种​颜色

钴蓝,机器的颜色:在我的色板之外,在色轮上与色板里的赭石色相对。

解读

它​一个​词​一个​词​地​读​这​幅​画。

BLIP 从“a painting of”开始,从一张排好序的列表里选下一个词。它选了 21% 的“in”,而不是 23% 的“with”,又选了 9% 的“looking”。接着它以 82% 的概率给一幅画安上了一台相机(camera)。在动笔之前,我换上了它自己的第二选择:5% 的“viewer”(观者)。

  1. a painting of给​它的​开头
  2. a
    • a90%
    • man1%
    • the1%
    • an1%
    • young<1%
  3. man
    • man60%
    • young13%
    • painting4%
    • portrait3%
    • close2%
  4. in
    • with23%
    • in21%
    • is8%
    • wearing7%
    • looking5%
  5. a
    • a67%
    • white18%
    • an1%
    • front1%
    • yellow1%
  6. white
    • white62%
    • shirt10%
    • yellow3%
    • polo2%
    • baseball1%
  7. shirt
    • shirt88%
    • sweater1%
    • polo1%
    • collar1%
    • t1%
  8. looking
    • is13%
    • and9%
    • looking9%
    • with8%
    • looks7%
  9. at
    • at21%
    • to10%
    • off7%
    • into7%
    • away5%
  10. the
    • the68%
    • something16%
    • a5%
    • camera2%
    • his1%
  11. viewer我的​修改
    • camera82%
    • viewer5%
    • side1%
    • right1%
    • left<1%

它​本​可能​写​出​的​解读

  • a young man wearing a white shirt and a brown hat
  • a man with a baseball bat in his hands
  • a man in a white shirt stares off into the distance

温度 0.6。 比​它​自己​的​概率​更“冷”:它​会​贴近​最初​的​选择,解读​也就​保持​合理。 它​抽出​的 8 个​解读​中的​三​个;碰巧​点了​人名​的,我​都没​放。

注视

它​写下“shirt”时,看​的是​空白​的​纸。

它的​视觉​部分​把​画​切成 576 个​图​块。对​每​个​词,方​块​标​出​那些​因​注意力​而​提高​了​这个​词​概率​的​图​块。“Man”找到​了​脸,而​它​说的“camera”,其实是​他的​眼睛。

我的​肖像,标​出​图像​描述​模型​为“shirt”看​过的​图​块

为了“shirt”,它​看了​领​口​和​下面​的​空白​纸​面。我​从​没​在​那里​画​过​衬衫。

576 个​图​块,24 × 24。方​块​的​大小,表示​这个​图​块​的​注意力​把“shirt”的​概率​提高​了​多少;它​给“{word}”的​概率​是 88%。

为什么​是​白​衬衫

它​用​通常​出现​在​那里​的​东西​填满​空白​的​纸,用​的是​纸​的​颜色。

为了​弄清​原因,我​每次​只​改​一​处,再​用​同样​的​开头​去​问​同​一个​模型。每次​测试​都​显示​它​看到​的​画面、它​读​出​的​内容,以及“a man in a”之后​每​个​词​的​可能性。

  1. 按​我​画​的​样子:给​模型​的​图。按​我​画​的​样子“a man in a white shirt looking at the camera”white 62%
  2. 纸​面​填​成​黑色:给​模型​的​图。纸​面​填​成​黑色“a man in a black shirt and tie”black 53%white 1%
  3. 纸​面​填​成​蓝色:给​模型​的​图。纸​面​填​成​蓝色“a man in a blue shirt looking at the camera”blue 85%white <1%
  4. 纸​面​填​成​黄色:给​模型​的​图。纸​面​填​成​黄色“a man in a yellow shirt looking at the camera”yellow 83%white 3%
  5. 只留​头部,裁​掉​纸​面:给​模型​的​图。只留​头部,裁​掉​纸​面“a man in a suit and tie in front of a painting”suit 11%white 9%
  6. 没有​图,只有​平​涂​的​灰色:给​模型​的​图。没有​图,只有​平​涂​的​灰色“a man riding a surfboard on top of a wave”suit 11%white 5%
颜色​来自​纸​面。
把​纸​面​填​成​黑、蓝​或​黄,衬衫​就​变成​黑、蓝​或​黄:53%、85% 和 83%。我的​纸​拍​出来​是​暖​奶油​色,但​作为​画​里​最​浅​的​东西,它​被​读​成了​白色,62% 对​黄色​的 3%。
脸​的​下面,它​预期​是​衣服。
无论​纸​面​是​什么​颜色,后面​那个​词​都是“shirt”,51% 到 88%。把​纸​面​裁​掉,它​还是​给​他​穿上​了​衣服:西装​和​领带。
不只是​词语​的​作用。
没有​图​时,“a man in a”后​面接“white”的​概率​只有 5%。那 62% 来自​看​那​张​纸。
它​没有​表示“未完成”的​词。
从“an unfinished painting of”开始,它​仍然​写​出“a young man in a white shirt”。它​读​不出​空白​纸​面​就是​空白。

所以​这个​工具​会​在​动​笔​之前,先​显示​它的​读法,以及​它​差点​选​中的​词。

数字

图像​模型​拿到​的是​数字,不是​词。

它​自己​的​分词​器​把​每​个​词​拆​成​从​训练​文本​里​学​到​的​片段,再​换​成 ID。这 13 个​数字,就是​它​看到​的​全部​解读,也是​衬衫​将要​织​成​的​数字。

  1. 字母shirt</w>
  2. 第 41 次​合并shirt</w>
  3. 第 71 次​合并shirt</w>
  4. 第 1,445 次​合并shirt</w>
  5. 第 2,012 次​合并shirt</w>
  6. Token ID2523

CLIP 的分词器从字母开始,不断合并它最早学到的那一对,直到“shirt”成为它认识的一个片段。名次是这一对在它从训练文本学到的 48,894 次合并中的位置;</w> 表示一个词的结尾。图像​描述​模型​在​自己​的​词表​里​把​同​一个​词​记​作 3797:两​个​模型​并不​共用​数字。

草稿

它​从​噪声​里​起草​衬衫,先​画​大​形。

它拿到这 13 个 ID,以及遮住空白纸面的画。在 29 步里,它不断猜测完成后的画面,先粗后细。我把它的草稿只当草稿:它决定褶皱和阴影的位置,但它的颜料一点也不会落到画布上。

图像​模型​起草​衬衫,第 1/29 步
步 1 / 29

提示词,来自它自己的解读:a man in a white shirt looking at the viewer。每一帧都是它在那一步对完成画面的猜测。轮廓之外,画保持我留下的样子。

它​做的​每​一份​草稿,每​个​种子​一份

衬衫​的​另​一份​草稿衬衫​的​另​一份​草稿

代码

代码​用​这些​数字​织出​衬衫。

在​我的​画、模型​的​草稿​和​代码​之间​切换,并​拖​动​查看​每​一步。

衬衫由图像模型收到的 13 个 token ID 织成。草稿里越暗,数字就越粗重;模型在哪一步确定了某个位置,那里的数字就在哪一步落下。我起稿的线条始终在最上层。

320308653932078653032015792523131253651815061

反​思

它​如何​改变​了​我​设计 AI 工具​的​方式。

在​自己​的​画​上​做​这​件​事,让​这些​问题​变得​很​容易​感受到,我在​产品​工作​里​也​不断​回到​它们。

可​检​视​的​推理
模型依据的是它读出来的词,而不是我的意图。它给我的画加了一台相机;因为它的解读就摆在我面前,我才能在它动笔之前换成“观者”。Relay 把你的话读回给你、再交给智能体,也是同样的道理。
保留​作者​痕迹
代码​层​放在​我的​线​稿​下面。AI 的​部分​应该​围绕​作者​的​创作​展开,而不是​把​它​盖掉。
可见​的​来源
一种不可能被当成颜料的材料,准确显示出机器工作过的地方。Merlin 也一样:蓝色是它的提议,墨色是人的决定。
最终​由​人​决定
它的画面不是最终的画面:最后一层是我可以检视的独立选择。在 To-Dear 里,Kai 的建议在你同意之前都只是建议。

每幅图如何一步步做出来,以及所有来源,都在完整版里。