AI大模型落地不远了!首个全量化Vision Transformer的方法FQ-ViT(附源代码)

点击蓝字 关注我们

关注并星标

从此不迷路

计算机视觉研究院

e8166030c69aee59ab2b1c69e5cebd8e.gif

e9c1f7d5d42e91aa5bf0656a63942eaa.gif

公众号ID计算机视觉研究院

学习群扫码在主页获取加入方式

7fea1502ce973c8cd5fa24bb1b0763a2.png

论文地址:https://arxiv.org/pdf/2111.13824.pdf

项目代码:https://github.com/megvii-research/FQ-ViT

计算机视觉研究院专栏

Column of Computer Vision Institute

将算法网络进行量化和模型转换可以显着降低模型推理的复杂性,并在实际部署中得到了广泛的应用。然而,大多数现有的量化方法主要是针对卷积神经网络开发的,并且在完全量化的vision Transformer上应用时会出现严重的掉点。今天我们就分享一个新技术,实现高精度量化的Vit部署。AI大模型落地使用离我们还远吗?

70e1d3f4b4973c1df4320ee61c55a11b.gif

01

总  述

Transformer 是现在火热的AIGC预训练大模型的基础,而ViT(Vision Transformer)是真正意义上将自然语言处理领域的Transformer带到了视觉领域。从Transformer的发展历程就可以看出,从Transformer的提出到将Transformer应用到视觉,其实中间蛰伏了三年的时间。而从将Transformer应用到视觉领域(ViT)到AIGC的火爆也差不多用了两三年。其实AIGC的火爆,从2022年下旬就开始有一些苗条,那时就逐渐有一些AIGC好玩的算法放出来,而到现在,AIGC好玩的项目真是层出不穷。

0cf0f5068dc3089bc4ff702215f10577.png

随着近两年来对视觉Transformer模型(ViT)的深入研究,ViT的表达能力不断提升,并已经在大部分视觉基础任务 (分类,检测,分割等) 上实现了大幅度的性能突破。然而,很多实际应用场景对模型实时推理的能力要求较高,但大部分轻量化ViT仍无法在多个部署场景 (GPU,CPU,ONNX,移动端等)达到与轻量级CNN(如MobileNet) 相媲美的速度。

因此,重新审视了ViT的2个专属模块,并发现了退化原因如下:

  • 研究者发现LayerNorm输入的通道间变化严重,有些通道范围甚至超过中值的40倍。传统方法无法处理如此大的激活波动,这将导致很大的量化误差

  • 还发现注意力图的值具有极端的不均匀分布,大多数值聚集在0~0.01之间,少数高注意力值接近1

基于以上分析,研究者提出了Power-of-Two Factor(PTF)来量化LayerNorm的输入。通过这种方式,量化误差大大降低,并且由于Bit-Shift算子,整体计算效率与分层量化的计算效率相同。此外还提出了Log Int Softmax(LIS),它为小值提供了更高的量化分辨率,并为Softmax提供了更有效的整数推理。结合这些方法,本文首次实现了全量化Vision Transformer的训练后量化。

264235834dc6e4956b0efc07c6686f9b.png

02

新框架

下面的这两张图表明,与CNN相比,视觉转换器中存在严重的通道间变化,这导致了分层量化的不可接受的量化误差。

b0e91cb53360dfd11e598083181817cd.png

首先解释网络量化符号。假设量化位宽为b,量化器Q(X|b)可以公式化为将浮点数X∈R映射到最近量化仓的函数:

bcecbf77bfcd648c2d7d1591247b4651.png

Uniform Quantization

Uniform Quantization在大多数硬件平台上都得到了很好的支持。它的量化器Q(X|b)可以定义为:

1bb81124420871fa7222739d224a7d6e.png

7f797d53056edfccb4ef05a74c24f3e4.png

其中s(标度)和zp(零点)是由X的下界l和上界u确定的量化参数,它们通常是最小值和最大值。

Log2 Quantization

Log2 Quantization将量化过程从线性变化转换为指数变化。其量化器Q(X|b)可定义为:

01795ac444096490263c38d3fa95d0b3.png

为了实现完全量化的视觉变换器,研究者对所有模块进行量化,包括Conv、Linear、MatMul、LayerNorm、Softmax等。特别是,对Conv、线性和MatMul模块使用均匀的Min-Max量化,对LayerNor和Softmax使用以下方法。

Power-of-Two Factor for LayerNorm Quantization

在推理过程中,LayerNorm计算每个正向步骤中的统计量µX,σX,并对输入X进行归一化。然后,仿射参数γ,β将归一化输入重新缩放为另一个学习分布。

如刚开始解释分析一样,与神经网络中常用的BatchNorm不同,LayerNorm由于其动态计算特性,无法折叠到前一层,因此必须单独量化它。然而,在对其应用训练后量化时观察到显著的性能下降。查看LayerNorm层的输入,发现存在严重的通道间变化。

研究者提出了一种简单而有效的层范数量化方法,即Power-of-Two Factor(PTF)。PTF的核心思想是为不同的信道配备不同的因子,而不是不同的量化参数。给定量化位宽b,输入活动X∈RB×L×C,逐层量化参数s,zp∈R1,以及PTFα∈NC,则量化活动XQ可以公式化为:

