袁之航简介

袁之航是北京大学信息科学技术学院的博士研究生,于2017年获得北京大学理学学士学位。目前在北京大学高能效计算与应用中心进行博士课题研究,导师为孙广宇长聘副教授。研究方向为:高效神经网络设计、神经网络压缩加速、软硬件协同优化等。参与6款AI芯片的开发,在国际会议/期刊上发表多篇论文。曾任北京大学创客空间社长/理事长、北京大学极客实验室奇点游戏工作室创始人、北京大学极客产品孵化部部长、北医学生会宣传部副部长。曾任AI音乐创业公司北京惊弓科技CTO。

项目经历

北京大学高能效计算与应用中心 2015.09-

  • 负责动态神经网络架构设计研究,结合网络架构搜索(NAS)取得的研究成果已发表多篇论文
  • 参与SNN(脉冲神经网络)芯片,负责芯片工具链算法部分的研究/软件开发和辅助硬件架构设计,芯片已流片生产
  • 参与ReRAM(一种基于模拟信号的存内计算新型器件)神经网络芯片的设计,负责进行软-硬件协同优化,使用NAS同时设计最优网络和最优硬件参数
  • 参与PCM(一种新型存储器件)神经网络芯片的设计,进行可行性验证和神经网络结构设计
  • 参与内存控制器地址映射策略研究,负责强化学习算法开发
  • 负责医学血液再灌注时间测量系统的研发工作,统筹算法设计、硬件开发
  • 参与LSTM在FPGA上加速的研究,共同设计加速器,负责硬件开发,该研究成果在国际会议上发表,Google Scholar显示被引用次数达到119

泓图睿语(北京)科技有限公司 2017.03-2019.10
实习研究员

  • 参与超低功耗异步卷积神经网络芯片的设计,进行软硬件协同设计,确定芯片运行的网络架构。该芯片是全球首款异步AI芯片,已流片生产
  • 负责面向特定硬件高能效检测网络的设计,设计了多个版本的人脸检测/识别网络架构、车辆识别网络架构,已应用部署

北京大学极客实验室 2017.09-

  • 负责智能分类垃圾桶项目,统筹开发软件、硬件工作,产品在百度云智峰会展出
  • 负责跨平台游戏《魔瓶》项目,统筹设计、开发工作,游戏demo已上线
  • 负责印客印染、未来贺卡、炫光影像等文创产品的统筹开发工作,策划多场活动,多次对外展出
  • 负责策划开设创客X课程,已成功开课二十余节,参与人数达到数百人次

北京数城未来科技有限公司 2019.10-2020.03
实习成员

  • 负责遥感卫星图像AI检测识别框架的设计,实现包括建筑物检测分隔,建筑物高度标定等,已应用部署

其他项目

  • 参与医学面瘫智能分级辅助诊疗系统项目,负责算法的设计和开发以及系统后端的开发,部分算法在期刊上发表,系统正在医院测试使用 2020-2021
  • 组建AI音乐生成创业团队,负责项目统筹和算法开发 2018

发表论文

  • Yuan Z, Wu B, Sun G, et al. S2DNAS: Transforming Static CNN Model for Dynamic Inference via Neural Architecture Search[C]. European Conference on Computer Vision (ECCV), 2020. (oral)
  • Yuan Z, Liu X, Wu B, et al. ENAS4D: Efficient Multi-stage CNN Architecture Search for Dynamic Inference[J]. arXiv preprint, 2020.
  • Guan Y, Sun G, Yuan Z, et al. Crane: Mitigating Accelerator Under-utilization Caused by Sparsity Irregularities in CNNs[J]. IEEE Transactions on Computers (TC), 2020.
  • Guan Y, Yuan Z, Sun G, et al. FPGA-based accelerator for long short-term memory recurrent neural networks[C]. Asia and South Pacific Design Automation Conference (ASP-DAC), 2017.
  • Wu B, Liu Z, Yuan Z, et al. Reducing overfitting in deep convolutional neural networks using redundancy regularizer[C]. International Conference on Artificial Neural Networks (ICANN), 2017.

