CARVIEW |
Select Language
HTTP/2 200
date: Thu, 24 Jul 2025 22:42:52 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"584ddcd1edfa9d89d00043e3423fb677"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=GPPUNWcCaCcdKmBVeL2CNOfhKa5NiW71pOLmYIsOla2qQq8LCjQLbTz5wheby5okVkkhPhSReVnjrPj48Pvfmb61JZ0Hp9dZiIgbEsdHw7E2YnuSn0HBN3V5E%2F%2BzsJjiTv%2FsMp2bdjl%2FJgK2PM%2BMs0pWihU0VlZD0L5mewcy31sOE8H6Bipc%2FPVf%2BZGoagp5AAD5AwJoNOfBdr6lAVBqPzKohcDQJIL7iFNf6%2BglYwUlqOWjCT9Hj0cgdnMBlGXgHS2De43lb9KabBbMa7jk0A%3D%3D--5950M0FwPRHKkvux--Wk102IYom4uSocmmrjJ%2FMQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1387856617.1753396972; Path=/; Domain=github.com; Expires=Fri, 24 Jul 2026 22:42:52 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Fri, 24 Jul 2026 22:42:52 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: C880:AFDAD:2E0D9:46B6B:6882B6EC
compare_torch_mink.py · GitHub
Show Gist options
Save chrischoy/d8e971daf8308aa1dcba1524bf1fd91a to your computer and use it in GitHub Desktop.
{{ message }}
Instantly share code, notes, and snippets.
Created
May 6, 2021 20:46
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save chrischoy/d8e971daf8308aa1dcba1524bf1fd91a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import time | |
import argparse | |
import numpy as np | |
from urllib.request import urlretrieve | |
try: | |
import open3d as o3d | |
except ImportError: | |
raise ImportError("Please install open3d with `pip install open3d`.") | |
import torch | |
import MinkowskiEngine as ME | |
import torchsparse.nn as spnn | |
import torchsparse.utils as sputil | |
from torchsparse.sparse_tensor import SparseTensor as TorchSparseTensor | |
parser = argparse.ArgumentParser() | |
parser.add_argument("--batch_size", type=int, default=10) | |
parser.add_argument("--out_channels", type=int, default=16) | |
parser.add_argument("--stride", type=int, default=1) | |
parser.add_argument("--kernel_size", type=int, default=3) | |
parser.add_argument("--mode", type=str, default='mink') | |
def get_conv(inc, outc, kernel_size, stride, mode="mink"): | |
if mode == "mink": | |
return ME.MinkowskiConvolution( | |
inc, outc, kernel_size=kernel_size, stride=stride, dimension=3 | |
) | |
else: | |
return spnn.Conv3d(inc, outc, kernel_size=kernel_size, stride=stride) | |
def get_sparse_tensor(coords, feats, device="cuda", mode="mink", ic=3, oc=16, kernel_size=3): | |
if mode == "mink": | |
return ME.SparseTensor( | |
feats, | |
coords, | |
device=device, | |
minkowski_algorithm=ME.MinkowskiAlgorithm.SPEED_OPTIMIZED, | |
) | |
else: | |
return TorchSparseTensor(feats.to(device), bcoords.to(device), stride=1) | |
# Check if the weights and file exist and download | |
if not os.path.isfile("1.ply"): | |
print("Downloading an example pointcloud...") | |
urlretrieve("https://bit.ly/3c2iLhg", "1.ply") | |
def load_file(file_name): | |
pcd = o3d.io.read_point_cloud(file_name) | |
coords = np.array(pcd.points) | |
colors = np.array(pcd.colors) | |
return coords, colors, pcd | |
if __name__ == "__main__": | |
config = parser.parse_args() | |
coords, colors, pcd = load_file("1.ply") | |
batch_size = config.batch_size | |
device = "cuda:0" | |
mode = config.mode | |
dcoords, dcolors = ME.utils.sparse_quantize(coords, colors, quantization_size=0.02) | |
bcoords = ME.utils.batched_coordinates([dcoords for i in range(batch_size)]).to( | |
device | |
) | |
bcolors = torch.cat( | |
[torch.from_numpy(dcolors).float() for i in range(batch_size)], 0 | |
).to(device) | |
conv = get_conv(3, config.out_channels, kernel_size=config.kernel_size, stride=config.stride, mode=mode).to(device) | |
ts = np.zeros(10) | |
for i in range(10): | |
c = time.time() | |
stensor = get_sparse_tensor(bcoords, bcolors, mode=mode) | |
output = conv(stensor) | |
ts[i] = time.time() - c | |
print(f"Forward Min time for {mode} {conv}: {np.min(ts)} for size {len(bcoords)} sparse tensor") | |
loss = output.F.sum() | |
for i in range(10): | |
c = time.time() | |
loss.backward() | |
ts[i] = time.time() - c | |
print(f"Backward Min time for {mode} {conv}: {np.min(ts)} for size {len(bcoords)} sparse tensor") |
(py3.8-mink-dev) ➜ MinkowskiEngine git:(master) ✗ python compare_torch_sparse.py --mode mink --stride 2
Forward Min time for mink MinkowskiConvolution(in=3, out=16, kernel_size=[3, 3, 3], stride=[2, 2, 2], dilation=[1, 1, 1]): 0.01503896713256836 for size 1618900 sparse tensor
Backward Min time for mink MinkowskiConvolution(in=3, out=16, kernel_size=[3, 3, 3], stride=[2, 2, 2], dilation=[1, 1, 1]): 0.0053861141204833984 for size 1618900 sparse tensor
(py3.8-mink-dev) ➜ MinkowskiEngine git:(master) ✗ python compare_torch_sparse.py --mode sparse --stride 2
Forward Min time for sparse Conv3d(in_channels=3, out_channels=16, kernel_size=3, stride=2, dilation=1): 0.025519609451293945 for size 1618900 sparse tensor
Backward Min time for sparse Conv3d(in_channels=3, out_channels=16, kernel_size=3, stride=2, dilation=1): 0.0011670589447021484 for size 1618900 sparse tensor
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can’t perform that action at this time.
Tested on AMD Ryzen 7 3700 + Titan RTX