【Efficient AIGC】SiTo: Similarity-based Token Pruning (AAAI-2025)
文章目录
- SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Pruning
- 背景
- 介绍
- 方法
- 结果
- 消融
文章目录
- SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Pruning
- 背景
- 介绍
- 方法
- 结果
- 消融
SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Pruning
Paper: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Pruning
Code: https://github.com/EvelynZhang-epiclab/SiTo/tree/main
背景
随着生成式模型,尤其扩散模型(Diffusion Models)的飞速发展,它们在图像生成、艺术创作、超分辨率等领域展现了巨大的潜力。然而,这些模型通常伴随着极高的计算成本,导致在边缘设备和实时应用中的部署面临巨大挑战。针对这一问题, SiTo(Similarity-based Token Pruning)
方法应运而生,它不仅大幅度加速了扩散模型的推理速度,还在不牺牲生成质量的情况下,显著降低了计算资源的消耗。
介绍
SiTo:加速扩散模型的创新解决方案
传统上,研究者们通过减少采样步数或压缩去噪网络等方式来降低扩散模型的计算开销。然而,这些方法往往在一定程度上牺牲了生成质量。SiTo提出了一种全新的思路,它通过引入基础令牌 (Base Token)
概念,自适应地剪去冗余的令牌,从而在保证高质量生成结果的同时实现显著加速。
SiTo的三大核心创新
(I) 最大相似性:基础令牌被选为一组与所有其他令牌具有最高相似性的令牌。此外,在选择基础令牌后,进一步选择与基础令牌相似度最高的令牌作为剪枝令牌。这个选择基础令牌和剪枝令牌的策略确保了高相似性,即基础令牌和剪枝令牌之间的差异较小,从而进一步最小化从基础令牌恢复剪枝令牌时的误差。
(II) 均匀空间分布:经典的图像分析研究表明,图像同一区域的图块携带相似的信息,这意味着在空间维度上相邻的令牌可能具有相似的表示,因此,用空间相邻的令牌来恢复剪枝令牌比使用远离的令牌更合适。因此,并不是直接从图像中的所有令牌中选择基础令牌,而是在图像的每个局部区域中选择一个基础令牌,以保证基础令牌在图像的不同空间位置上均匀分布。此外,由于基础令牌不会被剪枝,这种方案还确保了每个区域至少有一个令牌没有被剪枝,从而避免了令牌剪枝引入的误差过于集中。
(III) 带有随机性的选择:前两条原则有效地最小化了单个去噪步骤中令牌剪枝
带来的恢复误差。然而,扩散模型的采样过程包含多个去噪步骤,相邻的步骤具有相似的令牌表示。因此,基础令牌和剪枝令牌的选择在相邻时间步中可能非常相似,甚至是相同的。此外,如下图(b)所示,由于剪枝令牌是通过直接复制其最相似的基础令牌来恢复的,这些剪枝令牌往往会在所有后续的去噪步骤中保持较高的相似性,因此它们很可能在几乎所有的时间步中都被剪枝。这种极度不平衡的令牌剪枝可能会导致生成质量的显著下降。为了解决这个问题,提出在不同令牌的相似度上添加高斯噪声,在基础令牌选择过程中引入随机性。如下图(a)所示,这种方法将相邻两个时间步中剪去相同令牌的比例从97%降低到72%,有效避免了不平衡剪枝问题。
SiTo的显著优势
- 无损加速,内存压缩
SiTo的应用效果显著,尤其在COCO30K和ImageNet数据集上,展示了强大的加速效果和内存压缩能力。例如,在Stable Diffusion v1.5中,应用SiTo方法后,加速达1.9倍,同时实现了2.7倍的内存压缩,并且FID值降低了1.33,不仅加速了推理过程,还提升了生成质量。 - 硬件友好,低计算开销
SiTo方法采用的操作非常低成本,不会增加额外的内存占用,且计算复杂度极低,非常适合在GPU等硬件平台上并行计算。这使得SiTo在边缘设备和实时互动应用中的应用具有广泛的前景,尤其是对于需要快速响应的应用场景,SiTo无疑是一种理想的加速方案。 - 训练无关,数据无依赖
与传统的加速方法不同,SiTo完全不依赖训练数据或校准数据,它不需要额外的训练步骤和调整,因此具有极强的通用性和即插即用性。这一特点使得SiTo可以在不同的数据集、不同的模型以及不同的采样设置下自由应用,极大地拓展了其实际应用的范围。
方法
SiTo的方法流程:
- 基础令牌选择:
计算所有令牌之间的余弦相似度。对于每个令牌,将它与所有其他令牌的相似度求和,得到该令牌的相似度得分(SimScore)。接着,向相似度得分中添加高斯噪声,以引入随机性,防止在不同时间步中选择相同的基础令牌和剪枝令牌。最后,选择在图像区域中具有最高噪声相似度得分(Noise SimScore)的令牌作为基础令牌。 - 剪枝令牌选择:
选择与基础令牌最相似的令牌作为剪枝令牌。 - 剪枝令牌恢复:
将未剪枝的令牌输入到神经网络层,然后通过从最相似的基础令牌中复制来恢复剪枝令牌。
结果
-
视觉效果:SiTo 保留更多的图像细节,更加对齐文本提示,以及和原始模型生成的结果更吻合
-
数值结果
(1)在ImageNet数据集上的评估
将ToMeSD和SiTo应用于SD v1.5和SD v2。表1显示,SiTo在所有加速比设置下相比ToMeSD具有更低的FID得分、更高的加速比和更低的内存使用。在剪枝比率为0.7的情况下,SiTo在硬件上实现了1.9倍的加速和2.70倍的内存压缩,同时FID得分减少了1.33。
(2)在COCO30K数据集上的评估
为了进一步验证SiTo的有效性,在COCO30K数据集上进行了实验。如表1所示,SiTo在SD v1.5上实现了1.75倍的加速,并取得了11.17的FID得分;在SD v2上,SiTo实现了1.65倍的加速,FID得分为11.67,在加速和图像质量方面始终优于ToMeSD。
消融
剪枝令牌选择方法的消融实验
对以下六种基础令牌选择方法进行了消融实验:
- 始终选择 2 × 2 2 \times 2 2×2图块中的左上角令牌
- 在全局范围内随机选择25%的令牌
- 在全局范围内选择具有最高SimScore的令牌
- 在 2 × 2 2 \times 2 2×2图块中随机选择一个令牌
- 在 2 × 2 2 \times 2 2×2图块中选择具有最高SimScore的令牌
- 向SimScore添加高斯噪声后,选择 2 × 2 2 \times 2 2×2图块中具有最高分数的令牌(SiTo的默认设置)
如下表所示,实验得出了两个关键结论:
- 时间分布均匀性:
基础令牌应该在不同的去噪时间步之间保持均匀分布。策略I,即每个时间步始终选择相同的令牌,表现最差。策略VI优于策略V,因为在策略VI中引入的随机噪声使得不同时间步的基础令牌选择有所变化。类似的推理解释了为什么策略II优于策略III。
此外,还对策略V和策略VI进行了视觉分析。分析结果表明,引入噪声可以防止某些令牌在多个时间步中被反复剪枝,从而使得图像呈现出更丰富的细节。例如,下图a中显示,使用策略VI生成的图像草地纹理更为精细,花朵的数量也有所增加。
- 空间分布均匀性:
基础令牌还应保持空间上的均匀分布。策略IV、策略
V和策略VI的表现优于策略II和策略III,这表明在局部图块内选择基础令牌要比全局选择效果更好。这可能是因为全局选择会导致基础令牌集中在某些区域,从而在其他区域造成密集剪枝,导致信息损失难以恢复。
剪枝 vs. 合并
为了验证的剪枝操作,将剪枝操作替换为类似于ToMeSD的平均合并策略。如图5a所示,剪枝操作始终能够获得更低的FID得分。较高的令牌剪枝比率迫使基础令牌重建多个令牌,导致显著的误差和与真实分布的偏差,从而降低了图像质量。
不同图块大小的影响
在选择基础令牌的过程中,将特征划分为大小为 s × s s \times s s×s的图块,在每个图块内选择一个令牌作为基础令牌。随着图块大小的增大,基础令牌的比例相应减少。如图5b所示,尽管较大的图块大小仅能带来微小的加速提升,但它们会导致FID值的显著增加。
使用较少采样时间步的性能评估
评估了在较少采样时间步下,ToMeSD和SiTo的表现。如下图所示,SiTo在不同的时间步数下,始终在图像质量和加速效果上超过ToMeSD,这表明SiTo与DDIM等扩散加速方法是正交的。
SiTo在各模块中的应用
SiTo可以应用于所有模块,包括自注意力(Self-Attention)、交叉注意力(Cross-Attention)和前馈网络(Feed-Forward Network)。探讨了SiTo在各模块中的应用,以优化加速和图像质量之间的平衡。下表的结果显示,将SiTo应用于交叉注意力(CA)和前馈网络(MLP)仅带来了最小的加速收益,同时影响了图像生成质量。
此外,尽管SiTo和ToMeSD可以应用于更深的UNet块,下图显示,应用于更深的Unet层会导致生成质量的下降。
相关文章:

【Efficient AIGC】SiTo: Similarity-based Token Pruning (AAAI-2025)
文章目录 SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Pruning背景介绍方法结果消融 文章目录 SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Prun…...

数据标注开源框架 Label Studio
数据标注开源框架 Label Studio Label Studio 是一个开源的、灵活的数据标注平台,旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据(如文本、图像、音频、视频等)以及复杂的标注任务(如分类、命名实体…...

MyBatis最佳实践:MyBatis 框架的缓存
缓存的概念: 在内存中临时存储数据,速度快,可以减少数据库的访问次数经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中 缓存的级别: 一级缓存(默认开启):SqlSession 级别 …...

基于LangGraph、Groq和Tavily打造可以调用外部搜索引擎工具的对话机器人(核心代码 万字详解)
一、python环境 & 相关库版本信息 代码运行在 conda 创建的python环境下,python和相关库的版本信息如下: $ python --version Python 3.12.3$ pip list | grep langchain langchain 0.3.15 langchain-community 0.3.15 lang…...

衡量算法性能的量级标准:算法复杂度
今天开始数据结构的学习!作为一大重点,拿出态度很重要,想要真实掌握,博客笔记自然少不了!重点全部上色!避免疏忽 下面我们从0基础开始学习今天的第一节!不用担心看不懂,拒绝枯燥的理…...

PHP校园助手系统小程序
🔑 校园助手系统 —— 智慧校园生活 📱一款基于ThinkPHPUniapp框架深度定制的校园助手系统,犹如一把智慧之钥,专为校园团队精心打造,解锁智慧校园生活的无限精彩。它独家适配微信小程序,无需繁琐的下载与安…...

如何在Spring Boot项目中高效集成Spring Security
1 Spring Security 介绍 Spring Security 是一个功能强大且高度可定制的安全框架,专为保护基于Java的应用程序而设计。它不仅提供了认证(Authentication)和授权(Authorization)的功能,还支持防止各种常见的安全攻击模式。本文将详细介绍Spring Security的主要特点、功能…...

【PostgreSQL内核学习 —— (WindowAgg(一))】
WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…...

PAT甲级-1020 Tree Traversals
题目 题目大意 给出一棵树的后序遍历和中序遍历,要求输出该树的层序遍历。 思路 非常典型的树的构建与遍历问题。后序遍历和中序遍历可以得出一个树的结构,用递归锁定根节点,然后再遍历左右子树,我之前发过类似题目的博客&…...

LVGL+FreeRTOS实战项目:智能健康助手(Max30102篇)
MAX30102 心率血氧模块简介 功能:用于检测心率和血氧饱和度,集成了红外和红光 LED 以及光电二极管。 接口:支持 I2C 通信,默认 I2C 地址为 0x57。 应用:广泛用于健康监测设备中,如智能手环、手表等。 硬…...

人脸识别【python-基于OpenCV】
1. 导入并显示图片 #导入模块 import cv2 as cv#读取图片 imgcv.imread(img/wx(1).jpg) #路径名为全英文,出现中文 图片加载失败,"D:\picture\wx.jpg" #显示图片 (显示标题,显示图片对象) cv.imshow(read_picture,im…...

redis常用命令和内部编码
文章目录 redis 为什么快redis中的Stringsetsetnxsetex getmsetmget计数操作incr、incrby、decr、decrby、incrbyfloatincrincrbyincrbyfloat 拼接(append)、获取(getrange)、修改字符串(setrange)、获取字符串长度(strlen)操作appendgetrangesetrangest…...

UI操作总结
该类 SolarWebx 继承自 Webx 和 IUixLikeMixin,主要用于扩展 giraffe.EasyUILibrary 的功能,提供了一系列与网页操作、元素定位、截图、图片处理等相关的方法。以下是对该类中每个方法的简要总结: __init__ 方法 作用:初始化 Sola…...

数据结构——实验八·学生管理系统
嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…...

力扣hot100-->滑动窗口、贪心
你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...

Linux 内核中的高效并发处理:深入理解 hlist_add_head_rcu 与 NAPI 接口
在 Linux 内核的开发中,高效处理并发任务和数据结构的管理是提升系统性能的关键。特别是在网络子系统中,处理大量数据包的任务对性能和并发性提出了极高的要求。本文将深入探讨 Linux 内核中的 hlist_add_head_rcu 函数及其在 NAPI(网络接收处理接口)中的应用,揭示这些机制…...

centos哪个版本建站好?centos最稳定好用的版本
在信息化飞速发展的今天,服务器操作系统作为构建网络架构的基石,其稳定性和易用性成为企业和个人用户关注的重点。CentOS作为一款广受欢迎的开源服务器操作系统,凭借其强大的性能、出色的稳定性和丰富的软件包资源,成为众多用户建…...

软件越跑越慢的原因分析
如果是qt软件,可以用Qt Creator Profiler 作性能监控如果是通过web请求,可以用JMeter监控。 软件运行过程中逐渐变慢的现象,通常是因为系统资源(如 CPU、内存、磁盘 I/O 等)逐渐被消耗或软件中存在性能瓶颈。这个问题…...

LeetCode 力扣热题100 二叉树的直径
class Solution { public:// 定义一个变量 maxd,用于存储当前二叉树的最大直径。int maxd 0; // 主函数,计算二叉树的直径。int diameterOfBinaryTree(TreeNode* root) {// 调用 maxDepth 函数进行递归计算,并更新 maxd。maxDepth(root);// …...

【图文详解】lnmp架构搭建Discuz论坛
安装部署LNMP 系统及软件版本信息 软件名称版本nginx1.24.0mysql5.7.41php5.6.27安装nginx 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 关闭防火墙 systemctl stop firewalld &&a…...

小哆啦解题记:整数转罗马数字
小哆啦解题记:整数转罗马数字 小哆啦开始力扣每日一题的第十四天 https://leetcode.cn/problems/integer-to-roman/submissions/595220508/ 第一章:神秘的任务 一天,哆啦A梦接到了一项任务——将一个整数转换为罗马数字。他心想:…...

【Java数据结构】排序
【Java数据结构】排序 一、排序1.1 排序的概念1.2 排序的稳定性1.3 内部排序和外部排序1.3.1 内部排序1.3.2 外部排序 二、插入排序2.1 直接插入排序2.2 希尔排序 三、选择排序3.1 选择排序3.2 堆排序 四、交换排序4.1 冒泡排序4.2 快速排序Hoare法:挖坑法ÿ…...

我的求职之路合集
我把我秋招和春招的一些笔面试经验在这里发一下,网友们也可以参考一下。 我的求职之路:(1)如何谈自己的缺点 我的求职之路:(2)找工作时看重的点 我的求职之路:(3&…...

数据结构(四) B树/跳表
目录 1. LRU 2. B树 3. 跳表 1. LRU: 1.1 概念: 最近最少使用算法, 就是cache缓存的算法. 因为cache(位于内存和cpu之间的存储设备)是一种容量有限的缓存, 有新的数据进入就需要将原本的数据进行排出. 1.2 LRU cache实现: #include <iostream> #include <list>…...

Arcgis国产化替代:Bigemap Pro正式发布
在数字化时代,数据如同新时代的石油,蕴含着巨大的价值。从商业决策到科研探索,从城市规划到环境监测,海量数据的高效处理、精准分析与直观可视化,已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…...

LBS 开发微课堂|AI向导接口服务:重塑用户的出行体验
为了让广大开发者 更深入地了解 百度地图开放平台的 技术能力 轻松掌握满满的 技术干货 更加简单地接入 位置服务 我们特别推出了 “位置服务(LBS)开发微课堂” 系列技术案例 第六期的主题是 《AI向导接口服务的能力与接入方案》 随着地图应…...

AI导航工具我开源了利用node爬取了几百条数据
序言 别因今天的懒惰,让明天的您后悔。输出文章的本意并不是为了得到赞美,而是为了让自己能够学会总结思考;当然,如果有幸能够给到你一点点灵感或者思考,那么我这篇文章的意义将无限放大。 背景 随着AI的发展市面上…...

openstack单机安装
openstack单机安装 网卡配置安装依赖开启虚拟环境修改配置文件 部署openstack部署openstack客户端访问可视化界面Horizon补充 本篇主要讲述Ubuntu2204单机安装openstackstable/2024.2。其他版本的Linux系统或者openstack版本,请参考openstack官网。 网卡配置 需要配…...

Vue3实现小红书瀑布流布局任意组件动态更新页面方法实践
思路 1.首先定义一个瀑布流容器,它的高度暂定(后面会更新)。把需要布局的组件(这里叫做waterfall-item)放在瀑布流容器里面渲染出来。使用绝对定位(position: absolute),把它移到屏幕…...

深度学习项目--基于LSTM的糖尿病预测探究(pytorch实现)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 LSTM模型一直是一个很经典的模型,一般用于序列数据预测,这个可以很好的挖掘数据上下文信息,本文将使用LSTM进行糖尿病…...