【Paper Reading】XNOR-Net

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

2016 ECCV
华盛顿大学 Mohammad Rastegari
论文链接:https://arxiv.org/abs/1603.05279
代码链接:http://allenai.org/plato/xnornet
基于Pythoch的代码地址:https://github.com/cooooorn/Pytorch-XNOR-Net

引言

随着卷积神经网络在目标分类和目标检测方面的发展,这些有趣的进展已经在向虚拟现实、增强现实和智能可穿戴设备发展,现在是时候为智能便携设备配备最先进的识别系统了。然而,基于cnn的识别系统需要大量的内存和计算能力。虽然它们在昂贵的、基于gpu的机器上表现良好,但由于体积、算力、功耗的限制,它们通常不适合用于手机和嵌入式电子设备等小型设备。该文章想通过对卷积神经网络的权值或中间结果进行二值化,是模型需要更小的内存和更少的浮点预算,但同时达到与标准全精度网络相当的精度。提出了两种方法:Neural networks with binary weights(BWN)和XNOR Networks.
在这里插入图片描述
BWN是只对网络的权重进行二值化,XNOR-Net是对权重和输入都进行二值化,相比CNN,他们将多bit的的浮点数用低bit的数表示,节省内存。BWN,由于权重量化成了{+1,-1},输入和量化权重进行卷积实际就变成输入参数之间的加减了,但由于输入还是浮点数, 所以运算速度还是不够快,速度提示只有2倍。XNOR-Net是将权值和输入都进行了二值化,二进制矩阵时间的卷积可以直接用二进制位运算,所以速度提示很多,能够提升58倍。主网络采用的是AlexNet,在ImageNet数据集上,精度损失不是很多。

方法

该文章是在Binary-weight-network(BWN)和BinaryConnect(BC)两篇文章基础上做出改进。主要改进有两点:

  • 1.在对权重进行{-1,+1}量化的同时,加入了尺度因子α;
  • 2.除了对权重进行量化,还对特征值进行了量化,同样引入了尺度因子β,不过作者在后面的分析中证明β因子重要性不及α。
Binary-Weight-Networks

I 代表某层的输入,W 代表某层的权重,此处我们希望把权重量化成矩阵 B ∈ {-1,+1} 和一个尺度因子α的乘积,即:
在这里插入图片描述
每一层都包含读个卷积核,具体到某一层的卷积操作,用如下的式子表示:
在这里插入图片描述
(lk表示第l层的第k个卷积核)
权重量化后的卷积操作中的加减乘法操作只剩矩阵之间的加减法操作和矩阵与α之间的乘法操作:
在这里插入图片描述
其中,⊕代表没有乘法的卷积运算,只有加减法。
要是量化后结果尽可能的近似于原来的值,应该让W和αb尽可能相等,将矩阵W和B变换成向量,也就是W和B的维度是1n,这里n=cwh,为了后面推导的方便,采用L2范数,应该满足以下式子:
在这里插入图片描述
最优解应该是使J(B, α)最小,将二范数展开如下式:
在这里插入图片描述
因为B是一个1
n的向量,里面的值要么是-1,要么是1,所以:在这里插入图片描述
W是已知的,
在这里插入图片描述
所以可以得到:
在这里插入图片描述
可以求的B的最优解满足的约束为:
在这里插入图片描述
可以看出B的最优值应该就是W的值的符号,这样才能够使WTB最大。
在这里插入图片描述
知道了B的最优值,接下来就是求a的最优值。这里采用上面第2个J函数表达式对a求导,并让求导结果等于0,从而得到最优值。式子如下:
在这里插入图片描述
用上式来替代为:
在这里插入图片描述
a的最优值是W的每个元素的绝对值之和的均值
网络的训练过程如下:
在这里插入图片描述
两个for循环把矩阵量化了,第一层为遍历所有层,第二层为遍历该层所有的卷积核,同时还偷偷保留了一份未量化的权重(原始权重),先用量化后的权重得到loss,反向传播时得到的实际时对量化权重的梯度
在这里插入图片描述
把梯度换成原始权重应该更新的权重,然后使用SGD或这Adam优化算法去更新原始权重。下次epoch时又再把权重量化,不断重复以上步骤。

XNOR-Networks

