spikingjelly.datasets package

Submodules

spikingjelly.datasets.asl_dvs module

class spikingjelly.datasets.asl_dvs.ASLDVS(root: str, train: bool, split_ratio=0.9, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • train (bool) – 是否使用训练集

  • split_ratio (float) – 分割比例。每一类中前split_ratio的数据会被用作训练集,剩下的数据为测试集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

ASL-DVS数据集,出自 Graph-Based Object Classification for Neuromorphic Vision Sensing, 包含24个英文字母(从A到Y,排除J)的美国手语,American Sign Language (ASL)。更多信息参见 https://github.com/PIX2NVS/NVS2Graph, 原始数据的下载地址为 https://www.dropbox.com/sh/ibq0jsicatn7l6r/AACNrNELV56rs1YInMWUs9CAa?dl=0

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static read_bin(file_name: str)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]

spikingjelly.datasets.cifar10_dvs module

spikingjelly.datasets.cifar10_dvs.read_bits(arr, mask=None, shift=None)[源代码]
spikingjelly.datasets.cifar10_dvs.skip_header(fp)[源代码]
spikingjelly.datasets.cifar10_dvs.load_raw_events(fp, bytes_skip=0, bytes_trim=0, filter_dvs=False, times_first=False)[源代码]
spikingjelly.datasets.cifar10_dvs.parse_raw_address(addr, x_mask=4190208, x_shift=12, y_mask=2143289344, y_shift=22, polarity_mask=2048, polarity_shift=11)[源代码]
spikingjelly.datasets.cifar10_dvs.load_events(fp, filter_dvs=False, **kwargs)[源代码]
class spikingjelly.datasets.cifar10_dvs.CIFAR10DVS(root: str, train: bool, split_ratio=0.9, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • train (bool) – 是否使用训练集

  • split_ratio (float) – 分割比例。每一类中前split_ratio的数据会被用作训练集,剩下的数据为测试集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

CIFAR10 DVS数据集,出自 CIFAR10-DVS: An Event-Stream Dataset for Object Classification, 数据来源于DVS相机拍摄的显示器上的CIFAR10图片。原始数据的下载地址为 https://figshare.com/articles/dataset/CIFAR10-DVS_New/4724671

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static read_bin(file_name: str)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
static get_frames_item(file_name)[源代码]
static get_events_item(file_name)[源代码]

spikingjelly.datasets.dvs_gesture module

class spikingjelly.datasets.dvs128_gesture.DVS128Gesture(root: str, train: bool, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录。其中应该至少包含 DvsGesture.tar.gzgesture_mapping.csv

  • train (bool) – 是否使用训练集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

DVS128 Gesture数据集,出自 A Low Power, Fully Event-Based Gesture Recognition System, 数据来源于DVS相机拍摄的手势。原始数据的原始下载地址参见 https://www.research.ibm.com/dvsgesture/

关于转换成帧数据的细节,参见 integrate_events_to_frames()

参数
  • root (str) – root directory of dataset, which should contain DvsGesture.tar.gz and gesture_mapping.csv

  • train (bool) – whether use the train dataset. If False, use the test dataset

  • use_frame (bool) – whether use the frames data. If False, use the events data

  • frames_num (int) – the number of frames

  • split_by (str) – how to split the events, can be 'number', 'time'

  • normalization (str or None) – how to normalize frames, can be None, 'frequency', 'max', 'norm', 'sum'

DVS128 Gesture dataset, which is provided by A Low Power, Fully Event-Based Gesture Recognition System <https://openaccess.thecvf.com/content_cvpr_2017/papers/Amir_A_Low_Power_CVPR_2017_paper.pdf>, contains the gesture recorded by a DVS128 camera. The origin dataset can be downloaded from https://www.research.ibm.com/dvsgesture/.

For more details about converting events to frames, see integrate_events_to_frames()

static get_wh()[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static read_bin(file_name: str)[源代码]
static convert_aedat_dir_to_npy_dir(aedat_data_dir: str, events_npy_train_root: str, events_npy_test_root: str)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]

spikingjelly.datasets.n_mnist module

class spikingjelly.datasets.n_mnist.NMNIST(root: str, train: bool, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • train (bool) – 是否使用训练集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

Neuromorphic-MNIST数据集,出自 Converting Static Image Datasets to Spiking Neuromorphic Datasets Using Saccades, 数据来源于ATIS相机拍摄的显示器上的MNIST图片。原始数据的原始下载地址参见 https://www.garrickorchard.com/datasets/n-mnist

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static read_bin(file_name: str)[源代码]
参数

file_name – N-MNIST原始bin格式数据的文件名

返回

一个字典,键是{‘t’, ‘x’, ‘y’, ‘p’},值是np数组

原始的N-MNIST提供的是bin格式数据,不能直接读取。本函数提供了一个读取的接口。 本函数参考了 https://github.com/jackd/events-tfds 的代码。

原始数据以二进制存储:

Each example is a separate binary file consisting of a list of events. Each event occupies 40 bits as described below: bit 39 - 32: Xaddress (in pixels) bit 31 - 24: Yaddress (in pixels) bit 23: Polarity (0 for OFF, 1 for ON) bit 22 - 0: Timestamp (in microseconds)

static download_and_extract(download_root: str, extract_root: str)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]

spikingjelly.datasets.nav_gesture module

class spikingjelly.datasets.nav_gesture.NAVGesture(root: str, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

NavGesture 数据集,出自 Event-based Visual Gesture Recognition with Background Suppression running on a smart-phone, 数据来源于ATIS相机拍摄的手势。原始数据的原始下载地址参见 https://www.neuromorphic-vision.com/public/downloads/navgesture/

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static read_bin(file_name: str)[源代码]
参数

file_name – NavGesture原始bin格式数据的文件名

返回

一个字典,键是{‘t’, ‘x’, ‘y’, ‘p’},值是np数组

原始的NavGesture提供的是bin格式数据,不能直接读取。本函数提供了一个读取的接口。 原始数据以二进制存储:

Events are encoded in binary format on 64 bits (8 bytes): 32 bits for timestamp 9 bits for x address 8 bits for y address 2 bits for polarity 13 bits padding

static get_label(file_name)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static create_frames_dataset(events_data_dir, frames_data_dir, frames_num=10, split_by='time', normalization=None)[源代码]

spikingjelly.datasets.utils.module

class spikingjelly.datasets.utils.FunctionThread(f, *args, **kwargs)[源代码]

基类:threading.Thread

run()[源代码]
spikingjelly.datasets.utils.integrate_events_to_frames(events, height, width, frames_num=10, split_by='time', normalization=None)[源代码]
参数
  • events – 键是{‘t’, ‘x’, ‘y’, ‘p’},值是np数组的的字典

  • height – 脉冲数据的高度,例如对于CIFAR10-DVS是128

  • width – 脉冲数据的宽度,例如对于CIFAR10-DVS是128

  • frames_num – 转换后数据的帧数

  • split_by – 脉冲数据转换成帧数据的累计方式,允许的取值为 'number', 'time'

  • normalization – 归一化方法,允许的取值为 None, 'frequency', 'max', 'norm', 'sum'

返回

转化后的frames数据,是一个 shape = [frames_num, 2, height, width] 的np数组

记脉冲数据为 \(E_{i} = (t_{i}, x_{i}, y_{i}, p_{i}), i=0,1,...,N-1\),转换为帧数据 \(F(j, p, x, y), j=0,1,...,M-1\)

若划分方式 split_by'time',则

\[\begin{split}\Delta T & = [\frac{t_{N-1} - t_{0}}{M}] \\ j_{l} & = \mathop{\arg\min}\limits_{k} \{t_{k} | t_{k} \geq t_{0} + \Delta T \cdot j\} \\ j_{r} & = \begin{cases} \mathop{\arg\max}\limits_{k} \{t_{k} | t_{k} < t_{0} + \Delta T \cdot (j + 1)\} + 1, & j < M - 1 \cr N, & j = M - 1 \end{cases} \\ F(j, p, x, y) & = \sum_{i = j_{l}}^{j_{r} - 1} \mathcal{I_{p, x, y}(p_{i}, x_{i}, y_{i})}\end{split}\]

若划分方式 split_by'number',则

\[\begin{split}j_{l} & = [\frac{N}{M}] \cdot j \\ j_{r} & = \begin{cases} [\frac{N}{M}] \cdot (j + 1), & j < M - 1 \cr N, & j = M - 1 \end{cases}\\ F(j, p, x, y) & = \sum_{i = j_{l}}^{j_{r} - 1} \mathcal{I_{p, x, y}(p_{i}, x_{i}, y_{i})}\end{split}\]

其中 \(\mathcal{I}\) 为示性函数,当且仅当 \((p, x, y) = (p_{i}, x_{i}, y_{i})\) 时为1,否则为0。

normalization'frequency'

split_bytime

\[F_{norm}(j, p, x, y) = \begin{cases} \frac{F(j, p, x, y)}{\Delta T}, & j < M - 1 \cr \frac{F(j, p, x, y)}{\Delta T + (t_{N-1} - t_{0}) \bmod M}, & j = M - 1 \end{cases}\]

split_bynumber

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y)}{t_{j_{r}} - t_{j_{l}}}\]