获得荣誉

  • 北京大学优秀科研奖
  • 北京大学实践公益奖
  • 北京大学“创新实践项目奖”
  • 北京大学第七届模拟创业大赛 第三名
  • 北京大学2017黑客马拉松 第四名
  • 北京大学二等奖学金

Introduction in English

This website is HahnYuan’s personal blog. It was built in 2017.

I am a Ph.D student of the CECA of Peking University. My research interest is the high-efficiency neural network, software and hardware co-optimization.

The content of this blog is divided into two parts, one is about my own idea, the other is my notes and opinions of related research paper.

论文笔记 Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference

这篇论文是发表在CVPR2018的《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》,作者是google brain做Mobilenet的Hartwig Adam和Dmitry Kalenichenko,第一作者是Benoit Jacob。

这篇文章提出了一套量化的流程,让前向预测的时候都是整数运算。同时设计了一套训练流程,能够保持较高的量化网络精度。

方法

量化前向预测

  • 量化策略:非对称量化
    • $r=S(q-Z)$
    • r是real q是quantized
    • Z是零点,代表quantized的空间上对应r为0的数值。
      • 因为有zero-padding
  • 矩阵乘法
    • r3=r1r2 分别有不同的S和Z
    • $S_3(q_3^{i,k}-Z_3)=\sum_{j}S_1(q_1^{i,j}-Z_1)S_2(q_2^{j,k}-Z_2)$
    • $q_3^{i,k}=Z_3+M\sum_{j}(q_1^{i,j}-Z_1)(q_2^{j,k}-Z_2)$
      • M是scale factor $M:=S_1 S_2/S_3$
        • 实际运算使用一个定点数乘和一个移位 $M=2^{-n}M_0$
        • $M_0\in[0.5,1)$是int16或者int32的
        • 有一定的损失,但利用定点数乘法把误差降到最低
    • $q_3^{i,k}=Z_3+M(NZ_1 Z_2-Z_1 a_2^k -Z_2 a_1^i +\sum_j q_1^{i,j} q_2^{j,k})$
      • 其中$a_1:=\sum_{j}q_2^{j,k}$ 整个矩阵运算里面是提前算好了O(N^2)
      • 整个计算量在q1q2 O(N^3)
  • 实现
    • 中间临时数值用int32
    • q1q2
      • int32+=uint8*uint8
    • bias
      • $S_{bias}=S_1 S_2, Z_{bias}=0 $
    • 算完之后cast到uint8
      • 使quantization倾向于使用uint8全部的表示区间

量化训练算法

  • 使用量化算法的原因
    • 1.原来算法weights的channel-level large differences>100x,导致range较小的那些channel有很大的量化误差
    • 2.weights的outlier
  • simulate quantization effects in the forward pass of training
    • weight and biases stored in FP32
    • $q_{sim}(r;a,b,n)=round(\frac{clamp(r;a,b)-a}{s(a,b,n)})s(a,b,n)+a$
    • n是量化的位点数目2^8,$s(a,b,n)=\frac{b-a}{n-1}$
    • biases are not quantized because they are represented as 32-bit integers
  • a,b的确定
    • weight: a:=min(w) b:=max(w)
    • activation: via EMA(exponential moving average)
      • disable activation quantization at start of training to get stable state
    • nudge a/b to make sure 0.0 is representable
  • batchnorm的处理
    • inference: fold to weight of conv $w_{fold}:=\frac{\gamma w}{EMA(\sigma_B)}$
    • training: simulate the folding
      • 计算图上计算两遍Conv,第一遍浮点把$\sigma_B$和$\mu_B$算出来
      • 第二遍把folded weights算出来然后quantize之后conv

实验

  • ImageNet ResNet,掉2%
  • ReLU6>ReLU
  • weights are more sensitive to reduced bit depth than activations.
  • it’s better to keep weight and activation bit depths the same.

总结

