论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network

前言:用SNN脉冲神经网络做基于事件相机的图像重建的文章
论文地址:【here】
代码地址:【here】

Event-based Video Reconstruction via Potential-assisted Spiking Neural Network

引言

目前的重建方法:用ANN人工神经网络
问题:人工神经网络,计算密集型,消耗大的功率,不利于处理低时延事件
解决:稀疏事件数据可以有效地与神经形态硬件芯片相结合,用于低功率脉冲神经网络(SNN)应用(神经形态芯片可以参考这篇知乎)

因此,本文结合了SNN,提出了第一个基于SNN的做事件相机图像重建的文章,并提出了一种混合电位辅助SNN(PAEVSNN),它利用自适应膜电位(AMP)神经元来改善EVSNN的时间感受域。

方法设计

1.输入表征
基于距离传播的体素网格,和E2VID一样

2.脉冲神经元的设计

  • LIF Neurons
    论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network_第1张图片
    其中,Xt是输入,Vt-1是上一时刻电位,1/τ(-(Vt-1-Vrest))是触发后的衰减的电位状态
    St是神经元输出,即超过阈值输出一个脉冲,这里的原本H函数不可导,用1/π(arctan(πx)+1/2)替代

代码

class LIFNode(BaseNode):
    def __init__(self, tau: float = 2., v_threshold: float = 1.,
                 v_reset: float = 0., surrogate_function: Callable = surrogate.Sigmoid(),
                 detach_reset: bool = False):

        assert isinstance(tau, float) and tau > 1.

        super().__init__(v_threshold, v_reset, surrogate_function, detach_reset)
        self.tau = tau

    def extra_repr(self):
        return super().extra_repr() + f', tau={self.tau}'

    def neuronal_charge(self, x: torch.Tensor):
        if self.v_reset is None:
            self.v = self.v + (x - self.v) / self.tau

        else:
            if isinstance(self.v_reset, float) and self.v_reset == 0.:
                self.v = self.v + (x - self.v) / self.tau
            else:
                self.v = self.v + (x - (self.v - self.v_reset)) / self.tau
  • Membrane Potential Neurons
    膜电位神经元,引入时间信息
    论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network_第2张图片
    膜电位的输出由这一时刻的输入和上一时刻的电位状态加权组合而成

代码

class MpLIFNode(MpNode):
    def __init__(self, tau: float = 2., v_threshold: float = 1.,
                 v_reset: float = 0., surrogate_function: Callable = surrogate.Sigmoid(),
                 detach_reset: bool = False):
        assert isinstance(tau, float) and tau > 1.

        super().__init__(v_threshold, v_reset, surrogate_function, detach_reset)
        self.tau = tau

    def extra_repr(self):
        return super().extra_repr() + f', tau={self.tau}'
 
    def neuronal_charge(self, x: torch.Tensor):
        if self.v_reset is None:
            self.v = self.v + (x - self.v) / self.tau

        else:
            if isinstance(self.v_reset, float) and self.v_reset == 0.:
                self.v = self.v + (x - self.v) / self.tau
            else:
                self.v = self.v + (x - (self.v - self.v_reset)) / self.tau

网络架构
第一种:EVSNN
论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network_第3张图片
第二种:PA-EVSNN
论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network_第4张图片
其中,每一层的SNN神经元网络在这里插入图片描述

可以由构成
论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network_第5张图片
其代码层的组成为一层卷积,一层batchnorm归一化和一层LIFNode,实现局部连接的神经元

        self.static_conv = nn.Sequential(
            nn.Conv2d(1, 32, kernel_size=5, padding=2, bias=False),
            nn.BatchNorm2d(32),
            LIFNode(v_threshold=v_threshold, tau = tau, v_reset=v_reset, surrogate_function=surrogate.ATan()),
        )

为了扩大感受野,网络设计了三层降采样,在更小的感受野区域与领域神经元进行连接,因此实现全局连接

实验

对比实验
该网络与ANN相比,能达到和ANN网络差不多的效果
论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network_第6张图片
功耗对比
参数量有明显下降
论文阅读 | Event-based Video Reconstruction via Potential-assisted Spiking Neural Network_第7张图片

总结

是第一篇用SNN做重建的文章,用SNN神经元构建卷积网络学权重的思想以及代码部分都很值得学习,但是在功耗和性能上优势不太能体现出来

你可能感兴趣的:(论文阅读,计算机视觉,人工智能)