normalization'max'

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y)}{\mathrm{max} F(j, p)}\]

normalization'norm'

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y) - \mathrm{E}(F(j, p))}{\sqrt{\mathrm{Var}(F(j, p))}}\]

normalization'sum'

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y)}{\sum_{a, b} F(j, p, a, b)}\]
参数
  • events – a dict with keys are {‘t’, ‘x’, ‘y’, ‘p’} and values are numpy arrays

  • height – the height of events data, e.g., 128 for CIFAR10-DVS

  • width – the width of events data, e.g., 128 for CIFAR10-DVS

  • frames_num – frames number

  • split_by – how to split the events, can be 'number', 'time'

  • normalization – how to normalize frames, can be None, 'frequency', 'max', 'norm', 'sum'

返回

the frames data with shape = [frames_num, 2, height, width]

The events data are denoted by \(E_{i} = (t_{i}, x_{i}, y_{i}, p_{i}), i=0,1,...,N-1\), and the converted frames data are denoted by \(F(j, p, x, y), j=0,1,...,M-1\).

If split_by is 'time', then

\[\begin{split}\Delta T & = [\frac{t_{N-1} - t_{0}}{M}] \\ j_{l} & = \mathop{\arg\min}\limits_{k} \{t_{k} | t_{k} \geq t_{0} + \Delta T \cdot j\} \\ j_{r} & = \begin{cases} \mathop{\arg\max}\limits_{k} \{t_{k} | t_{k} < t_{0} + \Delta T \cdot (j + 1)\} + 1, & j < M - 1 \cr N, & j = M - 1 \end{cases} \\ F(j, p, x, y) & = \sum_{i = j_{l}}^{j_{r} - 1} \mathcal{I_{p, x, y}(p_{i}, x_{i}, y_{i})}\end{split}\]