这篇文章系统性的提出了整个网络非对称量化的方法,非常具有实践意义。在计算图上进行分析修改的方法值得借鉴。分析掉点的原因:channel-wise quantization。数值误差:M的tail和cast到uint8; bias的量化损失。

论文笔记 Noise Injection Adaption: End-to-End ReRAM Crossbar Non-ideal Effect Adaption for Neural Network Mapping

这篇论文是发表在DAC2019上的《Noise Injection Adaption: End-to-End ReRAM Crossbar Non-ideal Effect Adaption for Neural Network Mapping》,论文作者是中佛罗里达大学的Deliang Fan组,第一作者是Zhezhi He和Jie Lin。

文章分析了RRAM的crossbar运行DNN的不理想性质:SAF,IR-Drop,thermal noise, shot noise和random telegraph noise。提出了训练、映射和测试的框架PytorX,能有效减少这些不理想性质的影响。

方法

不理想性质

  • 确定的噪声:Stuck-at-fault(SAF)缺陷
    • SA0是卡在低阻态,1.75%
    • SA1是卡在高阻态,9.04%
  • 随机噪声1:IR-Drop
    • 线阻
    • 决定于于input电压和RRAM的电导
    • 建模成随机,因为直接计算太expensive了
  • 随机噪声2:Thermal Noise和Shot Noise
    • 热噪声
    • 散粒噪声
    • 建模成0均值的高斯分布
      • $i_{rms}=\sqrt{Gf(4K_B T+2qV)}$
      • rms是root-mean-square current
      • G是电导,f是crossbar的操作频率,T是温度,V是voltage drop
    • programming偏差
      • $\sigma=\Delta G/3$
      • $\Delta G$是ReRAM的电导分辨率resolution (每一级之间的差异)
    • 加上上面两种噪声影响,权值的总体偏差的标准差:
      • $g_{rms}=i_{rms}/V=\sqrt{\frac{Gf(4K_B T+2qV)}{V^2}+(\frac{\Delta G}{3})^2}$
  • 随机噪声3:Random Telegraph Noise(RTN)
    • 随机电报噪声,也叫Burst Noise 爆裂声
    • 临时的、随机的减少电导值
    • $G_{rtn}=G \frac{bG+a}{G-(bG+a)}$
    • 其中a、b是参数,取1.662e-7和0.0015
    • 根据参考文献,G有一半的可能性变成$G+G_{rtn}$(泊松分布)

ReRAM的crossbar计算

  • NN的算法计算
    • $y=(\alpha_w \alpha_x)\sum_i (w,x)$
    • w和x是量化后的权重,$\alpha_w, \alpha_x$是scale因子
  • RRAM的计算
    • DAC的输入$V_{DAC,i}=V_{ref}+\Delta V_{DAC}x_i$
      • $x_i$是n个二值数的比特串(the input $x_i$ is encoded as binary bit-strings n_i[n]),二进制补码表示,文章取n=8
      • $ΔV_{DAC}$ is the minimum voltage stage of the DAC
      • 这里是直接8bit输入了,不是一个个输入的
    • ADC收到的信号
      • $I_{ADC,j}=\sum_{i}(\Delta V_{DAC}x_i \dot (G_{i,j}^+ - G_{i,j}^-))$
      • $G_{i,j}^+ - G_{i,j}^-=\Delta G\dot w$
        • $\Delta G$是RRAM cell的电导step size
    • ADC的量化
      • $y=round(\frac{I_{ADC,j}}{\Delta I_{ADC}})$

End-to-end的适应

  • SAF的误差修正
    • 记录所有的错误cell,然后片外计算来补偿
  • Noise Injection Adaption for IR-drop
    • 128x128的crossbar的IR-drop非常高,不能用,64x64的可以用
    • 训练的时候考虑IR-drop
    • 但是如果直接算,花费的计算开销太大了
    • NIA方法
      • 训练网络,map到硬件,收集crossbar output current shift
      • 使用高斯噪声近似影响
      • 使用带高斯噪声来训练网络
  • 其他随机噪声
    • $G_{act}=G+G_g+G_p$
    • 高斯噪声和泊松噪声
    • 高斯噪声是和weight和input相关的
      • 使用NIA方法效果很差

