XNOR-Net解读

news/2025/3/15 1:13:58/

XNOR-Net算法详解

XNOR-Net是YOLO的作者作为三作提出的面向计算资源不足的设备如MR眼镜、手机等提出的二进制网络。整篇论文分为两个部分:
1.将卷积核二值化(+1,-1)的Binary-Weight-Networks;
2.将输入与卷积核都二值化的XNOR-Net。
网络的整体是采用经典的LeNet,利用卷积、池化、全连接和参数共享等方式得到了参数少的分类网络。详解请参考(https://blog.csdn.net/daydayup_668819/article/details/79932548)。
这里是论文地址。(https://arxiv.org/abs/1603.05279)
这里是作者提供的开源代码地址。(https://github.com/allenai/XNOR-Net)
这里是基于pytorch版本的可供cpu测试的XNOR-Net开源代码地址。[(https://github.com/cooooorn/Pytorch-XNOR-Net)

Binary-Weight-Networks

文章中提到了关于将卷积核二进制化的推导过程。这里只介绍思想,具体公式请参照论文。论文的核心思想是将原有的卷积核的参数利用一个二进制的卷积核与系数的乘积来代替。经作者推导,二进制卷积核的值与对应位置的原卷积核处值的符号相同。例如原卷积核处值为-0.3,则对应二进制卷积核值应为-1。但是在网络训练参数更新时仍然采用原卷积核的值便于训练。Binary-Weight-Networks对精度影响较小,因为卷积核二值化后将原有的乘积计算更改为加减计算,节省2倍的计算资源和32倍的存储资源。

XNOR-Net

类似于上述过程,文章提出了将网络的输入同样二值化的思想,二值化的输入类似于上述,与对应位置的输入的符号相同,但是输入得系数矩阵是直接整体取得均值,而不是按channel取二值,这样会提高计算效率。XNOR-Net由于将输入与卷积核同时进行了二值化,原有网络的卷积计算可以变为异或计算,大大提高了计算速度,节省56倍计算资源与32倍存储资源。但由于输入精度与卷积核精度的损失,计算精度同样降低的约12%。

整体训练

在训练过程中,前向传播与反向传播都采用的是二值化的计算,但是在更新参数时采用原浮点型的参数。与传统网络不同,二进制采取了不同的网络顺序。经典网络结构是卷积-BN-ACTIV-POOL,二进制网络采取的是BN-BIN ACTIV-BIN CONV-POOL,减小了Pooling带来的损失。另外作者提供了多进制量化的公式:进行多进制量化的公式
网络整体计算高效,精度有所牺牲。

[1]:Mohammad Rastegari, Vicente Ordonez, Joseph Redmon,等. XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks[C]// European Conference on Computer Vision. Springer International Publishing, 2016.


http://www.ppmy.cn/news/603920.html

相关文章

hadoop 添加删除机器以及设置免密登录

添加hadoop机器 先在slaves中添加机器然后启动datanode $: ./usr/hadoop-0.20.2-cdh3u4/bin/hadoop-daemon.sh start datanode查看是否启动 $: jps4696 DataNode 4765 Jps启动tasktrack $: ./usr/hadoop-0.20.2-cdh3u4/bin/hadoop-daemon.sh start tasktracker 查看是否启…

TCP三次握手和四次挥手的解释

基础知识 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是: SYN表示建立连接(synchronous建立联机)FIN表示关闭连…

go未入门学习记录

go未入门学习记录 开发环境配置go1.12.17goland 参考链接macos配置go语言以及goland开发环境 语法学习记录 package main //kaiyu.liushopee.com golang学习笔记 //参考资料 https://www.kancloud.cn/itfanr/go-quick-learn/81636 //参考视频 https://www.bilibili.com/v…

IOS自动化测试环境搭建(Python Java)

一、前言 IOS的App自动化测试与Android的一样,也可以用appium来进行。但是IOS自动化依赖苹果的osx系统、Xcode构建等,且封闭的系统需要苹果开发者账号才可以驱动真机。Appium的环境配置有点麻烦,可能大部分时间都在处理各种稀奇古怪的报错&am…

linux 下根据cpp文件快速书写头文件

假设我们现在有一个hello.cc文件,我们如果想要书写它的头文件hello.h,使用如下的命令即可: cat hello.cc | grep "^\w.*)$" > hello.h 然后我们在hello.h中添加我们依赖的头文件即可

docker 常用命令集合

查看images docker images 查看container docker ps docker container ps -a 启动container docker container start ##### 暂停container docker container stop ##### 删除container docker container rm ###### 连接container docker attach ####

macos新版本docker换源方法

#macos新版docker换源方法