MinkowskiEngine 0.5 : 概要 (README)

MinkowskiEngine 0.5 : 概要 (README) (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/20/2021 (0.5.2)

* 本ページは、MinkowskiEngine 0.5 の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料セミナー実施中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマにウェビナー (WEB セミナー) を定期的に開催しています。スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

MinkowskiEngine 0.5 : 概要 (README)

Minkowski エンジンはスパース tensor のための自動微分ライブラリです。それはスパース tensor のための畳込み、プーリング、unpooling とブロードキャスティング演算のような総ての標準的なニューラルネットワーク層をサポートします。より多くの情報については、ドキュメント・ページ を訪ねてください。

 

News

  • 2020-12-24 v0.5 is now available! The new version provides CUDA accelerations for all coordinate management functions.

 

サンプル・ネットワーク

Minkowski エンジンはスパース tensor 上で構築できる様々な関数をサポートします。ここで幾つかのポピュラーなネットワーク・アーキテクチャとアプリケーションをリストします。サンプルを実行するには、パッケージをインストールしてパッケージ・ルートディレクトリのコマンドを実行してください。

サンプル ネットワークとコマンド
セマンティック
セグメンテーション


python -m examples.indoor
分類
python -m examples.classification_modelnet40
再構築

python -m examples.reconstruction
Completion (完成)
python -m examples.completion
検出

 

スパース Tensor ネットワーク: 空間的にスパースな Tensor のためのニューラルネットワーク

推論をスピードアップしてメモリ使用量を最小化するためにニューラルネットワークを圧縮することは広く研究されてきました。モデル圧縮のためのポピュラーなテクニックの一つは convnet の重みを刈り取る (= prune) ことで、スパース畳込みネットワーク としても知られています。モデル圧縮のために使用されるそのようなパラメータ空間スパース性 (= sparsity) はデンス tensor 上で動作するネットワークを圧縮します、これらのネットワークの総ての中間的な活性はまたデンス tensor です。

けれども、このワークでは、空間的にスパースなデータ にフォーカスします、特に、空間的にスパースな高次元入力です。これらのデータをスパース tensor として表すこともできて、そしてこれらのスパース tensor は 3D 知覚、レジストレーションと統計データのような高次元問題では普通のことです。これらの入力のために特化されたニューラルネットワークを スパース tensor ネットワーク として定義してそしてこれらの スパース tensor ネットワークはスパース tensor を処理して出力として生成します。スパース tensor ネットワークを構築するために、MLP、非-線形性、畳込み、正規化、プーリング演算のような総ての標準的なニューラルネットワーク層をそれらをデンス tensor 上で定義するのと同じ方法で構築して Minkowski エンジンの中で実装しました。

スパース tensor 上のスパース tensor ネットワーク演算、畳込みを下で可視化しました。スパース tensor 上の畳込み層はデンス tensor 上のそれと同様に動作します。けれども、スパース tensor 上では、畳込み出力を (一般化された畳込み で制御できる) 幾つかの指定されたポイント上で計算します。より多くの情報については、スパース tensor ネットワーク上のドキュメントページ用語ページ を訪ねてください。

デンス Tensor スパース Tensor

 

特徴

  • 無制限高次元スパース tensor サポート
  • 総ての標準的なニューラルネットワーク層 (畳込み、プーリング、ブロードキャスト等)
  • 動的計算グラフ
  • カスタム・カーネル shape
  • マルチ GPU 訓練
  • マルチスレッド・カーネルマップ
  • マルチスレッド・コンパイル
  • 高度に最適化された GPU カーネル

 

要件

 

インストール

Minkowski エンジンは pip で、anacoda で、あるいはシステム上で直接的にインストールできます。パッケージをインストールする問題を経験する場合、インストール wiki ページ を確認してください。If you cannot find a relevant problem, please report the issue on the github issue page.

  • PIP インストール
  • Conda インストール
  • Python インストール

 

Pip

MinkowskiEngine は PyPI MinkowskiEngine を通して配布されています、これは単純に pip でインストールできます。最初に、手順 に従って pytorch をインストールしてください。次に、openblas をインストールします。

sudo apt install build-essential python3-dev libopenblas-dev
pip install torch
pip install -U MinkowskiEngine --install-option="--blas=openblas" -v --no-deps

# For pip installation from the latest source
# pip install -U git+https://github.com/NVIDIA/MinkowskiEngine --no-deps

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

# Uncomment some options if things don't work
# export CXX=c++; # set this if you want to use a different C++ compiler
# export CUDA_HOME=/usr/local/cuda-11.1; # or select the correct cuda version on your system.
pip install -U git+https://github.com/NVIDIA/MinkowskiEngine -v --no-deps \
#                           \ # 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 to override to openblas, atlas, mkl, blas
#                           --install-option="--blas=openblas" \

 

クイックスタート

Minkowski エンジンを使用するには、最初にエンジンをインポートする必要があります。それから、ネットワークを定義する必要があるでしょう。貴方が持つデータが量子化されていない場合、(空間) データをスパース tensor にボクセル化 or 量子化する必要があるでしょう。幸い、Minkowski エンジンは量子化関数 (MinkowskiEngine.utils.sparse_quantize) を提供します。

 

ネットワークを作成する

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 と backward

    # 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)
 

以上