总结

这篇论文详细的在算法层面上建模了硬件的不完美带来的影响,并且提出了解决方案,虽然有SAF等解决方案挺不容易实现的;但至少非常清晰明白,为未来指出方向。solid的工作。

论文笔记: Fully hardware-implemented memristor convolutional neural network

这篇文章是2020年发表在Nature杂志的论文《 Fully hardware-implemented memristor convolutional neural network》,文章作者来自清华的未来芯片技术高精尖创新中心和北京信息科学与技术国家研究中心,第一作者是Peng Yao,通讯作者是吴华强副教授。

这篇文章实现了第一款忆阻器芯片系统来实现MNIST的分类网络。忆阻器芯片具有高产率、高性能和统一的crossbar阵列。同时文章还提出混合训练策略来适应器件的不完美性质。为了提升性能,文章还提出了复制卷积核的方法来增加并行度。

方法

忆阻器crossbar阵列的实现

  • TiN/TaOx/HfOx/TiN
    • 32 conductance states
    • 50ns的pulse时长可以做SET和RESET的closed-loop programming
  • 1T1R的设置
  • crossbar 128 x 16的结构
    • 128 word lines和128 source line
    • 16 bit lines
  • PE,每个PE有2048-cell的忆阻器阵列

网络映射

  • 5层的 CNN 分类MNIST
  • 输入value被编码成脉冲数目
    • 输入3x3的patch
    • 根据量化的bit数决定:8bit的输入被分为8个脉冲输入,结果被shift加到tmp结果上面去
  • 带符号的weight被分配到一对忆阻器上
    • 一个是正数weight
    • 一个是负数weight
    • 15-level conductance weight
      • 4-bit的权重可以取得很好的效果
      • 分配到两个8级忆阻器上
  • bit line输入编码好的脉冲,source line输出分别代表正数和负数的值
  • 不同的channel被放到不同的row上面,可以同时计算他们

混合训练策略

  • 在忆阻器芯片上原生训练整个网络是很复杂的
  • 片外训练的网络受每一个设备的不完美性质影响
    • defective devices缺陷设备
    • parasitic wire resistance and capacitance 线的电阻和电容
    • 将外部的权重转移到忆阻器的电导上去的时候这些因素会blur(污染)权重,降低模型准确率
  • 混合训练策略
    • 只在线训练最后一层FC

复制卷积核增加并行度

  • 不同层速度mismatch
    • 执行CNN卷积运算是耗时的,因为每一层都需要一个个输入sliding window
    • FC层的计算是很快的
  • 复制卷积的kernel到不同的crossbar
    • 但是复制weight是有挑战性的,因为不可预测和无法避免的硬件差异,conductance drift电导漂移和state locking(就是RRAM-cell坏了,不能重新写了)
    • 使用混合训练策略来部分解决这个问题
  • batch的预测,一次用三张图在三个复制后的PE上同时运行

总结

第一次将RRAM-based的加速器实际造出来,还是有很多问题的,但是这些问题暴露出来可以一个个解决,非常好。原来这个也能发Nature,学到了。

论文笔记 Going Deeper in Spiking Neural Networks:VGG and Residual Architectures

这篇文章是2019年发在frontiers in Neuroscience的《Going Deeper in Spiking Neural Networks:VGG and Residual Architectures》,作者来自于普渡大学的Kaushik Roy组(负责Nanoelectronics Research Laboratory),第一作者是Abhronil Sengupta(18年毕业,现在在宾州州立做助理教授),还有和facebook reality labs的人员参与。

文章提出了一种将更深层的ANN转化成SNN的算法,可以实现VGG和ResNet的转化,在CIFAR-10和ImageNet上测试。

方法

SNN模型

  • 输入使用泊松随机产生500-1000个timesteps
  • 使用了激活后降低到0的neuron模型

网络限制

  • 不用bias
    • BN层换成dropout来做正则化
  • Pooling层使用avgpool

