# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu). # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # Please cite "4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural # Networks", CVPR'19 (https://arxiv.org/abs/1904.08755) if you use any part # of the code. import os import numpy as np import torch import MinkowskiEngine as ME from urllib.request import urlretrieve if not os.path.isfile("1.ply"): urlretrieve("http://cvgl.stanford.edu/data2/minkowskiengine/1.ply", "1.ply") def load_file(file_name): try: import open3d as o3d except ImportError: raise ImportError("Please install open3d with `pip install open3d`.") pcd = o3d.io.read_point_cloud(file_name) coords = np.array(pcd.points) colors = np.array(pcd.colors) return coords, colors, pcd def get_coords(data): coords = [] for i, row in enumerate(data): for j, col in enumerate(row): if col != " ": coords.append([i, j]) return np.array(coords) def data_loader( nchannel=3, max_label=5, is_classification=True, seed=-1, batch_size=2, dtype=torch.float32, ): if seed >= 0: torch.manual_seed(seed) data = [" X ", " X X ", " XXXXX "] # Generate coordinates coords = [get_coords(data) for i in range(batch_size)] coords = ME.utils.batched_coordinates(coords) # features and labels N = len(coords) feats = torch.arange(N * nchannel).view(N, nchannel).to(dtype) label = (torch.rand(batch_size if is_classification else N) * max_label).long() return coords, feats, label