研究列表

研究 03 · 计算机视觉 · 虚拟穿戴

虚拟试穿应用,用于为肖像装扮

2021·本科生研究生
公开代码

我实现了 Android 应用与服务器之间的流程:用户选择人物照片和服装后,服务器返回虚拟试衣图像。

  1. 1选择人像照片和服装

    从您的 Android 应用程序向人们发送照片和服装 ID

  2. 2人体解析、姿态、服装遮罩

    以 ACGPN 输入格式组织

  3. 3生成穿着效果图

    Flask 服务器返回到应用程序

ACGPN、人体解析、姿态估计公共模型相结合的集成实现

PyTorchVirtual try-onHuman parsingFlaskAndroid

直接分配的角色和结果

已分配角色
已配置虚拟穿戴模型所需的输入预处理和服装遮罩,并将 Flask 上传 API 与 Kotlin 和 Retrofit Android 客户端连接起来。
成果
我创建了一个集成工作流程,该流程接收人像照片和选定的服装,进行预处理,生成服装搭配图像,并将结果返回给应用程序。生成模型以及姿态和身体解析模型均已复用,而直接实现的部分包括输入配置、掩码处理以及服务器和应用程序之间的连接。

我内部实施和分析的内容

  • 人体解析、姿态、服装遮罩,组织成 ACGPN 输入格式
  • 使用 OpenCV GrabCut 生成服装掩模
  • Flask上传、结果返回API
  • Kotlin、Retrofit Android 客户端连接

基于研究 · 公开模型

  • ACGPN虚拟穿戴模型
  • 人体解析、姿态估计、公共模型

实验结果与试错

已验证从上传到返回佩戴结果的过程,并分析了蒙版错误

公开代码运行 · VITON-HD测试图像(CC BY-NC 4.0) · 人脸马赛克 · 以下时间为CPU实验值

通过服务器上传 API 获取试穿图像时发现,40 件服装中有 13 件的 GrabCut 矩形超出图像范围,导致掩码扩散到背景。

  • Apple M1 Pro CPU
  • PyTorch
  • 公开模型权重
  • 服务器上传API运行
三个穿着前后对比示例。如果您上传原始照片和要穿着的服装,穿着效果图只会显示上衣的变化。面部已被马赛克处理。
以下是用公开模型和服务器代码生成的三个试穿示例。每行左侧是人像,中间是要穿的服装,右侧是服务器返回的图像。人脸已做马赛克处理,使用的是 VITON-HD 测试图像。
  • 13 / 40 套带遮罩的服装与背景混色
  • 0.93 → 0.96修改方框后遮罩 IoU
  • 4.9秒每个请求的 CPU 使用率中位数

问题及解决方案

  1. 问题虚拟穿戴模型不仅需要肖像照片,还需要以特定格式提供的姿势、身体部位和服装区域照片。

    已解决。公开的人体解析和姿态估计模型的输出已调整为 ACGPN 输入格式,并添加了使用 GrabCut 创建服装遮罩的预处理步骤。

  2. 问题对于用户而言,直接处理多个模型的文件输入/输出过程过于复杂。

    已解决。我们配置 Flask 上传 API 来运行预处理和推理并返回结果图像,并将 Android 客户端连接到 Retrofit。

  3. 问题如果背景混入服装蒙版中,生成的服装和躯干可能会模糊不清。

    补充实验在运行公开代码时,我发现 GrabCut 的初始矩形超出了图像边界;在把矩形限制在图像内的对比实验中,掩码 IoU 中位数从 0.929 提高到 0.957。

实验对比及详细结果

四人照片上叠加了姿态骨架(上图),并根据身体部位对身体进行着色(下图)。面部已进行马赛克处理。
已连接公共模型的姿态估计(上图)和人体解析(下图)结果。自定义预处理将此输出配置为虚拟穿戴模型的输入。
使用 VITON-HD 测试图像测量的值 · 192×256 分辨率
项目结果状态
每个请求的处理时间中位数 4.90 秒(四分位数 3.57–6.57 秒)40 个请求,CPU
其中,ACGPN 已生成中位数 2.27 秒相同对象被选中40次
相同服装恢复 SSIM平均值 0.869 · 中位数 0.88420 人
GrabCut掩膜IoU中位数 0.929 → 0.95740 套服装 · 代码原样 → 将矩形转换为图像

已观察到的原因和剩余任务

  1. GrabCut 矩形错误

    矩形 (1, 1, w, h) 超出图像边界,仅在顶部和左侧留下一条背景线索,并且在 40 套服装中的 13 套中,遮罩模糊地融入背景。

  2. 三种故障类型

    如果遮罩与背景混色,躯干部分会模糊;如果袖长发生变化,手臂上会出现残影;如果长度不同,则原始服装图案会保留在下摆下方。

  3. 如何读取SSIM

    与原始值相比,重新穿上相同服装后的值。由于服装外部的输入直接使用,因此得分较高,无法与 ACGPN 纸质值进行比较。

  4. 数据和重量

    VITON 数据受限于分发,因此使用 VITON-HD 测试图像,并发布 ACGPN 和 OpenPose 权重用于非商业研究用途。

读取结果的条件

  • 集成实现,并非图像质量或速度的提升
  • 使用公开权重运行数十张测试图像所得结果
  • 不显示产品级性能或商业运营状态
与最近项目的连接

将不同模块的输入输出匹配并连接成一个整体,类似于当前在服务器上创建的加工计划在 Fusion 中执行的任务。

读取 3D 模型并设计加工策略的 AI