VGG转化

  • 激活阈值Vthr设置成最大ReLU的激活值
    • 被叫做”weight-normalization”或者”threshold-balancing”
      • weight normalization是将weight scale到和最大neural activation,Vthr设置为1
      • threshold-balancing是保持weight大小,Vthr设置到最大激活
  • Spike-Norm
    • 由于使用了降低到0的neuron模型,输入信息会有损失
    • 一层一层单独来转,保证最小化neuron的temporal delay,同时保证阈值不会太小
      • temporal delay是由于evidence integration导致的输入spike到输出spike的时间差
      • evidence integration(证据整合),就是乘累加计算
    • 每层的weight-normalization/threshold-balancing根据spike的输入来确定
      • Vthr=max(Vthr,max(Wx))

ResNet转化

  • 在加法之后加入ReLU
    • 因为ReLU才会Spike,因此ResBlock的第二层Conv和输入共同evidence integration,整合后转化成IF
    • 提供了一个时序balancing的作用
  • 输入layers使用相同threshold
    • 因为网络第一层conv出来的threshold比较高,但是ResBlock的conv出来的threshold比较低,junction layer的spike会被identity mapping的输入主导,需要balance
    • 两支的threshold都设为1
  • 7x7转为3x3的卷积
    • threshold-balancing更好

实验

  • VGG CIFAR-10 ANN 91.7%,SNN 91.5%
  • VGG ImageNet ANN 70.5% SNN 70%
  • ResNet-20 CIFAR-10 ANN 89.1% SNN 87.5%
  • ResNet-34 ImageNet ANN 70.7% SNN 65.5%

总结

论文将ANN全转化到SNN上,通过对VGG和ResNet的实践,发现不同网络需要特定处理。并且提供了一层一层转化的思路,直接利用Spike的信息,值得借鉴。

论文笔记 Optimal Conversion of Convolutional Artificial Neural Networks to Spiking Neural Networks

这篇是ICLR2021在审匿名论文《Optimal Conversion of Convolutional Artificial Neural Networks to Spiking Neural Networks》。

文章针对ANN到SNN的转化进行了误差分析,结论是网络的整体误差来源于每层的误差累积,提出减少每一层的误差的方法:1使用Threshold来抑制过多的激活值,从而能用更少的timesteps(simulation time);2使用Shift的方法补偿激活函数的误差。

方法

对ANN到SNN的建模

  • ANN d=h(Wa)
  • SNN $a’_{l+1}=h’(Wa’)$
    • 其中a’是post synaptic potential(PSP)突触后电位,化学突触的突触后末端的膜电位的变化,也就是前一层由于spike的减少的电位
  • $a’_{l+1}=Wa’-v(T)/T$
    • v(T)是T时刻的膜电位
  • $a’{l+1}=h’(Wa’)=V{th}/T*clip(floor(TWa/V_{th}),0,T)$
    • 输出脉冲等于输入脉冲造成的膜电位影响能被当前层PSP,也就是V_{th}的多少倍

分解转化误差到每层

  • 通过理论分析将转化误差问题化归为最小化每层的激活值误差问题

减少误差的方法

  • ANN上使用Threshold(类似ReLU6)来抑制过多的激活值
    • 取1或者2
  • SNN上使用Shift来减少激活函数带来的误差
    • h’(z)和h(z)存在系统误差,需要将数值shift一下
    • $E_z[h’(z-\delta)-h(z)]^2$
    • $\delta=V_{th}/2T$
  • 最后总误差控制到$\Delta L\approx LV_{th}^2/4T$

转换流程

  • 初始化V_th=0
  • 采样一系列samples
    • $V_{th}^l=max(V_{th}^l,max(a_l))$
  • weight:=ANN.weight
  • bias:=ANN.bias+V_{th}/2T

实验

  • ANN上使用Threshold对结果影响不大,甚至还有提升
  • timesteps可以讲到50以下基本不掉精度
    • Shift单独用可以在80以下不掉精度
    • Threshold单独用可以在60以下不掉精度

总结

