MeliusNet: Can Binary Neural Networks Achieve MobileNet-level Accuracy?

2020 arXiv

code : https://github.com/hpi-xnor/BMXNet-v2

0. 摘要翻译

以往的方法通过提升通道数和使用多个二值基(binary bases)的方法来避免二值化带来的精度损失(低质量的和低容量的特征映射)。这篇文章中,作者提出了一个新的架构:MeliusNet。由交替出现的 DenseBlock 组成,提升了特征的容量;提出的 ImprovementBlock 提升了特征的质量。在 ImageNet 上的实验证实了,其相比其他 BNN 模型在计算量和准确度上都更有优势。本文训练的 BNN 模型,首次实现了与 MoblieNet-v1 在模型尺寸,操作数量和准确性上相匹配。不理解为什么要在模型尺寸上相匹配?模型大了,准确率高有什么亮点吗?可能是 MoblieNet-v1 本身就是比较轻量的,可以部署在嵌入式设备上的模型,模型尺寸相匹配,可能想说明 MeliusNet 也同样轻量吧。

我想知道什么?

浏览了标题和所有图表。想知道一下内容:

  • group conv :好像是可以通过增加结构,反而减少 OPs 的一种结构;
  • 想知道 MoblieNet-v1 0.5 0.75 1.0 这都是什么,是参数量的0.5倍?还是什么意思?
  • 着重理解作者提出的新架构是什么样的?

1. INTRODUCTION

为了将深度学习模型部署在移动或嵌入式设备上,目前的研究方法有:

  • knowledge disillation
  • network pruning
  • compact network designs
  • low-bit quantization

减小二值网络和实值网络之间的精度差距的方法:

  • 使用多权重基(multiple weight bases)
  • 提升特征映射的通道数

MobileNet-v1 是一种紧凑(compact)网络,这种 compact 网络的出现,尤其是 MobileNet-v2、v3 的出现,让 BNN 显得很狼狈,本文希望展示出 BNN 的竞争力,证明 BNN 还是有发展的希望的。

先前的工作大都是基于 AlexNet 和 ResNet 进行的,没有为 BNN 特别设计网络结构。作者提到两个涉及到网络结构设计的工作,一个增加了加性的 residual shortcut,一个对 BNN 应用了 DenseNet 中的 dense shortcuts。本文中,作者可以设计 build blocks 的 MeliusNet 来改善特征映射的低质量和低容量。并且对网络中使用 32-bit 的部分进行了重新设计。

本文的主要贡献:

  1. 一个新的 BNN 架构来有效改善特征映射低质量和低容量的缺陷;

  2. 对于所有的二值网络(binary networks),提供了一个更准确且更高效的初始分组卷积层集合;

    初始分组卷积层集合(Initial set of grouped convolution layers): 这指的是在网络的开始阶段就使用了分组卷积层。分组卷积是一种卷积神经网络中的技术,它将输入通道分成若干组,每组进行卷积操作,然后将结果合并。这种技术可以在一定程度上减少计算成本,提高效率。

    分组卷积

  3. 第一个能够和 MobileNet-v1 0.5, 0.75, 1.0 相匹配的 BNN;

作者认为 Bi-RealNet 和 Binary-DenseNet 和本文的工作最相似。他们仅仅使用一个二值卷积,应用网络结构来提升 BNN 的精度。但是他们没有测试其方法是仅对 BNNs 有效,还是对提升 32-bit 网络也有效。

发文章要提出之前方法的问题,加上自己的改进,这里看到作者说之前的方法没有对比在 32-bit 网络上是否也有效,我觉得说法怪怪的,既然是针对 BNNs 提出的结构改进,何必要适用 32-bit 网络呢?

3. MeliusNet

提出该方法的动机是:用二值代替 32-bit 值的权重和输入有两个主要的缺点。

  • 权重值从 2322^{32} 减少到 22 种,带来了一定的量化误差,使得特征的质量下降。
  • 输入的范围同样减小,使得特征的可用容量大大减小,32-bit 的细粒度特征消失。

下面分别介绍:

  1. MeliusNet 如何有效提高特征的质量和容量;
  2. 如何减少二值网络中保留的 32-bit 部分的操作数;
  3. BNN layers 的实现细节。

3.1 Increasing Capacity and Improving Quality

