CNN网络加速--Performance Guaranteed Network Acceleration via High-Order Residual Quantization

Performance Guaranteed Network Acceleration via High-Order Residual Quantization ICCV2017

本文是对 XNOR-Networks 的改进,将CNN网络层的输入 进行高精度二值量化,从而实现高精度的二值网络计算,XNOR-Networks 也是对每个CNN网络层的权值和输入进行二值化,这样整个CNN计算都是二值化的,这样计算速度快,占内存小。

对CNN网络模型进行加速目前主要有三类方法: 1)Parameter Pruning 网络裁剪,去掉权值接近0的 连接 rounding off near-zero connections,再重新训练精简后的网络 2)Model Compression,网络结构稀疏逼近,这种技术对每个模型都是专家经验的设计, not a general plug-in solution, low-rank approximated 3)Network Quantization,网络参数量化,对模型的参数和网络层的输入进行二值化,如XNOR

本文就是在 XNOR-Networks 的基础上,对网络层的输入二值化进行改进,实现高精度二值量化。

我们首先来看看 XNOR-Networks 文献【21】提出了两个二值化网络:BWN and XNOR BWN uses binary weights to speed up the computation. 网络层权值二值化 XNOR is based on BWN and realizes the binarization of input data in a convolutional layer. 网络层的 输入和 权值都二值化

对于一个网络的卷积层,假定其 输入时 I ,滤波器权值是 W,该卷积层需要进行的卷积运算可以表示为 I∗W BWN 的思路是对 W 进行二值化

用二值权值训练一个L层的网络流程如下:

XNOR 在BWN 基础上,对网络层输入进行二值量化 input tensor X: X ≈ βH, H is binary filter

3.2. High-Order Residual Quantization XNOR 的量化步骤如下所示:

那么这种量化的误差是多少了? 我们定义 first-order residual tensor

我们对 R1再进行二值量化

输入的二阶残差量化表达式为 Order-Two Residual Quantization

我们得到对应的量化结果:

对于 Order-K Residual Quantization

3.3. The HORQ Network Tensor Reshape if we reshape the input tensor and weight tensor into two matrices respectively, the convolution operation can be considered as a matrix multiplication 怎么讲二值化的参数 变为矩阵形式

这个可以参考 opencv 中图像数据是怎么表示的,图像数据是怎么保存在内存中的

Convolution Using Order-Two Residual Quantization 二阶量化怎么卷积

Training HORQ Network

4 Experiments

MNIST

HORQ vs XNR on CIFAR-10

Model size comparison: Binary vs Float

speedup ratio

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

笔记68 | 切换fragmengt的replace和add方法笔记

1544
来自专栏Java Edge

AbstractList源码解析1 实现的方法2 两种内部迭代器3 两种内部类3 SubList 源码分析4 RandomAccessSubList 源码:AbstractList 作为 Lis

它实现了 List 的一些位置相关操作(比如 get,set,add,remove),是第一个实现随机访问方法的集合类,但不支持添加和替换

622
来自专栏ml

朴素贝叶斯分类器(离散型)算法实现(一)

1. 贝叶斯定理:        (1)   P(A^B) = P(A|B)P(B) = P(B|A)P(A)   由(1)得    P(A|B) = P(B|...

3667
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

692
来自专栏学海无涯

Android开发之奇怪的Fragment

说起Android中的Fragment,在使用的时候稍加注意,就会发现存在以下两种: v4包中的兼容Fragment,android.support.v4.ap...

3225
来自专栏xingoo, 一个梦想做发明家的程序员

AOE关键路径

这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间。 从而算出活动最早开始的时间和最晚开始的时间,如果这两个...

2657
来自专栏alexqdjay

HashMap 多线程下死循环分析及JDK8修复

1.2K4
来自专栏聊聊技术

原 初学图论-Kahn拓扑排序算法(Kah

3018
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

2108
来自专栏开发与安全

算法:AOV网(Activity on Vextex Network)与拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex ...

4067

扫码关注云+社区