闵可夫斯基引擎Minkowski Engine

Minkowski引擎是一个用于稀疏张量的自动微分库。它支持所有标准神经网络层,例如对稀疏张量的卷积,池化,解池和广播操作。有关更多信息,请访问文档页面

pip install git+https://github.com/NVIDIA/MinkowskiEngine.git

稀疏张量网络:空间稀疏张量的神经网络

压缩神经网络以加快推理速度并最小化内存占用已被广泛研究。用于模型压缩的流行技术之一是修剪卷积网络中的权重,也被称为稀疏卷积网络。用于模型压缩的这种参数空间稀疏性压缩在密集张量上运行的网络,并且这些网络的所有中间激活也是密集张量。

但是,在这项工作中,专注于稀疏的数据,尤其是空间稀疏的高维输入。还可以将这些数据表示为稀疏张量,并且这些稀疏张量在3D感知,配准和统计数据等高维问题中很常见。将专门用于这些输入的神经网络定义为稀疏张量网络,这些稀疏张量网络处理并生成稀疏张量作为输出。为了构建稀疏张量网络,建立了所有标准的神经网络层,例如MLP,非线性,卷积,规范化,池化操作,就像在密集张量上定义,并在Minkowski引擎中实现的方法一样。

在下面的稀疏张量卷积上可视化了一个稀疏张量网络操作。稀疏张量上的卷积层与密集张量上的卷积层相似。但是,在稀疏张量上,在一些指定点上计算卷积输出,这些点可以在广义卷积中进行控制。

特征

  • 无限的高维稀疏张量支持
  • 所有标准神经网络层(卷积,池化,广播等)
  • 动态计算图
  • 自定义内核形状
  • 多GPU训练
  • 多线程内核映射
  • 多线程编译
  • 高度优化的GPU内核

Requirements

  • Ubuntu >= 14.04
  • 11.1 > CUDA >= 10.1.243
  • pytorch >= 1.5
  • python >= 3.6
  • GCC >= 7

Pip

MinkowskiEngine是通过PyPI MinkowskiEngine分发的,可以使用简单安装pip。按照说明安装pytorch 。接下来,安装openblas

sudo apt install libopenblas-dev
pip install torch
pip install -U MinkowskiEngine --install-option="--blas=openblas" -v
 
# For pip installation from the latest source
# pip install -U git+https://github.com/NVIDIA/MinkowskiEngine

If you want to specify arguments for the setup script, please refer to the following command.

# Uncomment some options if things don't work
pip install -U git+https://github.com/NVIDIA/MinkowskiEngine \
#                           \ # uncomment the following line if you want to force cuda installation
#                           --install-option="--force_cuda" \
#                           \ # uncomment the following line if you want to force no cuda installation. force_cuda supercedes cpu_only
#                           --install-option="--cpu_only" \
#                           \ # uncomment the following line when torch fails to find cuda_home.
#                           --install-option="--cuda_home=/usr/local/cuda" \
#                           \ # uncomment the following line to override to openblas, atlas, mkl, blas
#                           --install-option="--blas=openblas" \

快速启动

要使用Minkowski引擎,首先需要导入引擎。然后,将需要定义网络。如果没有量化数据,则需要将(空间)数据体素化或量化为稀疏张量。幸运的是,Minkowski引擎提供了量化功能(MinkowskiEngine.utils.sparse_quantize)。

Anaconda

We recommend python>=3.6 for installation. First, follow the anaconda documentation to install anaconda on your computer.

sudo apt install libopenblas-dev
conda create -n py3-mink python=3.8
conda activate py3-mink
conda install numpy mkl-include pytorch cudatoolkit=11.0 -c pytorch
pip install -U git+https://github.com/NVIDIA/MinkowskiEngine

System Python

Like the anaconda installation, make sure that you install pytorch with the same CUDA version that nvcc uses.

# install system requirements
sudo apt install python3-dev libopenblas-dev
 
# Skip if you already have pip installed on your python3
curl https://bootstrap.pypa.io/get-pip.py | python3
 
# Get pip and install python requirements
python3 -m pip install torch numpy
 
git clone https://github.com/NVIDIA/MinkowskiEngine.git
 
cd MinkowskiEngine
 
python setup.py install
# To specify blas, CUDA_HOME and force CUDA installation, use the following command
# python setup.py install --blas=openblas --cuda_home=/usr/local/cuda --force_cuda

Creating a Network

import torch.nn as nn
import MinkowskiEngine as ME
 
class ExampleNetwork(ME.MinkowskiNetwork):
 
    def __init__(self, in_feat, out_feat, D):
        super(ExampleNetwork, self).__init__(D)
        self.conv1 = nn.Sequential(
            ME.MinkowskiConvolution(
                in_channels=in_feat,
                out_channels=64,
                kernel_size=3,
                stride=2,
                dilation=1,
                has_bias=False,
                dimension=D),
            ME.MinkowskiBatchNorm(64),
            ME.MinkowskiReLU())
        self.conv2 = nn.Sequential(
            ME.MinkowskiConvolution(
                in_channels=64,
                out_channels=128,
                kernel_size=3,
                stride=2,
                dimension=D),
            ME.MinkowskiBatchNorm(128),
            ME.MinkowskiReLU())
        self.pooling = ME.MinkowskiGlobalPooling()
        self.linear = ME.MinkowskiLinear(128, out_feat)
 
    def forward(self, x):
        out = self.conv1(x)
        out = self.conv2(out)
        out = self.pooling(out)
        return self.linear(out)