3a5c1a8154f629aed560c12ca2fa0ae6.png

其中部分参数如下:

dec4bf01f7d6e5b157735111983b974e.png

Softmax quantized with Log-Int-Softmax (LIS)

注意图的存储和计算是变压器结构的瓶颈,因此研究者希望将其量化到极低的位宽(例如4位)。然而,如果直接实现4位均匀量化,则会出现严重的精度退化。研究者观察到分布集中在Softmax输出的一个相当小的值上,而只有少数异常值具有接近1的较大值。基于以下可视化,对于具有密集分布的小值区间,Log2保留了比均匀更多的量化区间。

d5bdcf2b468dc999a53a0c1489481210.png

将Log2量化与i-exp(i-BERT提出的指数函数的多项式近似)相结合,提出了LIS,这是一个仅整数、更快、低功耗的Softmax。

整个过程如下所示。

8a0941c8eaf88c509b376ee8ab9628ec.png

03

实验&可视化

Comparison of the top-1 accuracy with state-of-the-art methods on ImageNet dataset

7d208ae70107ed5a21330e716c47ade7.png

09a57e647c5a6a2cbe4a7bd2c4638dca.png

将注意力图可视化,以查看均匀量化和LIS之间的差异,如上图所示。当两者都使用8位时,均匀量化集中在高激活区域,而LIS在低激活区域保留更多纹理,这保留了注意力图的更多相对秩。在8位的情况下,这种差异不会产生太大的差异。然而,当量化到较低的位宽时,如6位和4位的情况所示,均匀量化会急剧退化,甚至使所有关注区域失效。相反,LIS仍然表现出类似于8位的可接受性能。

0e98329067605d40ad95636a2743b9cb.png

Channel-wise minimum and maximum values of Vision Transformers and ResNets

© THE END 

转载请联系本公众号获得授权

e960649f2eeeb5dd2df7abe325f4d8cf.gif

计算机视觉研究院学习群等你加入!

2b451615307e6f0b04900bb7b6ee92a1.jpeg

ea7310a70f997402be7514b41141c509.png

4ef69679d5224044bfef18db12e38e87.png

35e59b5ad8f645ca7ce02034eb63628a.png

aa20bc5ce98514aa7d18a584be776a16.png

点击“阅读原文”,立即合作咨询


http://www.niftyadmin.cn/n/435051.html

相关文章

Vue3 之 reactive、ref、toRef、toRefs 使用与区别,源码分析详细注释

目录 reactive、ref、toRef、toRefs 使用与区别 reactiveref 作用及用法toRef 作用及用法toRefs 作用及用法ref,toRef,toRefs 源码实现解析详细注释 reactive、ref、toRef、toRefs 使用与区别 reactive 参数传入普通对象,不论层级多深都可以返回响应式对象&#xff…

JAVA办公自动化系统(源代码+论文+外文翻译)

极光办公自动化系统是针对南开创元信息技术有限公司开发的,专门用于企业内部员工信息交流的软件,其开发过程主要包括前端应用程序的开发和后端数据库的建立两个方面。对于前者要求应用程序功能完备操作简单,对于后者要求建立起数据一致性、完整性和安全性好的数据库。 本论文…

c++11 final, override,const 成员函数

在 C11 中,引入了一些新的特性,包括 final 关键字、override 关键字和 const 成员函数的增强。 1). final 关键字:final 用于修饰虚函数,表示该函数不能被派生类进行覆盖。例如: class Base { public:virtual void f…

使用java调用Ffmpeg转码

Java 视频转码(转为MPEG-4格式) 依赖 <dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.1</version> </dependency><dependency><groupId>org.bytedeco</groupId&g…

【Python开发】FastAPI 10:SQL 数据库操作

在 FastAPI 中使用 SQL 数据库可以使用多个 ORM 工具&#xff0c;例如 SQLAlchemy、Tortoise ORM 等&#xff0c;类似 Java 的 Mybatis 。这些 ORM 工具可以帮助我们方便地与关系型数据库进行交互&#xff0c;如 MySQL 、PostgreSQL等。本篇文章将介绍如何使用 SQLAlchemy 来完…

SpringBoot中Redis的基础使用

基础使用 首先引入依赖 <!-- redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</g…

绕过激活锁 ,拯救一台旧手机iphone

一台旧的iphone忘了apple id账号和密码了&#xff0c;导致锁住了 某宝上解锁要花50&#xff0c; 不是舍不得花钱&#xff0c;作为一个搞技术的&#xff0c;实在觉得花钱有点丢人 经过一番探索 最终确定了有用的流程 并贴出来 亲测可用 最终实现了趟再床上就可以打卡 1、 刷机 …

NI VeriStand

概览 本文简要概述了NI VeriStand以及如何创建实时测试应用程序&#xff0c;并介绍如何结合NI LabVIEW等不同软件环境采用不同的方式创建额外的功能&#xff0c;如模型导入、FPGA功能自定义以及将NI LabVIEW Run-Time控件添加为工作区对象等。 内容 什么是NI VeriStand什么是…