论文阅读 | 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
    在这里插入图片描述
    其中,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
    膜电位神经元,引入时间信息
    在这里插入图片描述
    膜电位的输出由这一时刻的输入和上一时刻的电位状态加权组合而成

代码

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
在这里插入图片描述
第二种:PA-EVSNN
在这里插入图片描述
其中,每一层的SNN神经元网络在这里插入图片描述

可以由构成
在这里插入图片描述
其代码层的组成为一层卷积,一层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网络差不多的效果
在这里插入图片描述
功耗对比
参数量有明显下降
在这里插入图片描述

总结

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值