zoukankan      html  css  js  c++  java
  • 【FSC】2020-CVPR-Fast Sparse ConvNets-论文阅读

    FSC

    2020-CVPR-Fast Sparse ConvNets

    来源:ChenBong 博客园


    Introduction

    在FLOPs相同的情况下,稀疏卷积网络性能要高于密集卷积网络,大约相当于一代的改进(MobileNet V1 => MobileNet V2 => EfficientNet)。通过定制稀疏卷积算法,实现了对稀疏权重的卷积加速。推理时间加速1.3-2.4x,参数压缩率2x,FLOPs压缩率3x。

    image-20201205172300950


    Motivation

    CNN的效率一般由以下几个 metrics 定义:

    1. 实际加速比(interface time)
    2. 理论加速比(FLOPs)
    3. 模型大小(Params)

    以上三者不是独立的,FLOPs 和 Params 对 实际加速比 的影响是一个复杂且与硬件高度相关的问题


    Efficient CNN的方法有以下几种:

    1. 手工设计新的卷积结构,如 dw conv,这也可以看成一种稀疏化,是对 std conv 手工设计的一种稀疏化
    2. 剪枝,分为结构化剪枝和权重剪枝,其中一般认为权重剪枝会带来卷积核权重的稀疏化,需要定制的硬件才能实现加速,因此大多数工作聚焦于结构化剪枝

    我们想纠正“稀疏化卷积核不能带来实际加速”的偏见,通过使用我们提出的稀疏卷积算法来替换原始的密集卷积算法,可以在稀疏卷积上实现实际的加速


    Contribution


    Method

    剪枝算法

    To prune, or not to prune: Exploring the efficacy of pruning for model compression.

    在MobileNet Family model中,dw卷积只占用很小的FLOPs,Params和推理时间,在MBv1中 dw FLOPs <2%,在MBv2中 dw FLOPs < 3%,以下以1×1卷积为例。

    对于MBv1, MBv2, EN,对第一个卷积层不剪枝,对最后一个全连接层不剪枝。


    Kernel Implementation

    一般卷积计算的矩阵格式是 HW C,我们的SpMM使用的矩阵格式是 C HW

    以 1×1 卷积为例:

    image-20201205202231753


    HW C 与 C HW 的在内存中存储的区别:

    • HW C中,同一个 spatial location,不同 channel 的元素在内存中是相邻的
    • C HW中,不同 spatial location,同一个 channel 的元素在内存中是相邻的

    我们的SpMM可以实现高性能的原因是:

    • 虽然 Weight 矩阵是稀疏的,但 Activation 矩阵是密集的,定向从Activation中(顺序)读取vector,可以实现密集乘法,减少乘法次数
    • 对 Activation vector 进行预读取
    • 对矩阵乘法按合适的顺序进行,使得数据大部分都位于L1 cache 中,后续访问速度快
    • (C_{in}) 足够小,整个 Activation 都可以存储在cache中,进一步减少 cache miss 的时间
    • 进一步提高 data reuse:对稀疏pattern进行约束:n×1,在weight 的output channel 维度上进行blcok约束

    image-20201205182712659


    image-20201205182859984


    Experiments

    使用top-1性能相当的模型进行比较,要达到同样的性能,因此Sparse版本的网络width会比dense版本更大。

    具体来说,MBv1 稀疏率90%;MBv2 稀疏率85%

    image-20201205195312125


    block形状的影响:

    image-20201205201828743

    在MBv1中,在最后2层,当通道数(1024)导致 “strip” 的大小超过L1缓存的大小时,模型的最后两层性能就会明显下降(16×4表示 spatial vectorization width=16,block size=2 ):

    image-20201205202551841


    Conclusion

    Summary

    To Read

    Reference

    https://bbs.cvmart.net/articles/1255

    https://daiwk.github.io/assets/collections.pdf

  • 相关阅读:
    亚像素
    dmysql 与QT的连接
    opencv中ptr的使用
    对图片对比度和亮度的理解
    opencv中的各种滤波设计
    人脸检测相关介绍
    opencv中相关的矩阵运算
    形态学处理
    阀值化 threshold
    Python深浅拷贝
  • 原文地址:https://www.cnblogs.com/chenbong/p/14092653.html
Copyright © 2011-2022 走看看