If split_by is 'number', then

\[\begin{split}j_{l} & = [\frac{N}{M}] \cdot j \\ j_{r} & = \begin{cases} [\frac{N}{M}] \cdot (j + 1), & j < M - 1 \cr N, & j = M - 1 \end{cases}\\ F(j, p, x, y) & = \sum_{i = j_{l}}^{j_{r} - 1} \mathcal{I_{p, x, y}(p_{i}, x_{i}, y_{i})}\end{split}\]

where \(\mathcal{I}\) is the characteristic function,if and only if \((p, x, y) = (p_{i}, x_{i}, y_{i})\), this function is identically 1 else 0.

If normalization is 'frequency',

if split_by is time,

\[F_{norm}(j, p, x, y) = \begin{cases} \frac{F(j, p, x, y)}{\Delta T}, & j < M - 1 \cr \frac{F(j, p, x, y)}{\Delta T + (t_{N-1} - t_{0}) \bmod M}, & j = M - 1 \end{cases}\]

if split_by is number,

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y)}{t_{j_{r}} - t_{j_{l}}}\]

If normalization is 'max', then

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y)}{\mathrm{max} F(j, p)}\]

If normalization is 'norm', then

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y) - \mathrm{E}(F(j, p))}{\sqrt{\mathrm{Var}(F(j, p))}}\]