Binary-weights是将权重W的值都用二值表示,而接下来要介绍的XNOR-Networks不仅将权重W用二值表示,而且也将输入用二值表示。
在这里插入图片描述
这里是用βH近似表示输入X,得到如下优化式子:
在这里插入图片描述
用Y代替XW,C代替HB,γ=βa:
在这里插入图片描述
这个式子就和BWN优化的式子一样了。
在这里插入图片描述
在这里插入图片描述
下图是具体的二值操作:
在这里插入图片描述

  • 权值的二值化
  • 输入的二值化:存在重复计算,因为卷积核的stride一般为1,这样实际上两次位移对应位置的X有很大一部分是重叠的,而我们又需要求每个X的平均值,这实际上进行了许多重复求平均操作。该算法是先算出每个位置(X)的β和H,但实际上H矩阵就是对原矩阵进行sign操作而已,根本没必要对每个位置(X)求对应的H,直接对输入 I 实际上是一个更为简洁的做法。既然如此,何不直接先算出每个位置对应的β,形成一个β矩阵,然后β矩阵和sign(I)就代表输入的量化了。
  • 高效的输入的二值化,求β矩阵,由于 β = (1 / n)* || X ||(X的L1范数) ,所以先把输入绝对值化,在channel这一维求平均,得到A矩阵,然后再对A矩阵用k滤波器进行均值滤波,
    在这里插入图片描述
    A矩阵和均值滤波器k 卷积 对A矩阵均值滤波后得到K矩阵,K矩阵的每个元素实际就是每个位置(X)对应的β,具体实现看上图第三行。因此可以得到最终公式
    在这里插入图片描述
    尽量防止信息丢失,需要对网络结果进行调整:
    在这里插入图片描述

实验

压缩效果分析

在这里插入图片描述

分类精度分析

在ImageNet数据库上和其他算法的对比,full-precision代表原始准确率,网络采用AlexNet
在这里插入图片描述
将ResNet-18和GoogLeNnet二值化的精度比较
在这里插入图片描述

探究α和β的重要性

作者后面补充实验发现,其实没有β因子,对结果影响不大,α的作用还是很显著的。
在这里插入图片描述

结论

这篇文章的关键是在二值化量化的过程中加了一个尺度因子,效果比BC和BNN要好,在AlexNet上,效果还不错,精度损失很小,但在ResNet-18和GoogLeNet上,精度损失还是挺大的。现在的二值化网络还是只适用于网络结构比较简单的网络,对于更深的网络,精度损失很大,但他的加速效果和模型的压缩还是很明显的,对于任务比较简单的任务,使用简单的网络结构,我觉的XNOR-Net还是可以一试。

参考资料

XNOR-Net论文理解
XNOR-Net算法详解

### 关于 UniApp 框架推荐资源与教程 #### 1. **Uniapp 官方文档** 官方文档是最权威的学习资料之一,涵盖了从基础概念到高级特性的全方位讲解。对于初学者来说,这是了解 UniApp 架构技术细节的最佳起点[^3]。 #### 2. **《Uniapp 从入门到精通:案例分析与最佳实践》** 该文章提供了系统的知识体系,帮助开发者掌握 Uniapp 的基础知识、实际应用以及开发过程中的最佳实践方法。它不仅适合新手快速上手,也能够为有经验的开发者提供深入的技术指导[^1]。 #### 3. **ThorUI-uniapp 开源项目教程** 这是一个专注于 UI 组件库设计实现的教学材料,基于 ThorUI 提供了一系列实用的功能模块。通过学习此开源项目的具体实现方式,可以更好地理解如何高效构建美观且一致的应用界面[^2]。 #### 4. **跨平台开发利器:UniApp 全面解析与实践指南** 这篇文章按照章节形式详细阐述了 UniApp 的各个方面,包括但不限于其工作原理、技术栈介绍、开发环境配置等内容,并附带丰富的实例演示来辅助说明理论知识点。 以下是几个重要的主题摘选: - **核心特性解析**:解释了跨端运行机制、底层架构组成及其主要功能特点。 - **开发实践指南**:给出了具体的页面编写样例代码,展示了不同设备间 API 调用的方法论。 - **性能优化建议**:针对启动时间缩短、图形绘制效率提升等方面提出了可行策略。 ```javascript // 示例代码片段展示条件编译语法 export default { methods: { showPlatform() { console.log(process.env.UNI_PLATFORM); // 输出当前平台名称 #ifdef APP-PLUS console.log('Running on App'); #endif #ifdef H5 console.log('Running on Web'); #endif } } } ``` #### 5. **其他补充资源** 除了上述提到的内容外,还有许多在线课程视频可供选择,比如 Bilibili 上的一些免费系列讲座;另外 GitHub GitCode 平台上也有不少优质的社区贡献作品值得借鉴研究。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值