你打开网购App,滑动着一张模特穿着新款风衣的照片,心里想的却是:这衣服穿我身上什么样?模特身高175,体重90斤,我170,但有肚子。买家秀里的普通人穿得松松垮垮,完全不是模特那种立挺的感觉。于是你幻想:要是AI能像魔镜一样,让我选件衣服就能看到上身效果就好了。

其实这个技术已经存在了多年,名字叫虚拟试穿(Virtual Try-On)。但很多人用过之后都会觉得别扭:衣服变形了,但领口塌了,袖口飞了,褶皱像石头一样硬。为什么这么难?因为AI要做的不是简单的图像合成,而是一个涉及几何变形、纹理映射、光影重绘的难题。
试穿不是贴图:一个问题拆出三个难点
我最早以为虚拟试穿就是把衣服图抠出来,按比例缩放到模特身上。直到我跑了一次VITON算法,看到一件T恤的袖子在人体上扭曲成麻花,才明白这根本不是贴图能解决的。
一件衣服“穿”到人身上,至少要跨过三座山:
- 几何变形:衣服是平面的,人体是立体的。平铺在桌上的衣服,要“盖”到站姿的人身上,每个像素的坐标都要重新计算。
- 遮挡关系:手臂要挡在身体前面,衣服要穿过腋下,领口要贴合颈部。这些遮挡在原始衣服图里根本没有。
- 光影与褶皱:同样的衣服,最皱的地方在肘弯和腰侧。这些褶皱不是图案,是光线打在不同高度的布料上产生的明暗变化。AI必须“无中生有”地生成。
这三个难点,对应着虚拟试穿技术的三条演化路线。
从TPS到GAN:衣服是怎么被“扭”到人身上的
技术上,最早流行过用图论和光流做布料变形,但效果太粗糙。真正的转折点是2018年的VITON论文,它首次把“形变”和“生成”分成两个阶段。先做一个空间变换模块,把衣服扭曲到贴合目标人体,再用一个生成网络补齐遮挡和细节。
我们来看看这个“形变”具体怎么做。传统方法用TPS(薄板样条插值)。概念不复杂:
- 先在衣服图片上定义一个网格,比如7×7个控制点。
- 在目标人体上标出对应位置,比如肩膀、胸、腰。
- 计算一个变换函数,让控制点之间的区域平滑地移动到新位置,就像拉扯一张橡皮膜。
但TPS只能处理整体形变,它不知道衣服的领口应该从哪个角度翻折,不知道袖子在肘部弯曲时应该出现怎样的堆积。于是后来的方法用光流来预测像素级位移,效果更好,但代价是容易出现纹理扭曲(尤其是条纹和格子)。HR-VITON则通过粗到细的生成,把输出分辨率提升到了1024像素,让蕾丝、织标这类细节得以保留。
然后引入GAN生成器。VITON的精髓在于,它使用一个生成网络来“修复”变形后的不自然区域。输入变形后的衣片、目标人体掩码、姿态图,让生成器画出最终穿衣效果。对比原始的贴图方法,VITON在定量指标和视觉质量上都有显著提升。
但GAN有一个死穴:它生成的图像分辨率低,容易产生纹理伪影,而且对不同体型和姿态泛化能力差。一件衣服在模型A身上效果好,换到模型B身上可能就崩了。我跑实验时经常看到生成的袖口边缘有锯齿,像是没有闭合的油漆线条。
扩散模型为什么突然就“真”了
真正的转折发生在2023-2024年,扩散模型(Diffusion Model)接管了这个任务。OOTDiffusion就是这一路线的代表。它没有用GAN那种“一下子生成整张图”的思路,而是采用“从噪声中逐步去噪”的方式。每一步去噪都同时参考目标人体、衣服图像和控制信号,最终得到高分辨率、纹理细腻的结果。
为什么扩散模型适合虚拟试穿?关键原因是它天然擅长生成多样化的纹理和细节。传统GAN生成器容易模式崩溃,而扩散模型在大量数据上训练后,对衣服这种高频细节(如蕾丝、印花、针织纹理)有更强的表达能力。OOTDiffusion的做法是:先把衣服图像“编码”成一个特征向量,在UNet的每个去噪步骤中注入这个特征,让模型时刻“记住”衣服长什么样。同时用姿态骨架(如OpenPose)和人体解析图来控制人的姿态和形状。这样模型生成的图像既保留了衣服的图案,又符合了目标人的体型。
褶皱和阴影:AI没有物理引擎,只有统计先验
但这里有一个关键问题:褶皱和阴影到底是怎么来的?在很多文章的宣传图里,AI生成的褶皱几乎和摄影棚拍摄的效果一样。你可能会以为模型内部有物理布料模拟。但实际它根本没有算物理。它是“猜”的。模型在训练时见过成千上万张穿各种衣服的人体照片,它知道肘弯处通常有放射状褶皱,腰部常常有横向堆积,肩膀因为受光会亮一些,腋下会有阴影。它只是利用这些统计规律,在生成时“脑补”出了最像真实的明暗变化。
这带来一个很反直觉的结论:AI生成的褶皱虽然好看,但不是物理上必然正确的。在某些极端姿态下,比如弯腰或大幅举手,模型可能画出物理上不可能的褶皱,因为它在训练数据里没见过那么大的变形。这也是为什么虚拟试穿功能通常只允许你在标准站姿图片上试衣服,你一旦上传一个举着手的照片,效果就容易崩。
除了单张图片,当前虚拟试穿还有几个公认的局限:
- 衣服背面信息缺失。商品图往往只有正面,AI试穿时无法画出领口内侧或背面图案,只能靠猜测。
- 复杂姿态和遮挡处理差。两件衣服叠加、手插口袋这种动作,容易产生错误的遮挡关系。
- 不同体型适应性弱。训练数据里可能存在体型偏斜,导致胖瘦两个极端表现不好。
我们来看一下虚拟试穿技术路线的对比,可以更好理解为什么扩散模型成了主流:
| 方法 | 形变方式 | 生成方式 | 优点 | 缺点 |
|---|---|---|---|---|
| 传统TPS | 控制点网格插值 | 无(直接贴图) | 简单快速 | 无法处理遮挡和纹理细节 |
| VITON | TPS+光流 | 对抗生成网络 | 端到端可训,效果优于贴图 | 分辨率低,伪影多,姿态泛化差 |
| HR-VITON | 基于分割的形变 | 粗到细的GAN | 高分辨率(1024),保留细节 | 仍受限于GAN生成能力 |
| OOTDiffusion | 显式形变+隐式渲染 | 扩散模型去噪 | 细节真实,风格自然,可控性高 | 计算量大,生成速度慢,物理正确性无保证 |
看到这里你可能会问:那是不是以后我们买衣服都不用看模特图,直接用AI生成一个三维虚拟人试穿?很遗憾,目前还远没到那一步。二维虚拟试穿本质上还是“图像到图像”的翻译,它没有真实的布料模拟,也没有光照模型。对于立体效果要求高的场景,比如婚纱、西装,二维方法还是无法给出可旋转的多角度效果。而真正的三维布料模拟需要物理引擎,AI的角色就变成了辅助生成材质和渲染参数,这完全是另一条技术路线。
最后,作为一名经常跑这些模型的人,我给出一个实用建议:如果你要做虚拟试穿产品,先把姿态控制好,尽量使用标准的正面站姿图片。别指望模型能在无约束姿势下做到完美。要理解AI试穿的本质,不妨把它想象成一个经验丰富但从不照镜子的裁缝——它剪裁过几百万张衣服照片,但从来没见过真实布料,它的褶皱和光影都是凭印象画的,画得很好看,但偶尔会画错。
这就是AI虚拟试穿的核心机制:形变靠几何变换,纹理靠生成模型,褶皱和阴影靠统计先验。它们组合在一起,实现了那个魔术般的“穿上效果”,但也带来了显而易见的能力边界。
为什么AI试穿图有时能看到衣领开口很奇怪?
因为AI没有物理知识,也不理解人体结构的三维深度。它只能根据训练数据中衣领与颈部的相对位置猜测。当用户上传的角度与训练分布不符时,衣领就画歪了。
AI生成的褶皱和真实褶皱有区别吗?
视觉上很难区分,但在极端姿态下你会发现,褶皱的走向可能违背物理原理,比如布料应该因为重力下垂,AI却画成了向上翻卷。
虚拟试穿能帮我看衣服尺码合不合身吗?
目前不能。所有二维方法都是“画”出衣服贴合的效果,而不是根据你真实的三维数据模拟合身程度。要测尺码,还得等三维数字化建模成熟。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/469.html