我自己的原文哦~ https://blog.51cto.com/whaosoft/13252266
#Hawkeye
又搬来了一个神器~~ 基于PyTorch、易上手,细粒度图像识别深度学习工具库
细粒度图像识别 [1] 是视觉感知学习的重要研究课题,在智能新经济和工业互联网等方面具有巨大应用价值,且在诸多现实场景已有广泛应用…… 鉴于当前领域内尚缺乏该方面的深度学习开源工具库,南京理工大学魏秀参教授团队用时近一年时间,开发、打磨、完成了 Hawkeye——细粒度图像识别深度学习开源工具库,供相关领域研究人员和工程师参考使用。
Hawkeye 是一个基于 PyTorch 的细粒度图像识别深度学习工具库,专为相关领域研究人员和工程师设计。目前,Hawkeye 包含多种代表性范式的细粒度识别方法,包括 “基于深度滤波器”、“基于注意力机制”、“基于高阶特征交互”、“基于特殊损失函数”、“基于网络数据” 以及其他方法。
Hawkeye 项目代码风格良好,结构清晰易读,可拓展性较强。对于刚接触细粒度图像识别领域的相关人员而言,Hawkeye 较易上手,便于其理解细粒度图像识别的主要流程和代表性方法,同时也方便在本工具库上快速实现自己的算法。此外,我们还给出了库中各模型的训练示例代码,自研方法也可按照示例快速适配并添加至 Hawkeye 中。
Hawkeye 开源库链接:https://github.com/Hawkeye-FineGrained/Hawkeye
2. Hawkeye 支持的模型及方法
Hawkeye 目前支持细粒度图像识别中主要学习范式的共 16 个模型与方法,具体如下:
- 基于深度滤波器
- S3N (ICCV 2019)
- Interp-Parts (CVPR 2020)
- ProtoTree (CVPR 2021)
- 基于注意力机制
- OSME+MAMC (ECCV 2018)
- MGE-CNN (ICCV 2019)
- APCNN (IEEE TIP 2021)
- 基于高阶特征交互
- BCNN (ICCV 2015)
- CBCNN (CVPR 2016)
- Fast MPN-COV (CVPR 2018)
- 基于特殊损失函数
- Pairwise Confusion (ECCV 2018)
- API-Net (AAAI 2020)
- CIN (AAAI 2020)
- 基于网络数据
- Peer-Learning (ICCV 2021)
- 其他方法
- NTS-Net (ECCV 2018)
- CrossX (ICCV 2019)
- DCL (CVPR 2019)
3. 安装 Hawkeye
安装依赖
使用 conda 或者 pip 安装相关依赖:
Python 3.8
- PyTorch 1.11.0 or higher
- torchvison 0.12.0 or higher
- numpy
- yacs
- tqdm
克隆仓库:
git clone https://github.com/Hawkeye-FineGrained/Hawkeye.git
cd Hawkeye
准备数据集
我们提供了 8 个常用的细粒度识别数据集及最新的下载链接:
- CUB200: https://data.caltech.edu/records/65de6-vp158/files/CUB_200_2011.tgz
- Stanford Dog: http://vision.stanford.edu/aditya86/ImageNetDogs/images.tar
- Stanford Car: http://ai.stanford.edu/~jkrause/car196/car_ims.tgz
- FGVC Aircraft: https://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/archives/fgvc-aircraft-2013b.tar.gz
- iNat2018: https://ml-inat-competition-datasets.s3.amazonaws.com/2018/train_val2018.tar.gz
- WebFG-bird: https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-bird.tar.gz
- WebFG-car: https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-car.tar.gz
- WebFG-aircraft: https://web-fgvc-496-5089-sh.oss-cn-shanghai.aliyuncs.com/web-aircraft.tar.gz
首先,下载一个数据集(以 CUB200 为例):
cd Hawkeye/data
wget https://data.caltech.edu/records/65de6-vp158/files/CUB_200_2011.tgz
mkdir bird && tar -xvf CUB_200_2011.tgz -C bird/
我们提供了上述 8 个数据集的 meta-data 文件,能够匹配库中的 FGDataset 方便地加载训练集和测试集,训练集和测试集为各个数据集官方提供的划分。使用不同数据集时,只需在实验的 config 文件中修改 dataset 配置即可,方便切换。
在实验的 config 文件中修改 dataset 配置,示例如下:
dataset:
name: cub
root_dir: data/bird/CUB_200_2011/images
meta_dir: metadata/cub
4. 使用 Hawkeye 训练模型
对于 Hawkeye 支持的每个方法,我们均提供了单独的训练模板和配置文件。例如训练 APINet 只需一条命令:
python Examples/APINet.py --config configs/APINet.yaml
实验的参数都在相应的 yaml 文件中,可读性高、便于修改,如:
experiment:
name: API_res101 2 # 实验名称
log_dir: results/APINet # 实验日志、结果等的输出目录
seed: 42 # 可以选择固定的随机数种子
# resume: results/APINet/API_res101 2/checkpoint_epoch_19.pth # 可以从训练中断的 checkpoint 中恢复训练
dataset:
name: cub # 使用 CUB200 数据集
root_dir: data/bird/CUB_200_2011/images # 数据集中图像放置的路径
meta_dir: metadata/cub # CUB200 的 metadata 路径
n_classes: 10 # 类别数,APINet 需要的数据集
n_samples: 4 # 每个类别的样本数
batch_size: 24 # 测试时的批样本数
num_workers: 4 # Dataloader 加载数据集的线程数
transformer: # 数据增强的参数配置
image_size: 224 # 图像输入模型的尺寸 224x224
resize_size: 256 # 图像增强前缩放的尺寸 256x256
model:
name: APINet # 使用 APINet 模型,见 `model/methods/APINet.py`
num_classes: 200 # 类别数目
# load: results/APINet/API_res101 1/best_model.pth # 可以加载训练过的模型参数
train:
cuda: [4] # 使用的 GPU 设备 ID 列表,[] 时使用 CPU
epoch: 100 # 训练的 epoch 数量
save_frequence: 10 # 自动保存模型的频率
# val_first: False # 可选是否在训练前进行一次模型精度的测试
optimizer:
name: Adam # 使用 Adam 优化器
lr: 0.0001 # 学习率为 0.0001
weight_decay: 0.00000002
scheduler:
# 本例使用自定义组合的 scheduler,由 warmup 和余弦退火学习率组合而成,见 `Examples/APINet.py`
name: ''
T_max: 100 # scheduler 的总迭代次数
warmup_epochs: 8 # warmup 的 epoch 数
lr_warmup_decay: 0.01 # warmup 衰减的比例
criterion:
name: APINetLoss # APINet 使用的损失函数,见 `model/loss/APINet_loss.py`
实验的主程序 Examples/APINet.py 中的训练器 APINetTrainer 继承自 Trainer,不需要再写复杂的训练流程、logger、模型保存、配置加载等代码,只用按需修改部分模块即可。我们也提供了训练阶段的多个 hook 钩子,可以满足一些方法特别的实现方式。
日志文件、模型权重文件、训练使用的训练代码以及当时的配置文件都会保存在实验输出目录 log_dir 中,备份配置和训练代码便于日后对不同实验进行对比。
更多详细示例可参考项目链接中的具体信息:https://github.com/Hawkeye-FineGrained/Hawkeye
#VM-UNet
首次探索纯粹基于SSM的模型在医学图像分割中的潜在应用。
在医学图像分割领域,基于CNN和Transformer的模型都已经被广泛研究。然而,CNN在长距离建模能力上存在局限,而Transformer则受到其二次计算复杂度的制约。最近,以Mamba为代表的态空间模型(SSMs)成为了一种有前景的方法。它们不仅在建模长距离交互方面表现出色,同时保持了线性计算复杂度。
在本文中,利用态空间模型,作者提出了一个U形架构模型,用于医学图像分割,命名为Vision Mamba UNet(VM-UNet)。具体来说,引入了视觉态空间(VSS)块作为基础块以捕捉广泛的上下文信息,并构建了一个非对称的编码器-解码器结构。作者在ISIC17、ISIC18和Synapse数据集上进行了全面的实验,结果表明VM-UNet在医学图像分割任务中表现出竞争力。据作者所知,这是第一个基于纯SSM模型的医学图像分割模型。作者旨在建立 Baseline ,并为未来开发更高效、有效的SSM-based分割系统提供宝贵的洞见。
代码:https://github.com/JCruan519/VM-UNet
1 Introduction
自动化医学图像分割技术帮助医生更快地进行病理诊断,从而提高了患者护理的效率。近来,基于CNN和基于Transformer的模型在各种视觉任务中展示了卓越的性能,特别是在医学图像分割方面。UNet作为基于CNN模型的代表,以其结构简单和强大的可扩展性而闻名,后续许多改进都是基于这种U形架构。
TransUnet,作为基于Transformer模型的先驱,首次在编码阶段采用视觉Transformer(ViT)[13]进行特征提取,并在解码阶段使用CNN,展示了其在获取全局信息方面的显著能力。随后,TransFuse融合了ViT与CNN的并行架构,同时捕捉局部和全局特征。此外,Swin-UNet将Swin Transformer与U形架构结合,首次引入了一个纯粹的基于Transformer的U形模型。
然而,基于卷积神经网络(CNN)的模型和基于Transformer的模型都具有固有的局限性。基于CNN的模型受到局部感受野的限制,这大大阻碍了它们捕捉远程信息的能力。这通常会导致提取的特征不充分,从而影响分割效果不佳。尽管基于Transformer的模型在全局建模方面表现出色,但自注意力机制在图像尺寸方面需要二次复杂度,导致了较高的计算负担,特别是对于像医学图像分割这类需要密集预测的任务。这些模型当前的不足促使作者开发一种新的医学图像分割架构,这种架构能够捕捉强烈的远程信息,并保持线性的计算复杂度。
近期,状态空间模型(SSMs)在研究行人中引起了极大的关注。在经典SSM研究的基础上,现代SSM(例如,Mamba)不仅建立了长距离依赖性,而且对于输入大小展现出线性复杂性。此外,基于SSM的模型在许多领域都得到了大量研究,包括语言理解,通用视觉等。特别是,U-Mamba最近引入了一种新颖的SSM-CNN混合模型,首次将其应用于医学图像分割任务中。SegMamba在编码器部分整合了SSM,而在解码器部分仍然使用CNN,为3D脑肿瘤分割任务提出了一个SSM-CNN混合模型。尽管上述工作已经将SSM用于医学图像分割任务,但基于纯SSM模型的性能尚未被探索。
受到V Mamba [20]在图像分类任务中成功的启发,本文首次引入了视觉猛蛇UNet(VM-UNet),这是一种纯粹的基于SSM的模型,旨在展示其在医学图像分割任务中的潜力。
具体来说,VM-UNet由三个主要部分组成:编码器、解码器和跳跃连接。编码器使用来自V Mamba的VSS块进行特征提取,并伴有图像下采样的像素合并操作。相反,解码器则由VSS块和像素扩展操作组成,以恢复分割结果的大小。对于跳跃连接部分,为了强调最原始的基于纯SSM模型在分割性能上的表现,作者采用了最简单的加性操作形式。
在器官分割和皮肤病变分割任务上进行了综合实验,以展示基于纯SSM模型在医学图像分割中的潜力。具体来说,作者在Synapse,ISIC17,和ISIC18数据集上进行了大量实验,其结果指出VM-UNet可以达到具有竞争力的性能。此外,值得注意的是,VM-UNet代表了基于纯SSM分割模型的最基本形式,因为它不包括任何特别设计的模块。
本文的主要贡献可以概括如下:
- 作者提出了VM-UNet,标志着首次探索纯粹基于SSM的模型在医学图像分割中的潜在应用。
- 在三个数据集上进行了全面实验,结果表明VM-UNet具有相当大的竞争力。
- 作者为医学图像分割任务中纯粹基于SSM的模型建立了一个 Baseline ,提供了有价值的见解,为更高效、更有效的SSM-based分割方法的发展铺平了道路。
2 Preliminaries
3 Methods
在本节中,作者初步介绍了VM-UNet的整体结构。随后,作者将详细阐述其核心组件,即VSS块。最后,作者将描述在训练过程中使用的损失函数。
Vision Mamba UNet (VM-UNet)
如图1(a)所示,VM-UNet的整体架构被呈现出来。具体来说,VM-UNet包括一个Patch嵌入层、一个编码器、一个解码器、一个最终投影层以及跳跃连接。与之前的方法[9]不同,作者没有采用对称结构,而是使用了一种非对称设计。
同样地,解码器被组织成四个阶段。在最后三个阶段的开始,使用了一个块扩展操作来减少特征通道的数量并增加高度和宽度。在四个阶段中,作者使用了[2, 2, 2, 1] VSS块,每个阶段的通道数分别为[8C, 4C, 2C, 4]。在解码器之后,采用了一个最终的投影层来将特征的大小恢复到与分割目标相匹配。具体来说,通过块扩展执行了4倍的上采样来恢复特征的高度和宽度,然后通过一个投影层来恢复通道数量。
对于跳跃连接,采用了简单直接的加法操作,没有花哨的装饰,因此不会引入任何额外的参数。
VSS block
VSS块源自VMamaba的结构,是VM-UNet的核心模块,如图1(b)所示。在经过层归一化之后,输入被分为两个分支。在第一个分支中,输入通过一个线性层,然后是一个激活函数。在第二个分支中,输入经过一个线性层、深度可分离卷积和一个激活函数的处理,然后被送入2D-选择性扫描(SS2D)模块进行进一步的特征提取。
随后,特征通过层归一化进行标准化处理,并与第一个分支的输出进行逐元素乘法,以合并两条路径。最后,使用线性层混合特征,并将此结果与残差连接相结合,形成VSS块的输出。在本文中,默认采用SiLU作为激活函数。
SS2D由三个部分组成:扫描扩展操作、S6模块和扫描合并操作。如图2(a)所示,扫描扩展操作沿四个不同方向(从左上到右下,从右下到左上,从右上到左下,以及从左下到右上)展开输入图像成序列。这些序列随后由S6模块进行处理以提取特征,确保来自各个方向的信息得到彻底扫描,从而捕捉到多样的特征。接着,如图2(b)所示,扫描合并操作对来自不同方向的序列进行求和合并。
四个方向,将输出图像恢复到与输入图像相同的大小。S6模块源自Mamba,在S4之上引入了一种选择机制,通过根据输入调整SSM的参数。这使得模型能够区分并保留相关信息,同时过滤掉不相关的内容。S6模块的伪代码在算法1中给出。
Loss function
VM-UNet的引入旨在验证基于纯SSM模型的在医学图像分割任务中的应用潜力。因此,作者分别针对二值和多类分割任务,仅使用最基本的二元交叉熵和Dice损失(BceDice损失)以及交叉熵和Dice损失(CeDice损失)作为损失函数,如方程式5和6所示。
4 Experiments
在本节中,作者对VM-UNet在皮肤病变和器官分割任务上进行了全面的实验。具体来说,作者在ISIC17、ISIC18和Synapse数据集上评估了VM-UNet在医学图像分割任务上的性能。
Datasets
ISIC17和ISIC18数据集: 国际皮肤成像协作2017和2018挑战数据集(ISIC17和ISIC18)是两个公开可用的皮肤病变分割数据集,分别包含2,150和2,694张带分割 Mask 标签的皮肤镜图像。按照之前的工作,作者将数据集以7:3的比例分为训练集和测试集。
具体来说,对于ISIC17数据集,训练集由1,500张图像组成,测试集由650张图像组成。对于ISIC18数据集,训练集包括1,886张图像,而测试集包含808张图像。对于这两个数据集,作者提供了在几个指标上的详细评估,包括平均交并比(mIoU),Dice相似性系数(DSC),准确度(Acc),敏感性(Sen)和特异性(Spe)。
Synapse多器官分割数据集(Synapse):Synapse是一个公开的多器官分割数据集,包含30个腹部CT病例,共3,779张轴向腹部临床CT图像,包括8种腹部器官(主动脉、胆囊、左肾、右肾、肝脏、胰腺、脾脏、胃)。遵循之前的工作的设置,其中18个病例用于训练,12个病例用于测试。对于这个数据集,作者报告了Dice相似性系数(DSC)和95% Hausdorff距离(HD95)作为评估指标。
Implementation details
遵循之前的工作,作者将ISIC17和ISIC18数据集中的图像大小调整为256×256,将Synapse数据集中的图像大小调整为224×224。为防止过拟合,采用了数据增强技术,包括随机翻转和随机旋转。对于ISIC17和ISIC18数据集,使用BceDice损失函数,而对于Synapse数据集,采用CeDice损失函数。作者将批量大小设置为32,并采用AdamW优化器,初始学习率为1e-3。使用CosineAnnealingLR作为调度器,最大迭代次数为50,最小学习率为1e-5。训练周期设置为300。对于VM-UNet,作者用VMamba-S的权重初始化编码器和解码器的权重,VMamba-S是在ImageNet-1k上预训练的。所有实验都在单个NVIDIA RTX A6000 GPU上完成。
Main results
作者对比了VM-UNet与一些最先进模型的性能,并在表1和表2中展示了实验结果。
对于ISIC17和ISIC18数据集,VM-UNet在mIoU、DSC和Acc指标上超过了其他模型。对于Synapse数据集,VM-UNet也取得了具有竞争力的表现。例如,VM-UNet在DSC和HD95指标上分别超过了Swin-UNet——这是第一种纯粹的基于Transformer的模型——1.95%和2.34mm。这些结果证明了基于SSM的模型在医学图像分割任务中的优越性。
Ablation studies
在本节中,作者使用ISIC17和ISIC18数据集对VM-UNet的初始化进行了消融实验。作者分别用来自VMamba-T和VMamba-S的预训练权重来初始化VM-UNet。如表3所示,实验结果表明,更强大的预训练权重显著提高了VM-UNet在下游任务中的性能,这表明VM-UNet在很大程度上受到预训练权重的影响。
5 Conclusions and Future works
结论:在本文中,作者首次引入了一种基于纯SSM的医疗图像分割模型,并提出VM-UNet作为 Baseline 。为了发挥基于SSM模型的潜能,作者使用VSS块构建了VM-UNet,并用预训练的VMamba-S初始化其权重。在皮肤病变和多器官分割数据集上进行的全面实验表明,基于纯SSM的模型在医疗图像分割任务中具有高度竞争力,并在未来值得深入探索。
未来工作:
- 基于SSM机制的特性,设计更适合分割任务的模块。
- VM-UNet的参数数量约为3000万,这为通过人工设计或其他压缩策略简化SSM提供了机会,从而加强它们在现实医疗场景中的应用性。
- 考虑到SSM在捕捉长序列信息方面的优势,进一步研究在高分辨率下的分割性能将具有价值。
- 探索SSM在其他医疗成像任务中的应用,如检测、配准和重建等。
#UltraLight-VM-UNet
传统上,为了提高模型分割性能,大多数方法倾向于添加更复杂的模块。但这并不适用于医疗领域,尤其是在移动医疗设备上,由于计算资源限制,计算负担重的模型不适合真实的临床环境。最近,以Mamba为代表的状态空间模型(SSMs)成为传统卷积神经网络(CNNs)和Transformers的有力竞争者。在本文中,作者深入探讨了Mamba中参数影响的关键要素,并基于此提出了超轻量级视觉Mamba UNet(UltraLight VM-UNet)。
具体来说,作者提出了一种在并行视觉Mamba中处理特征的方法,称为PVM层,在保持处理通道总数不变的同时,实现了最低的计算负载和卓越的性能。作者在三个皮肤病变公共数据集上进行了与几个最先进的轻量级模型的比较和消融实验,并展示了仅拥有0.049M参数和0.060 GFLOPs的UltraLight VM-UNet具有同样强大的性能竞争力。此外,本研究深入探讨了Mamba中参数影响的关键要素,这将为Mamba可能在未来成为轻量化领域的新主流模块奠定理论基础。
该模型不仅在参数数量上实现了前所未有的精简——仅有0.049M,而且在计算效率上也达到了新的高度,GFLOPs仅为0.060。
论文:https://arxiv.org/pdf/2403.20035.pdf
源码:https://github.com/wurenkai/UltraLight-VM-UNet
导读
在医学图像分割领域中,皮肤病变分割同眼底视网膜血管分割、息肉分割算是几个非常经典的研究课题。
随着移动医疗设备的兴起,对于能够在这些设备上高效运行的轻量级模型的需求日益增长。
然而,大多数深度学习模型往往因为其庞大的参数量和高计算需求,难以满足这一需求。
在此之前,比较有代表性的一个方法是此前上海交大团队发表在 MICCAI'23 上发表的 EGE-UNe。
随着 Mamba 热潮的兴起,作为一度被视为“魔改重灾区”的医学图像分割领域自然也被各家机构和高校给盯上,正如此前我们发布过的第一个基于纯 Mamba 架构的医学图像分割模型 VM-UNet。
今天,同样是来自上海这边的高校团队为我们带来了一个极具“性价比”的工作——UltraLight VM-UNet
。
在这篇精彩的论文中,作者们巧妙地将最新的状态空间模型(SSMs)技术——Mamba,融入到经典的UNet架构中,创造出了一种名为 UltraLight VM-UNet 的新型轻量级模型。
这个模型不仅在参数数量上实现了前所未有的精简——仅有0.049M,而且在计算效率上也达到了新的高度,GFLOPs仅为0.060。更令人振奋的是,UltraLight VM-UNet在保持模型轻盈的同时,并没有牺牲分割性能,其在三个公开的皮肤病变数据集上的表现与那些参数量更大的模型相比毫不逊色。
这篇论文不仅展示了一种创新的模型架构,还深入探讨了影响Mamba参数数量的关键因素,为未来的轻量化模型设计提供了宝贵的理论支持。后续的阅读,我们将一同踏上这场探索轻量级医学图像分割模型的奇妙旅程,见证如何在资源受限的环境中实现高效、精准的图像分析。让我们跟随作者的步伐,深入了解UltraLight VM-UNet的设计理念、实现细节以及令人瞩目的实验成果,探索这一领域的未来可能。
背景
在过去的几年里,深度学习技术在医学图像分析领域取得了显著的进展,特别是在图像分割任务中。图像分割作为医学诊断过程中的一个关键步骤,其目的是将图像中的感兴趣区域(如病变、器官等)与背景区分开。准确的图像分割对于疾病的早期发现和治疗至关重要,尤其是在皮肤癌筛查等领域。
然而,尽管深度学习模型在图像分割任务中表现出色,但它们通常需要大量的计算资源和存储空间。这对于资源受限的移动医疗设备来说是一个巨大的挑战。例如,移动设备上的电池寿命有限,而且设备的处理能力通常远不及传统的台式计算机或服务器。因此,为了在这些设备上实现实时的医学图像分析,迫切需要开发出既高效又轻量级的模型。
此外,医疗图像分割模型在临床应用中还面临着其他挑战。例如,模型需要能够处理不同尺度和复杂度的病变,同时保持高精度的分割结果。此外,医疗专业人员通常需要模型具有较高的解释性,以便理解模型的决策过程。
在这样的背景下,轻量级模型的研究自然而然便成为了医学图像分析领域的一个热点。轻量级模型不仅能够在资源受限的环境中运行,还能够减少模型的训练和部署成本,使得先进的医疗图像分析技术更加普及和可及。
最近,状态空间模型(SSMs)作为一种新兴的深度学习架构,因其在处理序列数据方面的高效性和灵活性而受到关注。特别是Mamba模型,它通过引入时间变化的参数和选择性状态空间,展示了在处理文本和视觉信息时的优越性能。这为开发新型轻量级医学图像分割模型提供了新的可能性。
在这样的研究背景下,本文提出的UltraLight VM-UNet模型,正是为了解决上述挑战而设计。通过结合Mamba模型的优势和UNet架构的高效性,UltraLight VM-UNet旨在实现在保持高分割性能的同时,大幅度减少模型的参数量和计算需求。这不仅为移动医疗设备提供了强大的图像分析工具,也为轻量级模型的研究开辟了新的道路。
方法
如上所述,本文提出了一种名为UltraLight VM-UNet的创新模型,该模型专为减少参数数量和计算负载而设计,同时保持优秀的皮肤病变分割性能。
架构概述(Architecture Overview)
首先我们先来看下整体架构。UltraLight VM-UNet模型采用了U形的结构,这种结构通常包含一个编码器(用于提取图像特征)和一个解码器(用于根据提取的特征重建分割图)。模型的特点是其通道数设置为[8, 16, 24, 32, 48, 64],这样的设计有助于在不同层次上捕捉图像的细节和上下文信息。
模型的前三层使用传统的卷积模块来提取浅层特征,而后三层则采用了作者提出的Parallel Vision Mamba Layer(PVM Layer)来提取更深层次的特征。在跳跃连接路径中,模型使用了通道注意力桥接(Channel Attention Bridge, CAB)和空间注意力桥接(Spatial Attention Bridge, SAB)模块,以实现多尺度信息的融合。
Mamba参数影响分析(Mamba Parameter Impact Analysis)
作者们对Mamba模型中的参数影响因素进行了深入分析。实验发现,输入通道的数量对模型参数数量有着显著的影响。特别是,Vision Mamba中的2D选择性扫描模块(SS2D)是影响参数数量的关键组件。SS2D模块包括扫描扩展操作、S6块特征提取和扫描合并操作。
通过对这些操作的分析,本文得出一个结论:输入通道数量的增加会导致参数数量呈指数级增长。
并行Vision Mamba层(Parallel Vision Mamba Layer)
为了解决参数数量过多的问题,作者提出了一种新的并行处理方法,即Parallel Vision Mamba Layer(PVM Layer)。
在PVM Layer中,输入特征首先通过LayerNorm层进行归一化,然后被分割成四个部分,每部分的通道数为原始通道数的四分之一。这四个部分分别通过VSS Block进行处理,然后通过残差连接和调整因子进行优化,最后再通过拼接(concatenation)操作合并回原始通道数的特征。这种方法在保持处理通道数不变的情况下,显著降低了模型的参数数量和计算负载。
跳跃连接路径(Skip-connection Path)
在UltraLight VM-UNet模型中,跳跃连接路径的设计同样至关重要。模型使用了CAB和SAB模块来进行多尺度和多级别的信息融合。SAB模块包含最大池化、平均池化和扩展卷积等操作,而CAB模块则包含全局平均池化、拼接操作、全连接层和Sigmoid激活函数。这些模块的有效结合,不仅提高了模型的收敛能力,还增强了模型对病变的敏感性。
实验
为了确保模型输入的一致性,相关实验所有图像都被标准化到256×256像素的大小。同时,在三个主流的 ISIC2017、ISIC2018和PH2 皮肤病变分割数据集上广泛用于评估皮肤病变分割模型的性能。
实现细节
- 实验环境:实验在Python 3.8和Pytorch 1.13.0环境下进行,使用NVIDIA V100 GPU进行模型训练和测试。
- 数据增强:为了提高模型的泛化能力,实验中使用了水平翻转、垂直翻转和随机旋转等数据增强技术。
- 损失函数和优化器:使用BceDice损失函数进行模型训练,优化器选择了AdamW,学习率调度策略采用了余弦退火。
- 评估指标:采用经典的Dice相似系数(DSC)、敏感性(SE)、特异性(SP)和准确性(ACC)作为评估模型性能的主要指标。
SOTA对比
UltraLight VM-UNet模型与多个现有的轻量级和经典模型进行了比较,包括U-Net、SCR-Net、ATTENTION SWIN U-NET、C2SDG、VM-UNet、MALUNet和LightM-UNet等。
从上述实验结果可以看出,尽管UltraLight VM-UNet的参数数量大幅减少,但其在三个数据集上的分割性能与参数数量更多的模型相当,甚至在某些指标上更优。
消融实验
- 并行处理的影响:通过消融实验,作者们评估了不同并行处理设置对模型性能的影响。实验结果表明,所提出的PVM Layer结构在减少参数数量的同时,能够有效地保持模型性能。
- 模型组件的影响:作者还进行了消融实验来评估PVM Layer在UltraLight VM-UNet中的作用。实验结果显示,移除PVM Layer会导致模型性能下降,证明了PVM Layer在模型中的重要性。
此外,为了验证在UltraLight VM-UNet中提出的并行视觉Mamba层(PVM层)的影响,作者进行了一系列的消融实验。如表5所示,作者分别用卷积核为3的标准卷积替换编码器和解码器中的PVM层。此外,作者还同时用标准卷积替换编码器和解码器中的PVM层。从表中可以得出,在分别替换编码器和解码器的PVM层后,参数增加了63.26,GFLOPs在两者中均增加,而性能在两者中均下降。特别是,在同时替换编码器和解码器的PVM层后,参数增加了151,GFLOPs增加了25。总之,这表明在替换PVM层后,所有性能方面都出现了下降,而参数和GFLOPs均有所增加。这再次证明了PVM层的重要作用。
#X-maps
首个集成内容投影的实时结构光系统
论文题目:X-maps: Direct Depth Lookup for Event-based Structured Light Systems
作者:Wieland Morgenstern, Niklas Gard等
作者机构:Fraunhofer Heinrich Hertz Institute, HHI等
论文链接:https://arxiv.org/pdf/2402.10061.pdf
代码链接:https://github.com/fraunhoferhhi/X-maps
本文提出了一种用于空间增强现实(SAR)应用的直接深度估计新方法,利用事件相机进行。该方法使用激光投影仪进行深度估计,采用结构光方法。主要贡献包括将投影仪时间图转换为矫正的X-地图,捕获入射事件的x轴对应关系,实现直接视差查找,无需额外搜索。与之前的实现相比,这显著简化了深度估计过程,使其更有效率,而准确性与基于时间图的过程相似。此外,通过简单的时间映射校准,作者还补偿了廉价激光投影仪的非线性时间行为,提高了性能和深度估计准确性。由于深度估计仅需两次查找,每帧执行速度几乎可以达到即时水平(使用Python实现每帧少于3毫秒),适用于需要低延迟、高帧率和直接反馈的SAR体验的实时互动和响应能力。作者还提供了有关数据转换为X-地图的宝贵见解,并对作者的深度从视差估计与最先进的基于时间图的结果进行了评估。
读者理解:
这篇论文介绍了一种利用小型激光投影仪触发事件来直接计算深度的方法,该方法适用于空间增强现实应用。通过将投影仪时间映射转换为矫正的X-映射,可以在不需要额外搜索的情况下直接从查找表中获取深度信息,从而简化了深度估计过程。该方法的关键优势在于能够以高速率生成高分辨率的点云,这对于实时交互和响应至关重要。论文指出,虽然系统受到事件相机传感器噪声和读出特性的限制,但未来的改进可以通过提高传感器分辨率、降低噪声和提高读出速度来改善系统性能。此外,作者强调了保留所有事件深度信息的重要性,以便在生成的场景中保持清晰的边界和可见的小对象。总体而言,该方法为实现低延迟、高帧率和直接反馈的空间增强现实体验提供了一种有效途径。
1 引言
本文介绍了一种新颖的超低延迟深度估计方法,适用于空间增强现实(SAR)应用。该方法利用事件相机和结构光投影仪,通过测量像素强度的变化来捕捉运动和亮度变化,以实现实时准确的深度估计。与传统相机相比,事件相机具有更高的速度和稳健性,使其成为与结构光投影仪集成用于SAR系统的理想选择。本文的关键贡献包括将投影仪的时间图转换为矫正的X-地图,捕捉了入射事件的x轴对应关系,实现了直接的视差查找;通过校准时间图来模拟消费类MEMS激光扫描仪的非线性时间行为,从而改善深度估计误差;以及展示了一个实时基于事件的深度估计系统,具有集成内容投影的能力,适用于需要高帧率和直接反馈的SAR应用场景。
2 事件直接深度查找
本文介绍了一种事件直接深度查找的方法,用于空间增强现实(SAR)应用中的深度估计。该方法利用事件相机和结构光投影仪,通过测量像素强度的变化来捕捉运动和亮度变化,以实现实时准确的深度估计。事件相机产生异步事件,为每个事件提供相机坐标(x,y)、时间戳t和极性p。将事件的时间戳存储在图像中得到了(x,y) 7−→ t的时间映射。通过矫正的时间映射,可以匹配相机时间映射中记录的时间与合成的投影仪时间映射中理想时间,从而实现直接视差查找。为了避免耗尽的视差搜索,提出了直接检索视差的解决方案,通过简单快速的CPU实现实现。通过倾斜投影仪,使投影仪行从底部向顶部扫描,列从左到右扫描,使较大的时间步长与视差轴对齐。通过在每个投影帧中绘制事件的y坐标随时间变化的图表,跟踪列在场景中创建的事件。最终实现了事件直接深度查找,避免了使用时间映射时所需的视差搜索。
3 演示设置
本文详细介绍了搭建演示器的具体步骤和所使用的设备。首先介绍了使用的Nebra Anybeam MEMS激光投影仪的技术规格,包括分辨率、刷新率和亮度等参数。对于事件相机部分,使用了Prophesee Evaluation Kit 1 (EVK1),具有特定的分辨率、像素间距和对比度检测功能。接着介绍了相机-投影仪的校准方法,包括相机内参校准和投影仪相机外参校准。在校准过程中,使用了自定义的校准流程,首先对相机进行内参校准,然后使用白色扩散纸对投影仪进行内在和外在校准。然后讨论了帧触发器的工作原理,通过分析事件流的时间戳来识别投影帧的开始和结束时间。最后,介绍了事件过滤的方法,即如何处理多个事件同时出现在同一坐标的情况,以及如何设置相机参数来过滤不需要的事件。
4 实验
时间映射校准
- 时间映射校准的评估表明,校准方法基本有效。深度测量验证了校准过程的原理。未来的研究需要进行全面的定性评估。将投影仪的内在时间校准集成到校准过程中可能会提高精度和准确性,使系统更有效。时间映射校准实验表明,校准在各种投影仪和相机镜头校准中表现稳定。不同的投影仪显示不同程度的非线性时间行为。
与现有技术的比较
- 将方法与ESL进行比较,使用其提供的静态场景数据集。我们使用ESL的改进基线对比,发现ESL结果比MC3D更清晰地捕捉几何形状。我们的X-maps系统提供了与ESL-init非常相似的结果,RMSE差异最大为0.7mm,填充率几乎相等。与MC3D相比,我们的方法提供了更高的填充率和更低的RMSE。如果将MC3D测量值平均一秒钟,深度图将更加密集,但仍与ESL深度图有很大差异。
空间增强现实示例
- 我们建立了一个实时演示器,计算场景深度并将深度值投影回场景。我们的方法支持使用所有可用像素进行投影,可以显示任何图像内容并估计深度信息。稀疏场景可能导致帧触发算法失效。未来,我们希望将深度估计方法与对象检测和跟踪相结合,以创建更复杂的体验。
5 结论
本文介绍了一种直接计算由小型激光投影仪触发的事件深度的方法,该方法可在空间增强现实中以高分辨率创建点云。通过将投影仪时间映射转换为矫正的X-映射,可以直接从查找表中检索深度,同时考虑到扫描仪的非线性时间行为。这种方法适用于廉价投影仪,并且需要的计算资源较少。然而,系统受事件相机传感器噪声和读出特性的影响,可能会引入时间戳误差。未来的改进可以集中在传感器分辨率、噪声降低和读出速度上,以提高方法的精度和性能。通过保留所有事件深度信息,而不在图像域中进行进一步的噪声过滤,该方法可以产生清晰的边界和可见的小对象。作者通过在公共数据集上进行评估,表明该方法提供了类似的深度精度。未来的工作可以进一步研究激光扫描仪的行为,以提供更精确的时间映射校准,并探索投影到任意对象的可能性。
#3DGStream
快速训练,200 FPS实时渲染逼真场景!
从多视角视频构建动态场景的照片逼真的自由视角视频(FVV)仍然是一项具有挑战性的工作。尽管当前的神经渲染技术取得了显著的进步,但这些方法通常需要完整的视频序列来进行离线训练,并且无法实时渲染。为了解决这些限制,本文引入了3DGStream,这是一种专为真实世界动态场景的高效FVV流式传输而设计的方法。提出的方法在12秒内实现了快速的动态全帧重建,并以200 FPS的速度实现了实时渲染。具体来说,我们使用3D高斯(3DG)来表示场景。与直接优化每帧3DG的简单方法不同,我们使用了一个紧凑的神经变换缓存(NTC)来对3DG的平移和旋转进行建模,显著减少了每个FVV帧所需的训练时间和存储。此外,还提出了一种自适应的3DG添加策略来处理动态场景中的新兴目标。实验表明,与现有技术相比,3DGStream在渲染速度、图像质量、训练时间和模型存储方面具有竞争力。
论文链接:https://arxiv.org/pdf/2403.01444.pdf
论文名称:3DGStream: On-the-fly Training of 3D Gaussians for Efficient Streaming of Photo-Realistic Free-Viewpoint Videos
代码链接:https://sjojok.github.io/3dgstream/
3DGStream能够以百万像素的分辨率实时渲染照片逼真的FVV,具有异常快速的每帧训练速度和有限的模型存储要求。如图1和图2所示,与每帧从头开始训练的静态重建方法和需要在完整视频序列上进行离线训练的动态重建方法相比,我们的方法在训练速度和渲染速度方面都很出色,在图像质量和模型存储方面保持了竞争优势。此外,我们的方法在所有相关方面都优于StreamRF,这是一种处理完全相同任务的最先进技术。
3DGStream方法一览
如下所示,给定一组多视角视频流,3DGStream旨在构建动态场景的高质量FVV流。最初,优化一组3DG来表示时间步长为0的场景。对于随后的每个时间步长i,使用时间步长i−1中的3DG作为初始化,然后进行两阶段的训练过程:第1阶段:训练神经变换缓存(NTC)来对3DG的平移和旋转进行建模。训练结束后,NTC转换3DG,为下一个时间步长和当前时间步长的下一阶段做好准备。第二阶段:在潜在位置生成特定于帧的附加3DG,并通过周期性拆分和修剪对其进行优化。在两阶段过程结束后,变换后的3DG和附加的3DG都被用于在当前时间步长i进行渲染,只有变换后的3D被带入下一个时间步长。
实验结果对比
论文在两个真实世界的动态场景数据集上进行了实验:N3DV数据集和Meet Room数据集。N3DV数据集上的定量比较。训练时间、所需存储和PSNR在每个场景的整个300帧上取平均值。
Meet Room dataset性能对比:
3DG-S在初始帧上的质量对于3DGStream至关重要。因此,我们继承了3DGS的局限性,例如对初始点云的高度依赖性。如图7所示,由于COLMAP无法重建远处的景观,在窗口之外存在明显的伪影。因此,我们的方法将直接受益于未来对3DG-S的增强。此外,为了高效的训练,我们限制了训练迭代次数。
主要结论
3DGStream是一种高效的自由视点视频流的新方法。基于3DG-S,利用有效的神经变换缓存来捕捉目标的运动。此外,还提出了一种自适应3DG添加策略,以准确地对动态场景中的新兴目标进行建模。3DGStream的两级pipeline实现了视频流中动态场景的实时重建。在确保照片逼真的图像质量的同时,3DGStream以百万像素的分辨率和适度的存储空间实现了实时训练(每帧约10秒)和实时渲染(约200FPS)。大量实验证明了3DGStream的效率和有效性!
#Depth Anything
24年1月论文“Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data“,来自香港大学、字节、浙江实验室和浙江大学。
这项工作提出了Depth Anything,这是一种用于鲁棒单目深度估计的解决方案。目标是建立一个简单而强大的基础模型,在任何情况下处理任何图像。为此,设计一个数据引擎来收集和自动注释大规模未标记数据(~62M),从而大大扩大了数据覆盖范围,这样能够减少泛化误差,从而扩大数据集的规模。作者研究了两种简单而有效的策略,这两种策略使数据增强更有希望。首先,利用数据增强工具创建了一个更具挑战性的优化目标。它迫使模型积极寻求额外的视觉知识并获得稳健的表示。其次,开发了一种辅助监督,强制该模型从预训练的编码器继承丰富的语义先验。作者对其零样本功能进行了广泛评估,包括六个公共数据集和随机拍摄的照片。它展示了很好的泛化能力。此外,利用来自NYUv2和KITTI的深度信息对其进行微调,设置新的SOTA。更好的深度模型也产生了更好的以深度为条件模型ControlNet。
如图所示是一些深度估计的例子:
单目深度估计(MDE)是一个在机器人[65]、自主驾驶[63,79]、虚拟现实[47]等领域有广泛应用的基本问题,它还需要一个基础模型来估计单个图像的深度信息。然而,由于难以构建具有数千万深度标签的数据集,这一点一直没有得到充分的探索。MiDaS[45]通过在混合标记数据集上训练MDE模型,沿着这一方向进行了开创性的研究。尽管表现出一定水平的零样本能力,但MiDaS受其数据覆盖范围的限制,因此在某些情况下表现不佳。
传统上,深度数据集主要通过从传感器[18,54]、立体匹配[15]或SfM[33]获取深度数据来创建,这在特定情况下是昂贵、耗时甚至难以处理的。相反,本文关注大规模的未标记数据。与立体图像或深度传感器的标记图像相比,单目未标记图像具有三个优点:(i)(获取简单且便宜)单目图像几乎无处不在,因此易于收集,无需专门的设备。(ii)(多样性)单目图像可以覆盖更广泛的场景,这对模型的泛化能力和可扩展性至关重要。(iii)(易于注释)简单地使用预训练的MDE模型为未标记的图像分配深度标签,这只需要前馈推理步骤。更高效的是,这还产生了比激光雷达[18]更密集的深度图,并省略了计算密集的立体匹配过程。
Depth Anything
作者的工作利用标记和未标记的图像来促进更好的单目深度估计(MDE)。形式上,标记集和未标记集分别表示为Dl和Du。工作目标是从Dl学习教师模型T。然后,利用T为Du分配伪深度标签。最后,在标记集和伪标记集的组合上训练了一个学生模型S。如图提供了一个简短的说明,流水线包括如下。实线:标记的图像流,虚线:未标记的图像,特别强调大规模未标记图像的价值,S表示添加强扰动。为了使深度估计模型具有丰富的语义先验,在在线的学生模型和冻结的编码器之间强制执行辅助约束,保持语义能力。
学习标记的图像
这个过程类似于MiDaS[5,45]的训练。然而,由于MiDaS没有发布代码,首先复现算法。具体地说,深度值首先通过d=1/t转换到视差空间,然后在每个深度图上归一化为0~1。在训练中,其采用仿射不变性损失。
为了获得稳健的单目深度估计模型,从6个公共数据集收集了1.5M的标记图像。下表列出了这些数据集的详细信息。
与MiDaS v3.1[5](12个训练数据集)相比,本文使用的标记数据集更少,因为1)不使用NYUv2[54]和KITTI[18]数据集来确保对其进行零样本评估,2)一些数据集(不可用),例如Movies[45]和WSVD[60],以及3)一些数据集中表现出较差的质量,例如RedWeb(也是低分辨率)[66]。尽管使用了更少的标记图像,易于获取和多样化的未标记图像将提高数据覆盖率,并大大增强模型的泛化能力和稳健性。
此外,为了加强从这些标记图像中学习的教师模型T,采用DINOv2[42]预训练的权重来初始化编码器。在实践中,用预训练的语义分割模型[69]来检测天空区域,并将其视差值设置为0(最远)。
释放无标记图像的能力
与之前费力构建不同标记数据集的工作不同,本文强调未标记图像在增强数据覆盖率方面的价值。如今可以从互联网或各种任务的公共数据集中实际构建一个多样化的、大规模的未标记集合。此外,可以毫不费力地获得单目未标记图像的密集深度图,只需将它们转发到预训练的、性能良好的MDE模型即可。这比对立体图像或视频执行立体匹配或SfM重建要方便和高效得多。选择了八个大规模的公共数据集作为其不同场景的未标记来源。它们总共包含6200多万张图片。
不幸的是,在试点研究中,未能通过这种自训练流水线获得改进,这确实与只有少数标记图像时的观察结果相矛盾[55]。对于已经足够的标记图像,从额外的未标记图像中获取的额外知识是相当有限的。特别是考虑到教师和学生共享相同的预训练和架构,即使没有明确的自训练程序,也倾向于对未标记集Du做出类似的正确或错误预测。
为了解决这一困境,建议用一个更难的优化目标来挑战学生,获得未标记图像上的额外视觉知识。在训练过程中向未标记的图像注入强扰动。它迫使学生模型积极寻求额外的视觉知识,并从这些未标记的图像中获得不变的表示。这些优势有助于模型更有力地应对开放世界。作者引入两种形式的扰动:一种是强颜色失真,包括颜色抖动和高斯模糊,另一种是强烈的空间失真,即CutMix[83]。尽管简单,但这两个修改使大规模未标记图像显著提高了标记图像的基线。
CutMix的训练采用无标记图像损失,来自随机内插的一对无标记图像。
语义辅助感知
有一些工作[9,21,28,71]通过辅助语义分割任务来改进深度估计。这种高级语义相关信息在深度估计模型上是有益的。此外,在用未标记图像的特定背景下,这些来自其他任务的辅助监督信号也可以对抗伪深度标签中的潜在噪声。
因此,初步尝试用RAM[85]+GroundingDINO[37]+HQ-SAM[26]模型的组合,仔细地为未标记的图像分配语义分割标签。在后处理之后,这产生了一个包含4K类别的类空间。在联合训练阶段,该模型通过共享编码器和两个单独的解码器来产生深度和分割预测。不幸的是,经过反复试验,仍然无法提高原始MDE模型的性能。将图像解码到离散类空间中确实会丢失太多的语义信息。这些语义掩码中的有限信息很难进一步提升深度模型,尤其是当深度模型建立了非常有竞争力的结果。
因此,工作目标是寻找更多信息的语义信号,作为深度估计任务的辅助监督。对DINOv2模型[42]在语义相关任务中的强大性能感到非常惊讶,例如,图像检索和语义分割,即使在没有任何微调的情况下使用冻结权重。受这些线索的启发,建议将其强大的语义能力转移到具有辅助特征对齐损失的深度模型中。特征空间是高维和连续的,因此包含比离散掩码更丰富的语义信息。
作者没有遵循一些工作[19]将在线特征f投影到一个新空间中进行对齐,因为随机初始化的投影器在早期阶段造成的大对齐损失主导了整体损失。
特征对齐的另一个关键点是,像DINOv2这样的语义编码器倾向于为目标的不同部分产生相似的特征,例如汽车的前部和后部。然而,在深度估计中,不同部分甚至同一部分内的像素可以具有不同的深度。因此,穷尽性地强制深度模型产生与冻结编码器完全相同的特征,是无益的。
为了解决这个问题,作者为特征对齐设置了容忍差α。如果余弦相似性已经超过α,则在特征对齐损失中不考虑该像素。这使得该方法既可以享受来自DINOv2的语义-觉察表示,也可以享受来自深度监督的部件-级鉴别表示。作为副作用,产生的编码器不仅在下游MDE数据集中表现良好,而且在语义分割任务中也取得了很好的效果。它还表明了编码器作为一种通用的多任务编码器用于中级和高级感知任务的潜力。
最后,总损失是仿射不变性损失、无标记损失和特征对齐损失的平均组合。
#使用LLM从图像中提取结构化车辆信息
介绍
想象一下,在检查点有一个摄像头监控汽车,您的任务是记录复杂的车辆详细信息 — 类型、车牌号、品牌、型号和颜色。这项任务具有挑战性 — 经典的计算机视觉方法难以处理各种模式,而监督式深度学习需要集成多个专门的模型、大量标记数据和繁琐的训练。预训练多模态 LLM (MLLM) 领域的最新进展提供了快速灵活的解决方案,但要使它们适应结构化输出则需要进行调整。
在本教程中,我们将构建一个车辆文档系统,从车辆图像中提取重要细节。这些细节将以结构化格式提取,以便进一步供下游使用。我们将使用OpenAI的 GPT-4 提取数据,使用Pydantic构造输出,并使用LangChain编排管道。最后,您将拥有一个实用的管道,用于将原始图像转换为结构化、可操作的数据。
技术栈
GPT-4 视觉模型:
LangChain:我们将使用 LangChain 来构建管道。LangChain 是一个功能强大的框架,可以简化复杂的工作流程,确保代码的一致性,并可以轻松地在 LLM 模型之间切换 [2]。在我们的案例中,Langchain 将帮助我们链接加载图像、生成提示、调用 GPT 模型以及将输出解析为结构化数据的步骤。
Pydantic:
数据集概述
为了模拟车辆检查站的数据,我们将使用来自“车牌号”Kaggle 数据集 [4] 的车辆图像样本。此数据集在Apache 2.0 许可下可用。您可以查看以下图像:
编码实现
在深入实际实施之前,我们需要做好一些准备工作:
- 生成OpenAI API密钥-OpenAI API是付费服务。要使用API,您需要注册OpenAI帐户,并生成与付费计划链接的API密钥(了解更多信息)。
- 配置你的OpenAI-在Colab中,你可以安全地将你的API密钥存储为环境变量(秘密),在左侧栏中找到(🔑). 创建一个名为OPENAI_API_KEY的秘密,将API密钥粘贴到值字段中,并打开“Notebook access”。
- 安装并导入所需的库。
管道架构
在这个实现中,我们将使用LangChain的链抽象将管道中的一系列步骤链接在一起。我们的管道链由4个组件组成:图像加载组件、提示生成组件、MLLM调用组件和将LLM输出解析为结构化格式的解析器组件。链中每个步骤的输入和输出通常被构造为字典,其中键表示参数名称,值是实际数据。让我们看看它是如何工作的。
图像加载组件
第一步是加载图像并将其转换为base64编码,因为GPT-4要求图像采用基于文本的(base64)格式。
def image_encoding(inputs):
"""Load and Convert image to base64 encoding"""
with open(inputs["image_path"], "rb") as image_file:
image_base64 = base64.b64encode(image_file.read()).decode("utf-8")
return {"image": image_base64}
输入参数是包含图像路径的字典,输出是包含based64编码图像的字典。
使用Pydantic定义输出结构
我们首先使用一个名为Vehicle的类指定所需的输出结构,该类继承自Pydantic的BaseModel。每个字段(例如,类型、许可证、品牌、型号、颜色)都使用字段定义,这使我们能够:
- 指定输出数据类型(例如str、int、list等)。
- 提供LLM字段的描述。
- 包括示例来指导LLM。
这个。。。每个字段中的(省略号)表示该字段是必需的,不能省略。
这个类大概如下:
class Vehicle(BaseModel):
Type: str = Field(
...,
examples=["Car", "Truck", "Motorcycle", 'Bus'],
descriptinotallow="Return the type of the vehicle.",
)
License: str = Field(
...,
descriptinotallow="Return the license plate number of the vehicle.",
)
Make: str = Field(
...,
examples=["Toyota", "Honda", "Ford", "Suzuki"],
descriptinotallow="Return the Make of the vehicle.",
)
Model: str = Field(
...,
examples=["Corolla", "Civic", "F-150"],
descriptinotallow="Return the Model of the vehicle.",
)
Color: str = Field(
...,
example=["Red", "Blue", "Black", "White"],
descriptinotallow="Return the color of the vehicle.",
)
解析器组件
为了确保 LLM 输出符合我们预期的格式,我们使用JsonOutputParser类进行初始化Vehicle。此解析器验证输出是否遵循我们定义的结构,验证字段、类型和约束。如果输出与预期格式不匹配,解析器将引发验证错误。
该parser.get_format_instructions()方法根据类中的架构生成一串指令Vehicle。这些指令将成为提示的一部分,并将指导模型如何构造其输出以便对其进行解析。您可以instructions 在 Colab 笔记本中查看变量内容。
parser = JsonOutputParser(pydantic_object=Vehicle)
instructions = parser.get_format_instructions()
提示生成组件
我们管道中的下一个组件是构建提示。提示由系统提示和人工提示组成:
- 系统提示:在中定义SystemMessage,我们用它来建立AI的角色。
- 人性化提示:定义在HumanMessage,由3部分组成:1)任务描述2)我们从解析器中提取的格式指令,以及3)base64格式的图像,以及图像质量detail参数。
参数detail控制模型如何处理图像并生成其文本理解 [5]。它有三个选项:low,high或auto:
- low:该模型处理低分辨率(512 x 512 像素)版本的图像,并使用 85 个标记的预算来表示图像。这允许 API 返回更快的响应并消耗更少的输入标记。
- high:该模型首先分析低分辨率图像(85 个标记),然后使用每 512 x 512px 图块 170 个标记来创建详细裁剪。
- auto:默认设置,其中low或high设置由图像大小自动选择。
对于我们的设置,low分辨率已经足够,但其他应用程序可能会受益于high分辨率选项。
以下是提示创建步骤的实现:
@chain
def prompt(inputs):
"""Create the prompt"""
prompt = [
SystemMessage(cnotallow="""You are an AI assistant whose job is to inspect an image and provide the desired information from the image. If the desired field is not clear or not well detected, return none for this field. Do not try to guess."""),
HumanMessage(
cnotallow=[
{"type": "text", "text": """Examine the main vehicle type, make, model, license plate number and color."""},
{"type": "text", "text": instructions},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{inputs['image']}", "detail": "low", }}]
)
]
return prompt
@chain 装饰器用于指示该函数是 LangChain 管道的一部分,该函数的结果可以传递给工作流中的步骤。
MLLM 组件
管道中的下一步是使用该MLLM_response函数调用 MLLM 从图像中生成信息。
首先,我们使用 初始化多模态 GTP-4 模型ChatOpenAI,其配置如下:
- model指定 GPT-4 模型的确切版本。
- temperature设置为 0.0 以确保确定性的响应。
- max_token将输出的最大长度限制为 1024 个标记。
model.invoke接下来,我们使用组装好的输入(包括图像和提示)调用 GPT-4 模型。该模型处理输入并返回图像中的信息。
@chain
def MLLM_response(inputs):
"""Invoke GPT model to extract information from the image"""
model: ChatOpenAI = ChatOpenAI(
model="gpt-4o-2024-08-06",
temperature=0.0,
max_tokens=1024,
)
output = model.invoke(inputs)
return output.content
构建管道链
定义完所有组件后,我们将它们与|运算符连接起来,构建管道链。该运算符按顺序将一个步骤的输出链接到下一个步骤的输入,从而创建顺畅的工作流程。
基于单幅图像进行推理
现在到了最有趣的部分!我们可以通过将包含图像路径的字典传递给该方法来从车辆图像中提取信息pipeline.invoke。它的工作原理如下:
output = pipeline.invoke({"image_path": f"{img_path}"})
输出是一本包含车辆详细信息的字典:
为了进一步与数据库或 API 响应集成,我们可以轻松地将输出字典转换为 JSON:
json_output = json.dumps(output)
对一批图像进行推理
LangChain 允许您同时处理多幅图像,从而简化了批量推理。为此,您应该传递包含图像路径的字典列表,并使用以下命令调用管道pipeline.batch:
# Prepare a list of dictionaries with image paths:
batch_input = [{"image_path": path} for path in image_paths]
# Perform batch inference:
output = pipeline.batch(batch_input)
生成的输出字典可以轻松转换为表格数据,例如 Pandas DataFrame:
df = pd.DataFrame(output)
我们可以看到,GPT-4 模型正确识别了车辆类型、车牌、品牌、型号和颜色,提供了准确且结构化的信息。如果细节不清晰(如摩托车图像),它会按照提示返回“无”。
在本教程中,我们学习了如何从图像中提取结构化数据,并用它来构建车辆文档系统。同样的原则也可以适用于其他各种应用。我们使用了 GPT-4 模型,该模型在识别车辆细节方面表现出色。然而,我们基于 LangChain 的实现非常灵活,可以轻松与其他 MLLM 模型集成。虽然我们取得了良好的结果,但重要的是要时刻注意基于 LLM 的模型可能出现的潜在分配问题。
完整代码:
https://gist.github.com/Lihi-Gur-Arie/5a317ce5db413a586fa56583541ae01
#SeeClick
南京大学和上海AI实验室便基于这个需求提出并构建了一个基于大规模视觉语言模型(LVLM)的视觉 GUI 智能体SeeClick,像人类一样仅仅通过视觉观察屏幕执行点击、输入等操作。
标题:《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》
论文:https://arxiv.org/pdf/2401.10935.pdf
源码:https://github.com/njucckevin/SeeClick
导读
操作手机电脑等图形用户界面(GUI)是人类日常生活的重要部分。
今天,由南京大学和上海AI实验室便基于这个需求提出并构建了一个基于大规模视觉语言模型(LVLM)的视觉 GUI 智能体SeeClick
,像人类一样仅仅通过视觉观察屏幕执行点击、输入等操作。
背景
图形用户界面(GUI)Agent的目标是在电脑、手机等图形界面上根据指令一步步完成任务。近期许多工作尝试了基于LLM的GUI Agents,其中一个关键问题是:如何将模型的输出转化为图形界面中可执行的动作(action grounding)?
当前绝大多数方法需要获取图形界面的元数据(例如网页的html)以进行交互;然而,图形界面元数据有时难以获取(例如水果家的手机系统和桌面端应用),而且往往需要繁琐的处理。
说到这,我们先来看下 SeeClick 是怎么执行的:
可以看出,SeeClick 直接借助了视觉-语言大模型的能力并观察 Screenshot 来生成点击位置。
下面我们一起简单的看下它的实现原理。
方法
本文探索了一种全新的基于视觉的交互方式,像人类一样,仅仅通过观察手机或电脑屏幕直接生成下一步动作,例如点击指定位置、输入文本等。
构建此类智能体的一个核心挑战便是 GUI grounding
,即根据指令在屏幕上定位元素的能力。
为此,SeeClick 基于大规模视觉-语言模型(LVLM),通过在精心收集的 GUI grounding 数据上训练以增强其 GUI 定位能力,最终能够在 iOS、Android、电脑操作系统和网页等各种 GUI 上准确地根据指令定位操作元素。
那么,GUI Grounding 数据如何构建呢?
GUI Grounding Data
GUI grounding 是构建视觉 agent的核心挑战。尽管最新的LVLM在自然图像上有着不错的grounding能力,由于GUI截图和自然图像的显著差异,它们在GUI场景下的grounding能力并不理想(详情请见后续实验部分说明)。
文本探索如何更好地赋予LVLM GUI grounding的能力以构建视觉agent,为此,作者们收集并开源了一份包含web、mobile环境的GUI grounding预训练数据,欢迎大家在训练中使用以增强视觉-语言模型定位屏幕元素的能力。
对于Web数据,格式各样的网站有着不同的布局和设计风格,非常适合训练LVLM通用GUI能力。此外,我们从Common Crawl中收集了大约300k个网站,对于每个网站,我们从HTML中收集两类元素
- 可交互且包含text属性的元素。
- 可交互且包含title属性的元素,代表当鼠标悬停在该元素上时会显示一段描述文本。
通过这两种方式,我们收集了screenshot-指令-操作元素样本,且包含了各种各样的文本和图标,如下图所示。
对于Mobile数据,则整理了已有公开数据集以获得mobile上的grounding数据,主要包括Widget-Captioning数据集和自动化收集的RICO数据集。进一步丰富了GUI场景和元素类型。
GUI Grounding Benchmark
ScreenSpot
是本文的另一重大贡献,被设计用于评估视觉-语言模型根据指令定位屏幕元素的能力,这是首个涵盖iOS、Android、macOS、Windows和Web场景的GUI grounding benchmark。与Mind2Web[1]不同的是,ScreenSpot在不同场景下的分辨率不同。数据集包含超过600个Screenshot和超过1200条指令。
从上述结果可以明显的看出,经过设计的GUI Grounding预训练之后,SeeClick相比LVLM基线展现了优越的性能。
实验
除了上面SeeClick在GUI grounding能力上的提升,本文在三个广泛使用的GUI agent benchmarks:MiniWob[2]、AITW[3]和Mind2Web上测试了SeeClick的性能。
实验结果表明,提升GUI grounding能力是提升agent任务性能的关键因素(如下图所示):SeeClick相比基线Qwen-VL[4]取得了显著的性能提升,表明了本文提出的GUI pre-training策略的有效性和纯视觉方案在GUI任务自动化上的潜力。具体而言,在MiniWob上SeeClick只用了千分之三的数据量即超过了之前的视觉SOTA方案Pix2Act。
鉴于本文使用了Qwen-VL作为基座,我们还额外提供了GUI pre-training前后的性能对比。
上述是与更多strong baselines的对比,更多细节请参考原文。
应用
SeeClick 的应用相对也比较简单,大家在安装完环境之后,可以参考下述执行指令:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-VL-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("SeeClick-ckpt-dir", device_map="cuda", trust_remote_code=True, bf16=True).eval()
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-VL-Chat", trust_remote_code=True)
img_path = "assets/test_img.png"
prompt = "In this UI screenshot, what is the position of the element corresponding to the command \"{}\" (with point)?"
# prompt = "In this UI screenshot, what is the position of the element corresponding to the command \"{}\" (with bbox)?" # Use this prompt for generating bounding box
ref = "add an event" # response (0.17,0.06)
ref = "switch to Year" # response (0.59,0.06)
ref = "search for events" # response (0.82,0.06)
query = tokenizer.from_list_format([
{'image': img_path}, # Either a local path or an url
{'text': prompt.format(ref)},
])
response, history = model.chat(tokenizer, query=query, history=None)
print(response)
这里预测输出代表的是(x, y)坐标点或者(左, 上, 右, 下)的边界框,每个值都是[0, 1]范围内的小数,表示对应位置与图像宽度或高度的比例。我们推荐使用点预测,因为SeeClick主要是为了预测图形用户界面(GUI)上的点击点而训练的。
同时,本文也提供了如何微调 SeeClick 的方法,详情请参考仓库主页。
[1] Mind2Web: Towards a Generalist Agent for the Web https://arxiv.org/abs/2306.06070
[2] World of Bits: An Open-Domain Platform for Web-Based Agents https://proceedings.mlr.press/v70/shi17a.html
[3] Android in the Wild: A Large-Scale Dataset for Android Device Control https://arxiv.org/abs/2307.10088
[4] Qwen-VL: https://github.com/QwenLM/Qwen-VL
#SCNet
1×1卷积可以用来干什么?本文设计了一种完全基于1×1卷积的极简深度神经网络,实现了轻量图像超分辨率重建。
论文链接:https://arxiv.org/abs/2307.16140
代码链接:https://github.com/aitical/scnet
1. 引言
随着深度学习技术的飞速发展,单图超分辨率(SISR)技术取得显著进展。基于卷积神经网络的SISR方法如SRCNN, 从低分辨率(LR)输入学习到高分辨率(HR)输出的映射,并取得了比传统方法更优的性能。然而,这些基于CNN的模型通常需要深层或复杂的网络结构来提升性能,这不可避免地导致了模型参数和计算成本的大量增加,使得这些模型难以部署在移动或边缘设备等资源受限环境。现有的轻量化方法设计通常关注减少模型参数数量或浮点运算(FLOPs)来实现轻量化的神经网络。然而,绝大多数基于卷积神经网络的超分辨率模型使用3×3或者更大的卷积核来提升性能。大核卷积可以提升性能,但同时也会快速增加参数数量和计算成本。相对地,1×1卷积可以极大程度的减少参数数量,但却因固定的感受野和缺失局部特征聚合而限制了其学习能力。该工作提出了全1×1卷积的轻量化图像超分辨率模型。
为了解决1×1卷积特征提取能力的局限性,我们引入了无参数的空间位移操作。将输入特征图沿着通道维度分成不同的组,并对每个组应用不同方向的空间位移操作。这样确保了输出特征图中的每个像素沿着通道维度都可以获得近邻特征聚合,从而弥补了相较于3×3卷积在表示能力上的差距。我们将这种通过空间位移操作实现局部特征聚合的1×1卷积称为移位卷积(Shift-Conv Layer, 简称SC Layer)。与常规3×3卷积相比,SC层在保持可比性能的同时,可显著减少参数数量和计算量。
2. 方法
图1 SCNet的总体结构
图像超分辨率旨在将LR图像 转换为相应的HR图像 ,从而生成SR结果 。本文提出了一个全逐点卷积实现的轻量级图像超分辨率网络SCNet。参照现有基于卷积神经网络的一般架构设计,SCNet主要包含了:浅层特征提取、深层特征提取和HR图像重建模块三部分组成,具体实现如图1所示。
2.1 整体框架
给定一个低分辨率图像,首先浅层特征提取器将其映射到指定的隐层特征空间,得到特征图。接着,浅层特征图通过深层特征提取器,提取深层特征图。最后,使用高分辨图像重建模块对深层特征进行上采样,获得最终的超分辨率结果。学习的目标函数是最小化超分辨率结果与目标高分辨图像的误差。本文提出的SCNet的整体框架和训练过程如上所述,下面介绍移位卷积和移位残差单元的具体实现细节。
2.2 移位卷积层
图2 空间移位操作示意
移位卷积包含逐点卷积和空间移位操作。通过空间移位操作沿着通道方向实现近邻特征对齐,从而实现局部特征聚合。具体的空间移位操作实现如图2所示。对输入特征图首先进行通道拆分,均匀划分为N组,N这里表示移位的近邻特征数量。为了与3×3卷积保持一致,我们默认采取八组。接着对不同的组分别沿着不同的方向移动指定步长。如图2所示,沿着不同方向移动后实现了对应位置处近邻特征的聚合。在这里,为了跟3×3卷积保持一致,采用8个方向和步长为1作为默认设置。值得注意的是,移位卷积相较于3×3卷积,不仅实现了局部特征聚合,通过控制移位的特征点位选取,还可以进一步扩展到长距特征关系提取。
图3 (a)残差单元和(b)本文提出的移位残差单元
2.3 移位残差单元
基于上述的移位卷积层,我们将标准残差结构中的3×3卷积全部替换成逐点卷积,其中嵌入空间移位操作。改进后的移位残差单元包含一个移位卷积和一个逐点卷积以及激活层,具体的实现细节见图3。基于移位残差单元,我们通过堆叠不同的移位残差块实现了不同规模的SCNet。
3 实验
3.1 实验设置
数据集和指标。 我们的模型是在DIV2K和Flickr2K上训练,训练数据共包含3450张高分辨率图像。本文验证了2倍、3倍和4倍超分辨率模型。训练时将输入低分辨图像裁剪至64×64大小的块。测试时利用峰值信噪比(PSNR)和结构相似度(SSIM)指标作为评估指标,并在YCbCr空间的Y通道进行计算。
实验细节。 我们堆叠不同大小的移位残差单元实现了不同规模的轻量级SCNet,其中最小的模型SCNet-T是16个64通道的移位残差块实现,基础模型SCNet-B是64个64通道的移位残差块实现,最大的SCNet-L是32个128维的移位残差块实现。
图4 SCNet与其他方法的主观结果对比
3.2 对比试验
主观结果。 图4显示了从_Urban100_选择的几张图像的4倍超分辨率结果。可以看到,SCNet超分辨率结果相较于其他CNN方法有着更清晰的主观效果。同时,对于一些边缘和纹理部分,SCNet也都能更好地重建出来。
客观结果。 表1~3提供了2倍3倍和4倍超分辨率任务的结果,可以看到提出的SCNet在不同模型容量下均可以取得更好的性能和模型容量的平衡。相较于广泛作为基准的IMDN和SRResNet,SCNet-L分别提升了0.26 dB和0.28 dB。此外,定量的客观结果中我们按照方法模型的大小进行了划分,以4倍超分辨率为例,可以看到在不同规模的方法比较中,SCNet都取得了非常好的效果。尤其是SCNet-B,仅有700K不到的参数就已经超过了现有CNN方法,除了在Set5上比LBNet低一些,但是LBNet包含了更多的参数。此外,具体的计算复杂度对比总结在表2中。可以看到,不同规模的SCNet在性能和计算复杂度上取得了更好的平衡。与小参数量的LAPAR-C相比,SCNet-T包含较多参数时却拥有更低的计算复杂度。与较大的SRResNet相比,SCNet-L拥有更少的参数量和计算复杂度,并且取得了更好的效果。这是因为逐点卷积计算量和参数量是3×3卷积的九分之一,我们扩展出更深的拟合能力更强的SCNet,尤其是SCNet-B,堆叠了64个移位残差单元,仅SRResNet三分之一的计算量就取得了更好的超分辨率结果。
表3 4倍超分辨率客观指标结果
3.3 消融分析
为了验证提出的SCNet中每个成分的作用,我们进一步进行了一系列消融研究。
移位卷积分析。 首先,分析了移位卷积中不同移动策略的影响。我们设计了5种不同的移动策略如图5所示。这里我们选取了4个点位,并且拆分成了不同方向的两组,如图5(a)和图5(b)所示。默认采用的8个点位如图5(c)所示,进一步地我们扩展了移动步长,得到了图5(d)。最后,我们将图5(c)和图5(d)中的点位进行合并,得到图5(e)来验证点位数量的影响。具体的结果展示在表4中。我们可以看到,不同的移位操作设置对模型最终的性能有着重大影响。当移位操作仅选取4个点位时,SCNet指标整体下降。这是因为仅选取4个点位的特征难以有效建模近邻关系。相较于默认的8点位,空洞8点位的移位设置取得了更好的效果。我们认为这主要是由于空洞移位引入了更大的感受野。这也验证了移位操作可以通过设计不同的参数先验,甚至获取长距离关系建模,相较于一般的卷积有着更好的灵活性。最后,采用16点位的SCNet的整体效果下降了,这主要是由于16点位需要将特征划分成16组,此时每组的特征数量太少难以进行有效的关系建模。
模型容量分析。 得益于移位卷积仅需要非常少的参数量和计算量,我们可以很轻松地对SCNet进行扩展,这里主要消融SCNet的可扩展性。我们设计了不同大小的SCNet,并在4倍超分辨率任务上进行验证,客观指标展示在表5中。可以发现,仅由逐点卷积实现的SCNet有着良好的可扩展性,可以有效地扩展到不同规模的参数量。这里我们从深度和宽度(特征维度)两方面进行消融验证,总的来说,扩充深度带来的收益要比使用更大的特征维度更好。
表5 不同模型大小的SCNet消融分析结果
3 结论
本文提出了一个完全使用逐点卷积实现的轻量级图像超分辨率网络SCNet。与一般的3×3卷积相比,逐点卷积包含的参数更少,计算成本也更低,但缺失了局部特征融合这一关键特性。为了解决这个问题,我们通过空间移位操作扩展了逐点得到移位卷积,通过手动特征聚合使其具有了特征聚合的能力,而且空间移位操作是没有额外计算成本的。基于移位卷积,我们替换标准残差结构中的3×3卷积并提出了移位残差单元。通过堆叠不同规模的移位残差单元实现了不同模型大小的SCNet。最后在多个公开测试数据集上提出的SCNet取得了最好的结果。此外,我们也通过详细的消融分析,验证了本文提出的不同模块的有效性。
#Wear-Any-Way
本文提出了一种名为Wear-Any-Way的虚拟试穿的新型框架。与以往的方法不同,Wear-Any-Way是一种可自由定制的试衣方案。除了生成高保真度的结果外,该方法还支持用户对穿着方式进行精准控制。
Wear-Any-Way: Manipulable Virtual Try-on via Sparse Correspondence Alignment
项目主页地址:https://mengtingchen.github.io/wear-any-way-page/
Arxiv地址:https://arxiv.org/abs/2403.12965
机构单位:阿里巴巴 拍立淘团队
我们提出了一种名为Wear-Any-Way的虚拟试穿的新型框架。与以往的方法不同,Wear-Any-Way是一种可自由定制的试衣方案。除了生成高保真度的结果外,该方法还支持用户对穿着方式进行精准控制。为了实现这一目标,我们首先构建了一个强大的标准虚拟试衣baseline,支持在复杂情景中进行单个/多个服装进行试穿。为了使上身状态能够被自由控制,我们提出了稀疏关系对齐方案,基于对应点的控制来引导特定部位的生成。通过这种设计,Wear-Any-Way在标准设定下达到了最先进的性能,并为定制化试衣提供了一种新颖的交互形式。例如,它支持用户拖动袖子使其挽起,拖动外套使其打开衣门襟,或者利用点击来控制下摆的扎穿形式等。Wear-Any-Way实现了更自由和灵活的服饰表达,对试衣算法在时尚行业落地有着重要的意义。
图1
效果展示
1. 对应点的控制
图2
Wear-Any-Way 支持用户在服装图像和人物图像上输入控制点对,以实现对上身状态的精准控制,为现实应用落地带来了更大的潜力和想象空间。
2. 拖拽控制
图3
图4
对于基于点击的控制,用户提供服装图像、人物图像和点对以定制生成结果。当用户拖动图像时,起始点和终点被分别视为服装图像和人物图像上的控制点,解析分割后的服装被视为服装图像输入。因此,拖动操作可以转换为基于点击的设置。
3. 自动控制
图5
我们可以通过结合人体关键点和密集姿势来计算控制点的位置。基于此我们可以通过设置不同的超参数来实现自动控制穿着风格。
4. 单件多场景试衣
图6
Wear-Any-Way 支持多种输入类型,包括平铺图到模特、模特图到模特、平铺图到街拍、模特图到街拍、街拍到街拍等。无论输入图像是什么形式,目标模特图的背景姿态如何复杂,我们的方案都能给出优质的生成结果。
5. 搭配多场景/各姿态试衣
图7
Wear-Any-Way使用户能够同时提供上衣和下衣,并在一次推理中获得整套搭配试穿结果。和单件试穿一样,我们对服饰输入形式和目标人像的场景和姿态都有非常强的泛化能力。
背景
虚拟试穿旨在合成特定人物穿着所提供服装的图像。对时尚行业落地具有重要影响,为消费者提供了一种沉浸式和交互式的方式,让他们在不亲身试穿的情况下就能真切感受服装的上身效果,同时也可以为服饰商品的模特图拍摄提供全新的方式。
之前大多数解决方案仅支持简单情况,例如输入为简单纹理的精心摆放的单个服装。对于具有复杂纹理或图案的服装,现有解决方案通常无法保证细节的保真度。此外,大多数以前的解决方案没有解决在实际应用中面临的挑战,如模特到模特的试衣、多件服装的搭配试衣、复杂的人体姿势和复杂的场景等。
此外,以前的方法无法对穿着方式进行有效控制。在时尚领域,实际的上身风格具有重要意义。例如,袖子挽起或者放下,上衣的扎穿或者叠穿,外套衣门襟的闭合,这些特定的穿着方式可以展示出同一件服装的不同状态,为服饰的上身表达提供了更高的自由度,能更加贴近服饰本身的风格和用户的偏好。
因此在这项工作中,我们提出了一种新颖的虚拟试穿框架 Wear-Any-Way,一举解决了前述的两个挑战。Wear-Any-Way 可作为标准虚拟试穿的strong baseline,它能生成高质量的图像并保留了服装上图案的精细细节。此外,他还是实际应用中一种更通用的解决方案,支持各种子任务,如模特到模特的试衣、多件服装的搭配试衣,以及像街拍/坐姿这样的复杂情景。最重要的特点是 Wear-Any-Way 支持用户定制穿着风格。如图 1 所示,用户可以使用简单的交互,如点击和拖动,来控制袖子的挽起、外套的开合程度,甚至是扎穿的方式。
总的来说,我们的贡献可以总结为三个方面:
我们构建了一个新颖的框架 Wear-Any-Way,生成高质量的试衣结果并支持用户精确控制上身状态。
我们提出了一个强大、灵活、鲁棒的虚拟试穿baseline,通过与以前方法的广泛比较达到了最先进的水平。
我们设计了稀疏对应对齐以实现基于对应点的控制,并进一步开发了几种策略(如条件丢弃、零初始化、点加权损失)有效增强了生成流程的可控性。
方法
图8
1. 试衣整体流程
我们的baseline由两个分支组成。主分支是使用的是inpainting扩散模型。它以一个9通道tensor作为输入,其中包括4个通道的潜在噪声,4个通道的待试衣图像 (即,mask服装区域的人物图像),以及1个通道的二进制掩码(表示需要重绘区域)。原始的Stable Diffusion使用文本嵌入作为条件来指导扩散过程。相反,我们用由CLIP图像编码器提取的服装图像嵌入替换了文本嵌入。
CLIP图像嵌入可以保证服装的整体颜色和大致纹理,但无法很好地保留服饰细节信息。因此,我们还使用一个Reference U-Net来提取服装的细粒度特征。我们的Reference U-Net是一个标准的文本到图像的扩散模型。我们在每个block通过将主U-Net和Reference U-Net的“key”和“value”进行拼接的方式对两部分特征进行融合。
为了进一步提高生成效果,我们添加了人体姿势图作为额外的控制。我们构建了一个小型卷积网络来提取姿势图的特征,并直接将其添加到主U-Net的潜在噪声中。
2. 稀疏关系对齐模块
我们在扩散过程中引入了一种稀疏关系对齐机制。具体来说,给定成对的控制点,一个点标记在服装图像上,另一个点标记在人物图像上。我们利用这两个点之间的对应关系来控制生成结果:服装的标记位置将与人物图像上的目标位置匹配。通过这种方式,用户可以通过操作多个点对来精确控制服饰上身的状态。
如图8所示,我们首先学习一系列点的嵌入,以表示控制点对。随后,我们将这个控制信号注入到主U-Net和Reference U-Net中。这个注意力层使得从Reference U-Net提取的服装特征能够被整合到主U-Net中。为了使点引导的对应控制起作用,我们通过将模特和服装的关系点嵌入添加到“query”和“key”中对相应信息进行融合,让模型在将服装特征整合到主U-Net的同时受控于点对的对应关系,让服装的点所在的特征可以与模特图像上的点的位置对齐。因此,用户可以通过点击和拖动来控制生成结果。
3. 训练策略
为了提高模型对对应关系的学习效率,我们提出了几种优化策略。
条件drop:我们观察到,即使没有点对的指导,mask的形状和姿态图在一定程度也提供了一些状态信息。为了强制模型从控制点中学习,我们提高了放弃姿势图的概率,并增大遮罩范围,将其扩大为围绕遮罩的矩形框。
零初始化:将点嵌入添加到注意力的“key”和“value”中会导致训练优化初期的不稳定性。为了实现渐进性的融合,受到 ControlNet的启发,我们在点嵌入网络的输出处添加了一个零初始化的卷积层。这种零初始化带来了更好的收敛效果。
点加权损失:为了增强对点对的可控性,我们增加了围绕人物图像上控制点附近的损失权重。
图9
4. 训练过程中对应点的收集
确保获得精确匹配的点对于上述训练是至关重要的。主要的挑战在于服装是非刚体,上身过程中服装会发生较大的形变。先前的virtual matching/correspondence learning方法只能处理像建筑物这样的刚性对象。
服饰关键点检测方法可以进行点的定位,但是它们只能检测到少量预定义的关键点,无法生成用于真正高自由度,灵活的控制。
我们利用孪生文本到图像的扩散模型分别从人物图像和服装图像中提取特征。我们采用最后一层的特征图,并在多个时间step上ensemble预测结果以获得稳定准确的匹配结果。给定人物图像上的一个点,我们选择在服装图像上具有最大余弦相似度的相应点作为对应点。匹配结果如图9所示。
实验
1. 标准试衣设置下的对比
图10
如图10所示,Wear-Any-Way 在生成质量和细节保留方面明显优于其他方案。
2. 对穿着方式的控制能力评测
图11
我们使用服饰关键点在服饰图像和模特图像(第一、第二列)上标记相应的关键点作为控制点(绿色)。同样的关键点检测模型也用于生成的结果(第三、第四列,红色)。我们计算红点和绿点之间的距离来评估控制能力。如图11所示,和不加任何控制的模型相比,Wear-Any-Way能对服饰的上身状态进行有效控制。
展望
Wear-Any-Way在虚拟试衣领域显著提升了试衣效果,对各种服饰输入形式(平铺图,模特图等)和目标模特状态(棚拍图/街拍图,站姿/坐姿)都能产出高质量的试衣结果。同时,通过其精准控制能力,可以为不同的服饰自定义不同的穿着方式,让服饰的展示状态更加贴合服饰特点和用户偏好。未来为了能进一步实现比拟专业模特的服饰展示效果,我们将进一步拓展试穿类目,同时实现对身材,风格,场景等各维度的控制能力。
#D-Net
作者引入了D-Net用于体积分割医学图像,通过将动态大核模块和动态特征融合模块整合到分层 Transformer 架构中。
分层 Transformer 在医学图像分割中已取得了显著的成功,这归功于它们的大接收域以及有效利用全局长距离上下文信息的能力。卷积神经网络(CNNs)也可以通过使用大核来获得大的接收域,这使得它们能够在较少的模型参数下达到具有竞争力的性能。
然而,融入了大卷积核的CNN仍然受限于自适应地捕捉形状和大小变化较大的器官的多尺度特征,这是由于它们采用了固定大小的核。此外,它们也无法高效地利用全局上下文信息。为了解决这些限制,作者提出了动态大核(DLK)和动态特征融合(DFF)模块。DLK模块使用多个具有不同核大小和膨胀率的的大核来捕捉多尺度特征。随后,使用动态选择机制根据全局信息自适应地强调最重要的空间特征。
此外,还提出了DFF模块,以根据它们的全局信息自适应地融合多尺度局部特征图。作者将DLK和DFF集成在分层 Transformer 架构中,以开发出一种新颖的架构,称为D-Net。D-Net能够有效地利用多尺度大接收域并自适应地利用全局上下文信息。广泛的实验结果表明,D-Net在两个体积分割任务中的表现优于其他最先进的模型,包括腹部多器官分割和多模态脑肿瘤分割。
代码:https://github.com/sotiraslab/DLK
1 Introduction
视觉 Transformer (ViTs)的发展在计算机视觉任务上带来了显著的改进[8]。ViTs成功的关键因素是注意力机制,这使得基于ViT的模型拥有大的感受野,能够利用全局上下文信息贯穿整个输入图像。然而,由于在处理高分辨率图像时自注意力的计算复杂性高,ViTs在作为通用 Backbone 网络上面临着挑战。为了降低ViTs的复杂性,已经提出了分层ViTs。它们在建模不同尺度上的密集特征时更为高效,用线性复杂度近似自注意力。由于其卓越的性能,分层ViTs最近被用作医学图像分割的 Backbone 网络。然而,注意力机制常常限制了(分层)基于ViT的模型在有效提取局部上下文信息方面的能力。
另一种广泛使用的主干网络,卷积神经网络(CNN),在局部特征提取方面具有优势。然而,CNN的感受野受限于较小的卷积核。为了扩大它们感受野,引入了大的卷积核(LCK)并将其整合到CNN架构中。目前,基于LCK的CNN在医学图像分割中受到了关注。然而,这些网络依赖于单一固定大小的大核进行特征提取,这限制了它们捕捉具有大器官间和受试者间在形状和大小上变异的多尺度特征的能力。此外,它们缺乏增强局部特征与全局上下文信息之间交互的机制。
为了解决这些限制,作者提出了动态大核(DLK)和动态特征融合(DFF)模块。在DLK中,作者建议使用多个不同大小的深度卷积大核。这些核使得网络能够捕捉多尺度的上下文信息,有效地处理在形状和大小上的较大变化。与Atrous Spatial Pyramid Pooling (ASPP) 或其他并行设计中并行聚合这些核的方式不同,作者顺序地聚合多个大核以扩大感受野。随后,基于动态机制的思想,作者引入了一种空间上的动态选择机制,以根据全局上下文信息自适应地选择最有信息量的局部特征。
此外,DFF模块被采用以基于全局信息自适应地融合多尺度特征。在融合过程中,使用了通道上的动态选择机制来保留重要的特征图,然后使用空间上的动态选择机制来突出重要的空间区域。作者将提出的DLK和DFF模块集成到一个分层 Transformer 架构中,称为D-Net,用于3D体积分割医学图像。作者在两个分割任务上评估了D-Net:腹部多器官分割和脑肿瘤分割。提出的模型优于 Baseline 模型。
作者的主要贡献有三个:
- 作者提出了一种用于通用特征提取的动态大核模块。DLK采用多个大型卷积核来捕捉多尺度特征。随后,它利用动态选择机制,根据全局上下文信息自适应地突出最重要的空间特征。
- 作者提出了一种用于自适应特征融合的动态特征融合模块。DFF通过动态选择机制,根据全局信息自适应地融合多尺度局部特征。
- 作者提出了一个用于3D体积分割的D-Net。D-Net通过将DLK和DFF模块整合到分层ViT架构中,采用分层转换行为,以较低的模型复杂度实现了卓越的分割精度。
2 Method
Dynamic Large Kernel (DLK)
DLK. 作者提出了动态大核(DLK)方法,通过大感受野自适应地利用空间上下文信息(图1)。具体来说,作者使用多个大型深度方向核来提取多尺度特征。
2.1.2 DLK module.
2.1.3 DLK block.
为了利用分层Vision Transformers (ViTs) 的缩放能力,DLK块是通过将标准分层ViT中的多头自注意力替换为所提出的DLK模块来构建的。生成的DLK块包括一个DLK模块和一个MLP模块。
Dynamic Feature Fusion (DFF)
D-Net Architecture
D-Net的整体架构包括一个编码器、一个瓶颈层、一个解码器以及一个显著性层(图3)。显著性层用于从原始图像中提取显著的空间特征,而编码器-解码器架构负责学习层次化的特征表示。
3.2.2 Encoder.
3.2.3 Bottleneck.
3.2.4 Decoder.
2.3.5 Salience layer.
3 Experiments and results
3.0.1 Datasets.
3.0.2 Implementation details.
D-Net是使用PyTorch5实现的。损失函数采用了骰子损失和交叉熵损失的组合。在腹部多器官分割中,使用了AdamW作为优化器。初始学习率设置为0.0001,并应用了学习率衰减策略(ReduceLROnPlateau)。
对于脑肿瘤分割,作者遵循了nnUNet 中的协议。使用SGD作为优化器。初始学习率设置为0.001,并使用多项式学习率调度器进行衰减。为了公平比较,所有实验都采用相同的设置并由作者实施。
3.0.3 Main results.
作者比较了D-Net与最近的几种最先进的分割模型在两个分割任务上的性能,包括3D U-Net (nnUNet) ,TransUNet,TransBTS,UNETR,nnFormer和3D UX-Net。
表1展示了在AMOS腹部多器官分割任务上的性能对比。D-Net以相对较少的FLOPs和最低的参数数量取得了最佳的整体性能。此外,D-Net在所有特定器官分割任务中的Dice得分都有显著提升。
表2展示了MSD脑肿瘤分割任务的结果。与其它分割方法相比,D-Net在所有分割任务上都展示了优越的性能。
3.3.2 Ablation study.
4 Conclusion
作者引入了D-Net用于体积分割医学图像,通过将动态大核模块和动态特征融合模块整合到分层 Transformer 架构中。动态大核块被采纳为基本块,用于通用多尺度局部特征提取和自适应的全局空间信息利用。此外,还提出了动态特征融合模块以实现自适应特征融合。在两个分割任务上,即腹部多器官分割和脑肿瘤分割,D-Net的表现优于当前流行的 Baseline 。作者相信D-Net有潜力在各类医学图像分割任务上实现令人期待的分割性能。
#HoT
高效三维人体姿态估计框架HoT,该框架可以即插即用无缝地集成到 MHFormer,MixSTE,MotionBERT 等模型中,降低模型近 40% 的计算量而不损失精度
目前,Video Pose Transformer(VPT)在基于视频的三维人体姿态估计领域取得了最领先的性能。近年来,这些 VPT 的计算量变得越来越大,这些巨大的计算量同时也限制了这个领域的进一步发展,对那些计算资源不足的研究者十分不友好。例如,训练一个 243 帧的 VPT 模型通常需要花费好几天的时间,严重拖慢了研究的进度,并成为了该领域亟待解决的一大痛点。
那么,该如何有效地提升 VPT 的效率同时几乎不损失精度呢?
来自北京大学的团队提出了一种基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT,用来解决现有视频姿态 Transformer(Video Pose Transformer,VPT)高计算需求的问题。该框架可以即插即用无缝地集成到 MHFormer,MixSTE,MotionBERT 等模型中,降低模型近 40% 的计算量而不损失精度
- 标题:Hourglass Tokenizer for Efficient Transformer-Based 3D Human Pose Estimation
- 论文地址:https://arxiv.org/abs/2311.12028
- 代码地址:https://github.com/NationalGAILab/HoT
研究动机
在 VPT 模型中,通常每一帧视频都被处理成一个独立的 Pose Token,通过处理长达数百帧的视频序列(通常是 243 帧乃至 351 帧)来实现卓越的性能表现,并且在 Transformer 的所有层中维持全长的序列表示。然而,由于 VPT 中自注意力机制的计算复杂度与 Token 数量(即视频帧数)的平方成正比关系,当处理具有较高时序分辨率的视频输入时,这些模型不可避免地带来了巨大的计算开销,使得它们难以被广泛部署到计算资源有限的实际应用中。此外,这种对整个序列的处理方式没有有效考虑到视频序列内部帧之间的冗余性,尤其是在视觉变化不明显的连续帧中。这种信息的重复不仅增加了不必要的计算负担,而且在很大程度上并没有对模型性能的提升做出实质性的贡献。
因此,要想实现高效的 VPT,本文认为首先需要考虑两个因素:
- 时间感受野要大:虽然直接减短输入序列的长度能够提升 VPT 的效率,但这样做会缩小模型的时间感受野,进而限制模型捕获丰富的时空信息,对性能提升构成制约。因此,在追求高效设计策略时,维持一个较大的时间感受野对于实现精确的估计是至关重要的。
- 视频冗余得去除:由于相邻帧之间动作的相似性,视频中经常包含大量的冗余信息。此外,已有研究指出,在 Transformer 架构中,随着层的加深,Token 之间的差异性越来越小。因此,可推断出在 Transformer 的深层使用全长的 Pose Token 会引入不必要的冗余计算,而这些冗余计算对于最终的估计结果的贡献有限。
基于这两方面的观察,作者提出对深层 Transformer 的 Pose Token 进行剪枝,以减少视频帧的冗余性,同时提高 VPT 的整体效率。然而,这引发了一个新的挑战:剪枝操作导致了 Token 数量的减少,这时模型不能直接估计出与原视频序列相匹配数量的三维姿态估计结果。这是因为,在传统的 VPT 模型中,每个 Token 通常对应视频中的一帧,剪枝后剩余的序列将不足以覆盖原视频的全部帧,这在估计视频中所有帧的三维人体姿态时成为一个显著的障碍。因此,为了实现高效的 VPT,还需兼顾另一个重要因素:
- Seq2seq 的推理:一个实际的三维人体姿态估计系统应当能够通过 seq2seq 的方式进行快速推理,即一次性从输入的视频中估计出所有帧的三维人体姿态。因此,为了实现与现有 VPT 框架的无缝集成并实现快速推理,需要保证 Token 序列的完整性,即恢复出与输入视频帧数相等的全长 Token。
基于以上三点思考,作者提出了一种基于沙漏结构的高效三维人体姿态估计框架,⏳ Hourglass Tokenizer (HoT)。总的来说,该方法有两大亮点:
- 简单的 Baseline、基于 Transformer 通用且高效的框架
HoT是第一个基于 Transformer 的高效三维人体姿态估计的即插即用框架。如下图所示,传统的 VPT 采用了一个 “矩形” 的范式,即在模型的所有层中维持完整长度的 Pose Token,这带来了高昂的计算成本及特征冗余。与传统的 VPT 不同,HoT 先剪枝去除冗余的 Token,再恢复整个序列的 Token(看起来像一个 “沙漏”),使得 Transformer 的中间层中仅保留少量的 Token,从而有效地提升了模型的效率。HoT 还展现了极高的通用性,它不仅可以无缝集成到常规的 VPT 模型中,不论是基于 seq2seq 还是 seq2frame 的 VPT,同时也能够适配各种 Token 剪枝和恢复策略。
- 效率和精度兼得
HoT揭示了维持全长的姿态序列是冗余的,使用少量代表性帧的 Pose Token 就可以同时实现高效率和高性能。与传统的 VPT 模型相比,HoT 不仅大幅提升了处理效率,还实现了高度竞争性甚至更好的结果。例如,它可以在不牺牲性能的情况下,将 MotionBERT 的 FLOPs 降低近 50%;同时将 MixSTE 的 FLOPs 降低近 40%,而性能仅轻微下降 0.2%。
模型方法
提出的 HoT 整体框架如下图所示。为了更有效地执行 Token 的剪枝和恢复,本文提出了 Token 剪枝聚类(Token Pruning Cluster,TPC)和 Token 恢复注意力(Token Recovering Attention,TRA)两个模块。其中,TPC 模块动态地选择少量具有高语义多样性的代表性 Token,同时减轻视频帧的冗余。TRA 模块根据所选的 Token 来恢复详细的时空信息,从而将网络输出扩展到原始的全长时序分辨率,以进行快速推理。
Token 剪枝聚类模块
本文认为选取出少量且带有丰富信息的 Pose Token 以进行准确的三维人体姿态估计是一个难点问题。
为了解决该问题,本文认为关键在于挑选那些具有高度语义多样性的代表性 Token,因为这样的 Token 能够在降低视频冗余的同时保留必要的信息。基于这一理念,本文提出了一种简单、有效且无需额外参数的 Token 剪枝聚类(Token Pruning Cluster,TPC)模块。该模块的核心在于鉴别并去除掉那些在语义上贡献较小的 Token,并聚焦于那些能够为最终的三维人体姿态估计提供关键信息的 Token。通过采用聚类算法,TPC 动态地选择聚类中心作为代表性 Token,借此利用聚类中心的特性来保留原始数据的丰富语义。
TPC 的结构如下图所示,它先对输入的 Pose Token 在空间维度上进行池化处理,随后利用池化后 Token 的特征相似性对输入 Token 进行聚类,并选取聚类中心作为代表性 Token。
Token 恢复注意力模块
TPC 模块有效地减少了 Pose Token 的数量,然而,剪枝操作引起的时间分辨率下降限制了 VPT 进行 seq2seq 的快速推理。因此,需要对 Token 进行恢复操作。同时,考虑到效率因素,该恢复模块应当设计得轻量级,以最小化对总体模型计算成本的影响。
为了解决上述挑战,本文设计了一个轻量级的 Token 恢复注意力(Token Recovering Attention,TRA)模块,它能够基于选定的 Token 恢复详细的时空信息。通过这种方式,由剪枝操作引起的低时间分辨率得到了有效扩展,达到了原始完整序列的时间分辨率,使得网络能够一次性估计出所有帧的三维人体姿态序列,从而实现 seq2seq 的快速推理。
TRA 模块的结构如下图所示,其利用最后一层 Transformer 中的代表性 Token 和初始化为零的可学习 Token,通过一个简单的交叉注意力机制来恢复完整的 Token 序列。
应用到现有的 VPT
在讨论如何将所提出的方法应用到现有的 VPT 之前,本文首先对现有的 VPT 架构进行了总结。如下图所示,VPT 架构主要由三个组成部分构成:一个姿态嵌入模块用于编码姿态序列的空间与时间信息,多层 Transformer 用于学习全局时空表征,以及一个回归头模块用于回归输出三维人体姿态结果。
根据输出的帧数不同,现有的 VPT 可分为两种推理流程:seq2frame 和 seq2seq。在 seq2seq 流程中,输出是输入视频的所有帧,因此需要恢复原始的全长时序分辨率。如 HoT 框架图所示的,TPC 和 TRA 两个模块都被嵌入到 VPT 中。在 seq2frame 流程中,输出是视频中心帧的三维姿态。因此,在该流程下,TRA 模块是不必要的,只需在 VPT 中集成 TPC 模块即可。其框架如下图所示。
实验结果
消融实验
在下表,本文给出了在 seq2seq(*)和 seq2frame(†)推理流程下的对比。结果表明,通过在现有 VPT 上应用所提出的方法,本方法能够在保持模型参数量几乎不变的同时,显著减少 FLOPs,并且大幅提高了 FPS。此外,相比原始模型,所提出的方法在性能上基本持平或者能取得更好的性能。
本文还对比了不同的 Token 剪枝策略,包括注意力分数剪枝,均匀采样,以及选择前 k 个具有较大运动量 Token 的运动剪枝策略,可见所提出的 TPC 取得了最好的性能。
本文还对比了不同的 Token 恢复策略,包括最近邻插值和线性插值,可见所提出的 TRA 取得了最好的性能。
与 SOTA 方法的对比
当前,在 Human3.6M 数据集上,三维人体姿态估计的领先方法均采用了基于 Transformer 的架构。为了验证本方法的有效性,作者将其应用于三个最新的 VPT 模型:MHForme,MixSTE 和 MotionBERT,并与它们在参数量、FLOPs 和 MPJPE 上进行了比较。
如下表所示,本方法在保持原有精度的前提下,显著降低了 SOTA VPT 模型的计算量。这些结果不仅验证了本方法的有效性和高效率,还揭示了现有 VPT 模型中存在着计算冗余,并且这些冗余对最终的估计性能贡献甚小,甚至可能导致性能下降。此外,本方法可以剔除掉这些不必要的计算量,同时达到了高度竞争力甚至更优的性能。
代码运行
作者还给出了 demo 运行(https://github.com/NationalGAILab/HoT),集成了 YOLOv3 人体检测器、HRNet 二维姿态检测器、HoT w. MixSTE 二维到三维姿态提升器。只需下载作者提供的预训练模型,输入一小段含有人的视频,便可一行代码直接输出三维人体姿态估计的 demo。
python demo/vis.py --video sample_video.mp4
运行样例视频得到的结果:
小结
本文针对现有 Video Pose Transforme(VPT)计算成本高的问题,提出了沙漏 Tokenizer(Hourglass Tokenizer,HoT),这是一种即插即用的 Token 剪枝和恢复框架,用于从视频中高效地进行基于 Transformer 的 3D 人体姿势估计。研究发现,在 VPT 中维持全长姿态序列是不必要的,使用少量代表性帧的 Pose Token 即可同时实现高精度和高效率。大量实验验证了本方法的高度兼容性和广泛适用性。它可以轻松集成至各种常见的 VPT 模型中,不论是基于 seq2seq 还是 seq2frame 的 VPT,并且能够有效地适应多种 Token 剪枝与恢复策略,展示出其巨大潜力。作者期望 HoT 能够推动开发更强、更快的 VPT。