这篇paper从理论的角度来探讨了ANN转换SNN的技术,思路非常棒,使用PSP也给我提供了一个新的视角。
但是这个既没有Quantization也没处理Pooling和BN层,所以仅从Conv上可以参考。

论文笔记 《Binary Neural Networks: A Survey》

这篇论文是发表在期刊Pattern Recognition的论文《Binary Neural Networks: A Survey》,作者来自于北航,一座Haotong Qin,通讯Xianglong Liu,也是IR-Net的作者。

文章对2020年及以前二值神经网络进行了总结,把二值化的方法分为:直接量化、优化方法量化(包括最小化量化误差、升级网络的loss function、减少STE梯度的误差)

论文

简单的二值网络

  • 用固定的量化函数直接量化weight和activation。
  • 使用STE来finetune
  • BinaryConnect 2016
  • BNN (Binarized Neural Networks)

最小化量化误差

  • $J(b,\alpha)=|x-\alpha b|^2$
  • $arg\min_{\alpha b}J$
  • Binary Weight Netowrks
  • XNOR-Net
  • DoReFa-Net
  • ABC-Net
  • LQ-Nets

升级网络的Loss function

  • 联合优化binarization和task-specific objective
  • 问题
    • “degeneration”, “saturation”and “gradient mismatch”
  • Distilled BNN
  • Distillation and Quantization
  • BNN-DL
  • CI-BCNN
  • INQ(Incremental Network Quantization)

减少STE梯度的误差

  • 解决sign和STE的梯度不匹配问题
  • Bi-Real net
  • BNN+
  • IR-Net

其他应用

  • BNN的鲁棒性比全精度要好
    • 变化输入对BNN影响不大
  • BNN有利于解释神经网络
    • 重要性排序
    • 改变01对结果影响大的

训练技巧

  • 网络结构的变换
    • 重新放置Pooling
    • Conv前面加入BN层
    • 连接全精度网络和binary网络
    • 增加channels
  • 网络hyper-parameters
    • Adam
    • momentum of BN
  • 梯度估计

总结

看完对这个领域终于有个蓝图的认知了,虽然分类的理由不够充分,还有一些模糊不好分类的工作。想了有一些可以做的点。

论文笔记 《Quantization Networks》

这篇论文是发表在CVPR2019的论文《Quantization Networks》,作者来自达摩院,第一作者是Jiwei Yang(中科大,田新梅学生),mentor 华先胜(IEEE Fellow 达摩院城市大脑人工智能负责人)。

这篇论文提出了一种新的可微分的方法实现网络权重和激活值的量化,取得了不错的效果。量化函数被建模成多个Sigmoid函数的线性组合,整个网络可以直接通过反向传播被端到端训练。

方法

量化函数的重新formulation

  • $y=\sum_{i=1}^n s_i \mathcal{A}(\beta x-b_i)-o$
    • $\beta$和$b_i$决定了每个量化位点的位置
      • $b_i$是第i个量化区间的开始点
    • $\mathcal{A}$是unit step function单位越界函数,>0为1,<0为0
    • $s_i$决定每个量化位点的间隔
      • 如{-4,-2,-1,0,1,2,4}
    • $o$是全局偏移量,是$1/2 \sum_{i=1}^n s_i$

使用Sigmoid函数来近似单位跃阶函数

  • $\sigma(Tx)=\frac{1}{1+exp(-Tx)}$
    • 当T越大的时候,和单位跃阶函数相近
    • 当T=0的时候,等价于线性函数
  • $y=\alpha (\sum_{i=1}^n s_i \sigma(T(\beta x - b_i))-o)$
    • 训练的时候不断增加T
    • $x, \alpha, \beta, b_i $的梯度都能求出
  • 训练的时候使用近似函数,前向预测的时候使用量化函数

实验

  • ImageNet ResNet-18(raw 70 top1 )
    • W/A 1/32 66.5
    • 3/32 70.4
    • 1/1 53.6
    • 1/2 63.4
  • SSD pascal VOC (raw 77.8 mAP)
    • 2/32 76.3
  • 影响因素
    • 非均匀量化,bias做成K-means,性能高一点点
    • pretrained model 效果好很多
    • T的收敛速度,需要在{5,10,20,40}里面选择调参

