神经形态数据集DVS128Gesture在SNN上的训练、可视化处理

        这个项目是我本科毕设的一小部分,感觉没啥人写这个,我就写一写纪念下我本科最后一次大作业(主要分享核心思想,不含代码)。

1、DVS128Gesture数据集 

        DVS128 Gesture数据集 是一个使用 DVS 相机拍摄的,应用于手势识别任务的神经形态数据集,由IBM 公司在 2017 年开源发布。 DVS128 Gesture 数据集包含了11 种不同的手势类别,由 29 个不同个体在 3 种不同的光照条件下进行样本演示,通过DVS 相机直接拍摄手势的动态信息,然后标注完成之后组合成手势识别数据集,与第二章中提到的直接标注数据集的制作手段相同。
        DVS128 Gesture共有 1464 个样本数据,其中训练集 1176 份、测试集 288 份,图片的像素为标准的128x128 尺寸大小。
gesture_classes = ['Hand Clapping', 'R Hand Wave', 'L Hand Wave', 'R Arm Clockwise',
           'R Arm C Clockwise', 'L Arm Clockwise', 'L Arm C Clockwise', 'Arm Rolls',
           'Air Drums', 'Air Guitar', 'Other']

2、数据处理

        在git官网下载好数据集后,使用SpikingJelly库文件datasets.dvs_128gesture中的DVS128Gesture解压函数进行解压

3、训练、测试

3.1、训练

        训练过程与其余snn训练过程基本一致。特别的地方在于,DVS128Gesture处理得到的数据是(T、C、H、W),于是使用Dataloader函数进行打包时会得到(N、T、C、H、W)数据格式,不符合snn处理的数据格式,于是我们必须将N、T交换,使用transpose函数进行此操作。

        值得注意的是,SNN在完成一次batch的训练后,LIF神经元的膜电位必须重置,防止干扰后续batch的训练效果。

        训练过程参数可以通过调用os库进行输出

        训练结束,更新模型参数

3.2、测试

        如果大家理解训练过程,那么测试也只是简化了BP的训练过程,因此不再赘述。

4、输出可视化

        输出可视化分为两种:一是使用外部的gesture事件流数据、二是使用测试集中的事件流数据。由于本文缺少dvs相机,无法实现外部gesture事件流数据生成,于是退而求其次,使用测试集中的数据进行可视化验证。

        输出可视化主要包括两方面内容:一是事件流数据的动态显示、二是输出预测pred的结果。

4.1、事件流数据动态显示

        主要内容:使用plt的停顿函数依次显示不同时间步长的事件状态。

4.2、预测pred结果

        主要内容:输出预测值以及置信度。其中:由于输入x的格式(T、C、H、W)无法直接被snn接纳处理,因此我们进行填充使得输入x是一个batchsize=1的批数据。将所有时间步长的平均输出作为pred的参考。

4.3、可视化效果

        其中:前者是预测的手势,()里面是置信度。

dvs128gesture

5、代码框架

<think>好的,我需要帮助用户寻找与DVS(动态视觉传感器)相关的PyTorch实现或教程。用户的问题是关于如何在PyTorch中实现DVS或如何使用DVS数据。首先,我应该回忆一下用户提供的引用内容,看看是否有相关的资源。 查看引用1,提到了SpikingJelly,这是一个基于PyTorch的脉冲神经网络框架,可能涉及处理DVS数据,因为SNN通常处理事件相机数据。引用3和4讨论了DVS数据集和模型的应用,比如攻击实验和模型比较。引用2是DVS-SR的训练脚本,可能包含数据处理的代码。引用5似乎不相关,可以暂时忽略。 接下来,我需要整理这些引用中的相关信息。SpikingJelly(引用1)可能提供处理DVS数据的工具或示例。DVS-SR的代码(引用2)可能展示如何加载和处理DVS数据。引用3和4中的实验可能使用特定的数据集或模型结构,这些可能有PyTorch实现。 用户需要具体的实现或教程,因此我应该推荐SpikingJelly项目,并指出其文档和示例。此外,可以提到DVS-SR的代码作为具体实例,并引用相关论文或数据集处理的方法。可能还需要提到如何处理DVS数据,比如使用DataLoader和转换工具,如引用2中的导入部分所示。 同时,我需要确保回答结构清晰,分点说明资源、数据处理和模型构建,并附上相关引用。最后生成相关问题,帮助用户进一步探索。</think>### DVS相关PyTorch实现及数据使用方法 #### 1. 开源框架推荐:SpikingJelly SpikingJelly是基于PyTorch的脉冲神经网络SNN)框架,提供**完整的DVS数据预处理工具链**,支持事件流数据的张量化表示与高效加载。其特性包括: - 内置主流DVS数据集接口(如N-MNIST、DVS128 Gesture) - 事件流转图像/点云的可视化工具 - 时空联合编码模块(引用1) 示例代码加载DVS数据集: ```python from spikingjelly.datasets import DVS128Gesture dataset = DVS128Gesture(root_dir='./data', train=True) ``` #### 2. 数据处理关键步骤 DVS数据的典型处理流程包含: 1. **时间分桶**:将连续事件流划分为时间窗口 $$ \Delta t = \frac{T_{\text{total}}}{N_{\text{bins}}} $$ 2. **空间量化**:将事件映射到像素网格 3. **特征增强**:随机翻转、裁剪等(引用2中`torchvision.transforms`的应用) #### 3. 模型架构参考 针对DVS数据特性,推荐以下PyTorch实现范式: - **递归网络**:在深层使用LSTM/GRU捕捉时序特征(引用4) - **脉冲卷积**:结合`spikingjelly.activation_based`模块构建SNN - **混合架构**:前端CNN提取空间特征,后端RNN处理时间维度 #### 4. 实战资源指引 - **SpikingJelly官方示例**:包含DVS分类任务的完整训练脚本(引用1项目地址) - **DVS超分辨率实现**:参考引用2的`DVS-SR`代码结构 - **对抗攻击研究**:引用3的实验方案提供数据预处理范例
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值