如下图1(a)所示,MeliusNet 的构建模块由 Dense Block 后接一个 Improvement Block 实现。Dense Block 用来提升特征的容量,Improvment Block 用来提升特征的质量。

  • Dense Block 中可以看出,256 通道的输入,再经过处理得到 64 个新通道,和原来的输入组合得到 320 个通道。从而实现了特征容量的扩展;

  • Improvement Block 中可以看出,原来的 256 个通道不做改动,320 个通道再次处理得到 64 个新通道,通过残差累加到 Dense Block 新增的 64 个通道中,从而实现了特征质量的提高。

    这也是本文题目的来源:melius 在拉丁语中意思是 improvment。

如果直接用 residual connection 来替代 Improvement Block 的操作。将会导致特征特征图每个部分被改善的次数极度偏向最初计算的特征。由于要匹配特征通道和输出通道的数量,这将引入更多的操作数。

特征图的改善次数偏向于最初计算的特征:这意味着采用这种简单的方法,对于生成特征图的不同部分,其改善或更新的次数存在不平衡。有些部分可能在最初的计算中得到了较多的关注和调整,而其他部分则较少。这可能导致模型对于某些特征的学习过于强调,而对其他特征的学习不足。

作者发现,一样大的网络,在 ImageNet 数据集上 residual connection 的效果要比 Improvement Block 差大约 3%。

如上图1(b)该网络由 Dense Block 和 Improvement Block 交替重复实现网络主体。重复的次数决定了网络的大小和运算量。网络处理过程分为 4 个阶段,中间由 transition 模块连接。transition 中利用 MaxPooling 模块将特征映射的 height 和 width 减半。

3.2 Creating an Efficient Stem Architecture

作者和之前的工作一样,没有对第一层、最后一层和 1x1(‘downsampling’)卷积进行二值化,以保留精度。但是这些层占据了大部分的计算,所以作者重新设计了第一层。

与之前的 BNNs 相比,MobileNet-v1 0.5 仅需要 1.491081.49 \cdot 10^8 操作数,可以在 ImageNet 上实现 63.7% 的准确率。最接近它的 BNN 是 Bi-RealNet34 ,精度只有 62.2% ,需要 1.931081.93 \cdot 10^8 的操作数。看起来 compact 结构要比 BNNs 更有应用价值,尤其是现在还有很多比 MobileNet 更强的 compact 网络。本文想减小这个 gap 。

RealNet18 中 7x7 卷积层占据了整个网络计算量的 65%(1.181081.18 \cdot 10^8),3个 1 × 1 下采样卷积占用了另外 10% (0.691080.69 \cdot 10^8)的操作数。可见 32-bit 的卷积占据了 75% 的操作数,作者聚焦这一部分来减少操作数。

作者借鉴 stem network 中的思想,用 3 个 3 x 3 的卷积来近似 1 个 7 x 7 的卷积;再借鉴 grouped convolutions 的思想,设计了图2(b)中的结构,相同参数量的情况下,节省了超过 40% 的运算。(grouped stem)

同样的 1 x 1 的下采样卷积也可以使用固定的 groups 来处理,并增加了通道清洗 channel shuffle operation。

通过上述改进,BNNs 的操作数已经和 MobileNet-v1 差不多了,并且取得了相似的效果。

3.3 Implementation Details

使用 sign 函数来二值化权重和激活:

sign 函数的不可微问题是利用 Straight-Through Estimator (STE)和梯度裁剪解决的。

前向传播和反向传播过程如下:

ll 是 loss,rir_i 是实值输入,tclipt_{clip} 是 clipping 的阈值。并且使用了 XNOR 和 popcount 来加速。

BinaryDenseNet 一文中提到 XNOR-Net 中提出的尺度缩放因子的功能可能被 BatchNorm 层中和掉,本文实验中发现该尺度因子没有带来提升,所以没有使用尺度因子。而使用了典型的 (BatchNorm →sign → BinaryConv) 顺序。于是作者使用 3x3 的 1-bit 卷积层替代了由 1x1 和 3x3 卷积组成的实值网络的 backbone。

4. Results and Discussion

感觉文章很大篇幅在实验结果比较和讨论这一部分。

在 ImageNet 上进行图像分类的实验来测试网络结构。

本文的代码实现基于 BMXNet 和 BinaryDenseNet。

为了于 SotA 进行比较,作者设计了不同模型大小和操作数的 MeliusNet,如下表1:

4.1 Grouped Stem Ablation Study and Training Details

下图比较了使用本文提出的 grouped stem 结构前后的效果。

4.2 Ablation Study on 32-bit Networks

通过下图3的实验结果可以看出,本文提出的结构仅仅对 BNNs 有提升效果,对 32-bit 的网络并无提升。

4.3 Comparison to State-of-the-art