Forward and backward using the custom network

    # loss and network
    criterion = nn.CrossEntropyLoss()
    net = ExampleNetwork(in_feat=3, out_feat=5, D=2)
    print(net)
 
    # a data loader must return a tuple of coords, features, and labels.
    coords, feat, label = data_loader()
    input = ME.SparseTensor(feat, coords=coords)
    # Forward
    output = net(input)
 
    # Loss
    loss = criterion(output.F, label)

 

闵可夫斯基引擎Minkowski Engine的更多相关文章

  1. 推荐一款基于XNA的开源游戏引擎《Engine Nine》

    一.前沿导读 XNA是微软基于.Net部署的下一代3D/2D游戏开发框架,其实XNA严格来说类似下一代的DirectX,当然不是说XNA会取代DirectX,但是基于XNA我们对于面向XBOX360, ...

  2. [2018-08-25]模板引擎Razor Engine 用法示例

    好久没写博客了,回宁波后最近几个月一直忙些线下的事情. 敲代码方面脱产有阵子了,生疏了,回头一看,这行业果然更新飞快. 最近线下的事情基本忙完,准备开始干回老本行,最重要的一件事就是升级abplus库 ...

  3. 存储引擎:engine

    1.表类型: 默认的服务器表类型,通过my.ini文件可以手动修改配置:default-storage- engine=INNODB 在创建表,或者编辑表时,可以指定表的存储引擎: 语法:engine ...

  4. 开源免费的HTML5游戏引擎——青瓷引擎(QICI Engine) 1.0正式版发布了!

    青瓷引擎的成长 青瓷引擎自2015年4月项目启动开始,7月首次亮相2015年ChinaJoy,便得到业界的极大关注,随后开启限量测试,收到数百个开发者团队的试用申请及反馈,期间经历了18个内测版本,完 ...

  5. 分形之闵可夫斯基(Minkowski)

    与上一篇文章分形之正方形折线相似,闵可夫斯基分形也是分形出正方体,不同之处是它分出了两个正方体. 核心代码: static void FractalMinkowski(const Vector3&am ...

  6. MySQL的两种存储引擎storage engine特点和对比

    MyISAM 优点:快速读取数据, 占用空间小 缺点:不支持事务,外键 (表级别锁) InnoDB 优点:支持事务,外键; 高性能(CPU效率高) 缺点: 慢,占空间 (行级别锁)

  7. 浏览器渲染引擎,提高css渲染速度。

    一.渲染引擎渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上.默认情况下渲染引擎可以显示HTML,XML文档以及图片. 通过插件(浏览器扩展)它可以显示其它类型文档. 二.各种渲染引擎我 ...

  8. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

  9. 青瓷引擎使用心得——修改引擎的loading界面

    一. 修改引擎的Loading界面之使用进度条显示1. 双击打开引擎包中的lib/qc-loading-debug.js,如下图所示: 2. 只需要修改qici.init函数即可改变loading界面 ...

随机推荐

  1. IDA动态调试Android的DEX文件

    Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...

  2. CVE-2012-0774:Adobe Reader TrueType 字体整数溢出漏洞调试分析

    0x01 TrueType 字体 TTF 字体是 Apple 和 Microsoft 两家公司共同推出的字体格式,现在已经广泛的运用于 Windows 操作系统,其中 PDF 文档也可以嵌入 TTF ...

  3. Github搜索语法

    目录 使用 Github 进行邮件配置信息收集 使用Github进行数据库信息收集

  4. Photoshop 第二课 工具-钢笔的使用

    钢笔的使用 钢笔→ 是一个非常实用(主要用于)但是非常难操作(会者不难哦~)的工具. 钢笔属性中有三种状态:1.路径:2.形状:3.像素.其中路径和形状是我们最常用的状态.路径是一条用来圈定需要操作的 ...

  5. Object划分

    Object划分 1.PO(persistantobject)持久对象 PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包 含任何对数据库的操作. 2.DO(Domain ...

  6. python-内置函数-compile,eval,exec

    #将字符串,编译成python代码 compile()#执行,有返回值,执行表达式并获取结果 eval()#执行python代码,无返回值,接收:代码或者字符串 exec() s = "pr ...

  7. Jenkins 基础篇 - 安装部署

    Jenkins 安装 Jenkins 支持主流的 Linux 发行版系统,同时还支持 macOS.Windows.和 Docker 运行. 具体系统的 Jenkins 安装包可以去官网下载 https ...

  8. Java中浮点数的坑

    基本数据类型 浮点数存在误差 浮点数有一个需要特别注意的点就是浮点数是有误差的,比如以下这段代码你觉得输出的什么结果: public class Demo { public static void m ...

  9. (转)netcore原生websocket客户端写法(ClientWebSocket)

    代码: using System; using System.Net.WebSockets; using System.Text; using System.Threading; using Syst ...

  10. C++ primer plus读书笔记——第6章 分支语句和逻辑运算符

    第6章 分支语句和逻辑运算符 1. 逻辑运算符的优先级比关系运算符的优先级低. 2. &&的优先级高于||. 3. cctype中的函数P179. 4. switch(integer- ...