If normalization is 'sum', then

\[F_{norm}(j, p, x, y) = \frac{F(j, p, x, y)}{\sum_{a, b} F(j, p, a, b)}\]
spikingjelly.datasets.utils.normalize_frame(frames: numpy.ndarray, normalization: str)[源代码]
spikingjelly.datasets.utils.convert_events_dir_to_frames_dir(events_data_dir, frames_data_dir, suffix, read_function, height, width, frames_num=10, split_by='time', normalization=None, thread_num=1, compress=False)[源代码]
spikingjelly.datasets.utils.extract_zip_in_dir(source_dir, target_dir)[源代码]
参数
  • source_dir – 保存有zip文件的文件夹

  • target_dir – 保存zip解压后数据的文件夹

返回

None

source_dir 目录下的所有*.zip文件,解压到 target_dir 目录下的对应文件夹内

class spikingjelly.datasets.utils.EventsFramesDatasetBase[源代码]

基类:torch.utils.data.dataset.Dataset

static get_wh()[源代码]
返回

(width, height) width: int

events或frames图像的宽度

height: int

events或frames图像的高度

返回类型

tuple

static read_bin(file_name: str)[源代码]
参数

file_name (str) – 脉冲数据的文件名

返回

events 键是{‘t’, ‘x’, ‘y’, ‘p’},值是np数组的的字典

返回类型

dict

static get_events_item(file_name)[源代码]
参数

file_name (str) – 脉冲数据的文件名

返回

(events, label) events: dict

键是{‘t’, ‘x’, ‘y’, ‘p’},值是np数组的的字典

label: int

数据的标签

返回类型

tuple

static get_frames_item(file_name)[源代码]
参数

file_name (str) – 帧数据的文件名

返回

(frames, label) frames: np.ndarray

shape = [frames_num, 2, height, width] 的np数组

label: int

数据的标签

返回类型

tuple

static download_and_extract(download_root: str, extract_root: str)[源代码]
参数
  • download_root (str) – 保存下载文件的文件夹

  • extract_root (str) – 保存解压后文件的文件夹

下载数据集到 download_root,然后解压到 extract_root

static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
参数
  • events_data_dir (str) – 保存脉冲数据的文件夹,文件夹的文件全部是脉冲数据

  • frames_data_dir (str) – 保存帧数据的文件夹

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式

  • normalization (str or None) – 归一化方法

events_data_dir 文件夹下的脉冲数据全部转换成帧数据,并保存在 frames_data_dir。 转换参数的详细含义,参见 integrate_events_to_frames 函数。

Module contents

