Source code for tonic.datasets.ncaltech101

import os
from typing import Callable, Optional

import numpy as np

from tonic.dataset import Dataset
from tonic.io import read_mnist_file


[docs]class NCALTECH101(Dataset): """`N-CALTECH101 <https://www.garrickorchard.com/datasets/n-caltech101>`_ Events have (xytp) ordering. :: @article{orchard2015converting, title={Converting static image datasets to spiking neuromorphic datasets using saccades}, author={Orchard, Garrick and Jayawant, Ajinkya and Cohen, Gregory K and Thakor, Nitish}, journal={Frontiers in neuroscience}, volume={9}, pages={437}, year={2015}, publisher={Frontiers} } Parameters: save_to (string): Location to save files to on disk. transform (callable, optional): A callable of transforms to apply to the data. target_transform (callable, optional): A callable of transforms to apply to the targets/labels. transforms (callable, optional): A callable of transforms that is applied to both data and labels at the same time. """ url = "https://data.mendeley.com/public-files/datasets/cy6cvx3ryv/files/36b5c52a-b49d-4853-addb-a836a8883e49/file_downloaded" filename = "N-Caltech101-archive.zip" file_md5 = "66201824eabb0239c7ab992480b50ba3" data_filename = "Caltech101.zip" folder_name = "Caltech101" sensor_size = None # all recordings are of different size dtype = np.dtype([("x", int), ("y", int), ("t", int), ("p", int)]) ordering = dtype.names def __init__( self, save_to: str, transform: Optional[Callable] = None, target_transform: Optional[Callable] = None, transforms: Optional[Callable] = None, ): super().__init__( save_to, transform=transform, target_transform=target_transform, transforms=transforms, ) if not self._check_exists(): self.download() file_path = os.path.join(self.location_on_system, self.folder_name) for path, dirs, files in os.walk(file_path): dirs.sort() for file in files: if file.endswith("bin"): self.data.append(path + "/" + file) label_number = os.path.basename(path) self.targets.append(label_number)
[docs] def __getitem__(self, index): """ Returns: a tuple of (events, target) where target is the index of the target class. """ events = read_mnist_file(self.data[index], dtype=self.dtype) target = self.targets[index] events["x"] -= events["x"].min() events["y"] -= events["y"].min() if self.transform is not None: events = self.transform(events) if self.target_transform is not None: target = self.target_transform(target) if self.transforms is not None: events, target = self.transforms(events, target) return events, target
[docs] def __len__(self): return len(self.data)
def _check_exists(self): return ( self._is_file_present() and self._folder_contains_at_least_n_files_of_type(8709, ".bin") )