总结

通过重新formulate量化函数,可以比较好的找到一种可微分的近似方法,思路很清晰。这个方法没有名字,要是有个名字就好了。

论文笔记 《Searching for MobileNetV3》

这篇论文是发表在ICCV2019的《Searching for MobileNetV3》,作者是Google Brain的Quoc V. Le和Hartwig Adam组。第一作者是Andrew Howard。

这篇论文结合NAS以及SE Block的设计新方法改进MobileNetV2。

方法

结合SE Block新设计

  • 使用MobileNetV2的inverted residual block+MnasNet的SE
  • 仅在部分层使用se-block

使用NAS+NetAdapt

  • NAS直接用MnasNet搜到的结构
  • NetAdapt在这个搜到的结构上,随机sample每一层的expand ratio,和每一个block的bottleneck size,做Evolution

改进的激活函数

  • hswish替代原来的swish,不用sigmoid用ReLU6
  • $h-swish(x)=x RELU6(x+3)/6 $
  • 在网络前面block里面使用relu,后面使用hswish

改进block前后网络结构

  • 前面stem,使用16channels替代32channels
  • 最后一层使用avg-pool替代1x1Conv

Segmentation

  • 提出Lite R-ASPP(LR-ASPP),减少了计算量,提升了性能

总结

结合一些已有的算法,做了详实的实验,得到了很好的效果。

论文笔记: 《MicroNet: Towards Image Recognition with Extremely Low FLOPs》

这篇论文是2020年放在Arxiv上的《MicroNet: Towards Image Recognition with Extremely Low FLOPs》,第一作者是UCSD的Yunsheng Li,其它作者是Mentor是微软AI&R Ambience Intelligence Zicheng Liu team,这篇论文和Dynamic ReLU一脉相称。

这篇论文提出了在保持通道数的情况下,如何减少连接数和减少层数来减少网络计算量,同时保持精度。首先提出Micro-Factorized的卷积将Depth-wise和point-wise的卷积拆分成多个卷积;其次提出了Dynamic Shift-Max这种动态的activation。

方法

principle

  • 在避免减少卷积通道数的情况下减少node的连接数
  • 减少网络的层数,同时提升activation的非线性性能

Micro-Factorized Convolution

  • 将Point-wise的卷积分成多个卷积,W=PφQ
    • 原本是C->C的卷积通道数
    • P压缩通道数到C/R,采用G个group的卷积
    • φ是一个Shuffle层
    • Q是一个提升通道到C,采用G个group的卷积
    • 为了保证所有的output channel和input channel相连接,推算出G=sqrt(C/R)
  • 将Depth-wise的卷积搞成kx1和1xk的卷积

Dynamic Shift-Max

  • 将J个Group的activation做weighted sum,weight使用SE block得到的attention
  • 使用K套不同的SE block的Weight,求最大值
  • $y_i=\max_{k\le K}{ \sum_{j} a^k(x) x_j }$
    • $x_j$是第j个group里面的activation

网络

  • Micro-Block-A
    • Micro-Factorized depthwise + pointwise conv(grouped)
    • 在前面的层效果好,因为channel数不多,所以depthwise卷积开销不大
  • Micro-BLock-B
    • Micro-Factorized depthwise(提升channel数量) + Micro-Facgtorized pointwise conv
  • C
    • Micro-Factorized depthwise + pointwise conv

实验

  • M0
    • AABCCC
    • 6M MAdds
    • 53top-1 ImageNet
  • Pose Estimation和Segmentation的实验也证明比MobileNet好很多

总结

  • 这篇论文对于连接性和通道数的分析很有意义,通过拆分连接达到减少计算量的目的。但实际硬件的效率可能和访问关系较大,再减少连接数可能不是特别有优势了。对于非线性的问题,我认为证据不足,需要继续研究。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×