class spikingjelly.datasets.ASLDVS(root: str, train: bool, split_ratio=0.9, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • train (bool) – 是否使用训练集

  • split_ratio (float) – 分割比例。每一类中前split_ratio的数据会被用作训练集,剩下的数据为测试集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

ASL-DVS数据集,出自 Graph-Based Object Classification for Neuromorphic Vision Sensing, 包含24个英文字母(从A到Y,排除J)的美国手语,American Sign Language (ASL)。更多信息参见 https://github.com/PIX2NVS/NVS2Graph, 原始数据的下载地址为 https://www.dropbox.com/sh/ibq0jsicatn7l6r/AACNrNELV56rs1YInMWUs9CAa?dl=0

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static read_bin(file_name: str)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
class spikingjelly.datasets.CIFAR10DVS(root: str, train: bool, split_ratio=0.9, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • train (bool) – 是否使用训练集

  • split_ratio (float) – 分割比例。每一类中前split_ratio的数据会被用作训练集,剩下的数据为测试集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

CIFAR10 DVS数据集,出自 CIFAR10-DVS: An Event-Stream Dataset for Object Classification, 数据来源于DVS相机拍摄的显示器上的CIFAR10图片。原始数据的下载地址为 https://figshare.com/articles/dataset/CIFAR10-DVS_New/4724671

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static read_bin(file_name: str)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
static get_frames_item(file_name)[源代码]
static get_events_item(file_name)[源代码]
class spikingjelly.datasets.DVS128Gesture(root: str, train: bool, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录。其中应该至少包含 DvsGesture.tar.gzgesture_mapping.csv

  • train (bool) – 是否使用训练集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

DVS128 Gesture数据集,出自 A Low Power, Fully Event-Based Gesture Recognition System, 数据来源于DVS相机拍摄的手势。原始数据的原始下载地址参见 https://www.research.ibm.com/dvsgesture/

关于转换成帧数据的细节,参见 integrate_events_to_frames()

参数
  • root (str) – root directory of dataset, which should contain DvsGesture.tar.gz and gesture_mapping.csv

  • train (bool) – whether use the train dataset. If False, use the test dataset

  • use_frame (bool) – whether use the frames data. If False, use the events data

  • frames_num (int) – the number of frames

  • split_by (str) – how to split the events, can be 'number', 'time'

  • normalization (str or None) – how to normalize frames, can be None, 'frequency', 'max', 'norm', 'sum'

DVS128 Gesture dataset, which is provided by A Low Power, Fully Event-Based Gesture Recognition System <https://openaccess.thecvf.com/content_cvpr_2017/papers/Amir_A_Low_Power_CVPR_2017_paper.pdf>, contains the gesture recorded by a DVS128 camera. The origin dataset can be downloaded from https://www.research.ibm.com/dvsgesture/.

For more details about converting events to frames, see integrate_events_to_frames()

static get_wh()[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static read_bin(file_name: str)[源代码]
static convert_aedat_dir_to_npy_dir(aedat_data_dir: str, events_npy_train_root: str, events_npy_test_root: str)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]
class spikingjelly.datasets.NMNIST(root: str, train: bool, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • train (bool) – 是否使用训练集

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

Neuromorphic-MNIST数据集,出自 Converting Static Image Datasets to Spiking Neuromorphic Datasets Using Saccades, 数据来源于ATIS相机拍摄的显示器上的MNIST图片。原始数据的原始下载地址参见 https://www.garrickorchard.com/datasets/n-mnist

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static read_bin(file_name: str)[源代码]
参数

file_name – N-MNIST原始bin格式数据的文件名

返回

一个字典,键是{‘t’, ‘x’, ‘y’, ‘p’},值是np数组

原始的N-MNIST提供的是bin格式数据,不能直接读取。本函数提供了一个读取的接口。 本函数参考了 https://github.com/jackd/events-tfds 的代码。

原始数据以二进制存储:

Each example is a separate binary file consisting of a list of events. Each event occupies 40 bits as described below: bit 39 - 32: Xaddress (in pixels) bit 31 - 24: Yaddress (in pixels) bit 23: Polarity (0 for OFF, 1 for ON) bit 22 - 0: Timestamp (in microseconds)

static download_and_extract(download_root: str, extract_root: str)[源代码]
static create_frames_dataset(events_data_dir: str, frames_data_dir: str, frames_num: int, split_by: str, normalization: str)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]
class spikingjelly.datasets.NAVGesture(root: str, use_frame=True, frames_num=10, split_by='number', normalization='max')[源代码]

基类:spikingjelly.datasets.utils.EventsFramesDatasetBase

参数
  • root (str) – 保存数据集的根目录

  • use_frame (bool) – 是否将事件数据转换成帧数据

  • frames_num (int) – 转换后数据的帧数

  • split_by (str) – 脉冲数据转换成帧数据的累计方式。'time''number'

  • normalization (str or None) – 归一化方法,为 None 表示不进行归一化; 为 'frequency' 则每一帧的数据除以每一帧的累加的原始数据数量; 为 'max' 则每一帧的数据除以每一帧中数据的最大值; 为 norm 则每一帧的数据减去每一帧中的均值,然后除以标准差

NavGesture 数据集,出自 Event-based Visual Gesture Recognition with Background Suppression running on a smart-phone, 数据来源于ATIS相机拍摄的手势。原始数据的原始下载地址参见 https://www.neuromorphic-vision.com/public/downloads/navgesture/

关于转换成帧数据的细节,参见 integrate_events_to_frames()

static get_wh()[源代码]
static read_bin(file_name: str)[源代码]
参数

file_name – NavGesture原始bin格式数据的文件名

返回

一个字典,键是{‘t’, ‘x’, ‘y’, ‘p’},值是np数组

原始的NavGesture提供的是bin格式数据,不能直接读取。本函数提供了一个读取的接口。 原始数据以二进制存储:

Events are encoded in binary format on 64 bits (8 bytes): 32 bits for timestamp 9 bits for x address 8 bits for y address 2 bits for polarity 13 bits padding

static get_label(file_name)[源代码]
static get_events_item(file_name)[源代码]
static get_frames_item(file_name)[源代码]
static download_and_extract(download_root: str, extract_root: str)[源代码]
static create_frames_dataset(events_data_dir, frames_data_dir, frames_num=10, split_by='time', normalization=None)[源代码]
class spikingjelly.datasets.SPEECHCOMMANDS(label_dict: Dict, root: str, transform: Optional[Callable] = None, url: Optional[str] = 'speech_commands_v0.02', split: Optional[str] = 'train', folder_in_archive: Optional[str] = 'SpeechCommands', download: Optional[bool] = False)[源代码]

基类:torch.utils.data.dataset.Dataset

参数
  • label_dict (Dict) – 标签与类别的对应字典

  • root (str) – 数据集的根目录

  • transform (Callable, optional) – A function/transform that takes in a raw audio

  • url (str, optional) – 数据集版本,默认为v0.02

  • split (str, optional) – 数据集划分,可以是 "train", "test", "val",默认为 "train"

  • folder_in_archive (str, optional) – 解压后的目录名称,默认为 "SpeechCommands"

  • download (bool, optional) – 是否下载数据,默认为False

SpeechCommands语音数据集,出自 Speech Commands: A Dataset for Limited-Vocabulary Speech Recognition,根据给出的测试集与验证集列表进行了划分,包含v0.01与v0.02两个版本。

数据集包含三大类单词的音频:

  1. 指令单词,共10个,”Yes”, “No”, “Up”, “Down”, “Left”, “Right”, “On”, “Off”, “Stop”, “Go”. 对于v0.02,还额外增加了5个:”Forward”, “Backward”, “Follow”, “Learn”, “Visual”.

  2. 0~9的数字,共10个:”One”, “Two”, “Three”, “Four”, “Five”, “Six”, “Seven”, “Eight”, “Nine”.

  3. 非关键词,可以视为干扰词,共10个:”Bed”, “Bird”, “Cat”, “Dog”, “Happy”, “House”, “Marvin”, “Sheila”, “Tree”, “Wow”.

v0.01版本包含共计30类,64,727个音频片段,v0.02版本包含共计35类,105,829个音频片段。更详细的介绍参见前述论文,以及数据集的README。

代码实现基于torchaudio并扩充了功能,同时也参考了 原论文的实现