Двигатель Minkowski-это библиотека автоматической дифференциации для разреженных тензоров. Он поддерживает все стандартные слои нейронной сети, такие как операции свертки, объединение, неохота и вещание для разреженных тензоров. Для получения дополнительной информации, пожалуйста, посетите страницу документации.
Двигатель Minkowski поддерживает различные функции, которые могут быть построены на разреженном тензоре. Мы перечислим несколько популярных сетевых архитектур и приложений здесь. Чтобы запустить примеры, установите пакет и запустите команду в корневом каталоге пакета.
| Примеры | Сети и команды |
|---|---|
| Семантическая сегментация | python -m examples.indoor |
| Классификация | python -m examples.classification_modelnet40 |
| Реконструкция | python -m examples.reconstruction |
| Завершение | python -m examples.completion |
| Обнаружение |
Сжатие нейронной сети к выводу ускорения и минимизации следа памяти было широко изучено. Одним из популярных методов сжатия модели является обрезка весов в Convnets, также известен как редкие сверточные сети . Такая редкость пространства параметров, используемая для сжателей сжатия модели, которые работают на плотных тензорах, и все промежуточные активации этих сетей также являются плотными тензорами.
Однако в этой работе мы сосредоточены на пространственно разреженных данных, в частности, пространственно разреженных высокоразмерных входах и трехмерных данных и свертке на поверхности трехмерных объектов, впервые предложенных в Siggraph'17. Мы также можем представлять эти данные как разреженные тензоры, и эти редкие тензоры являются обычным явлением в высоких проблемах, таких как 3D-восприятие, регистрация и статистические данные. Мы определяем нейронные сети, специализирующиеся для этих входов, как разреженные тензорные сети , и эти разреженные тензорные сети процесс и генерируем разреженные тензоры в качестве выходов. Чтобы построить разреженную тензорную сеть, мы строим все стандартные слои нейронной сети, такие как MLP, нелинейности, свертка, нормализация, объединение операций, так же как мы определяем их на плотном тензоре и реализованы в двигателе Minkowski.
Мы визуализировали разреженную тензорную сеть на разреженном тензоре, свертке ниже. Слоя свертки на разреженном тензоре работает так же, как и на плотном тензоре. Тем не менее, на разреженном тензоре мы рассчитываем выходы свертки на нескольких указанных точках, которые мы можем контролировать в обобщенной свертке. Для получения дополнительной информации, пожалуйста, посетите страницу документации в Sparse Tensor Networks и странице терминологии.
| Плотный тензор | Редкий тензор |
|---|---|
conda install -y -c nvidia -c pytorch pytorch=1.8.1 cudatoolkit=10.2 ) Вы можете установить двигатель Minkowski с pip , с Anaconda или на системе напрямую. Если вы испытываете проблемы с установкой пакета, проверьте страницу Wiki установки. Если вы не можете найти соответствующую проблему, сообщите о проблеме на странице выпуска GitHub.
Minkowskiengine распределяется через Pypi Minkowskiengine, который можно установить просто с помощью pip . Во -первых, установите Pytorch после инструкции. Затем установите openblas .
sudo apt install build-essential python3-dev libopenblas-dev
pip install torch ninja
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
Если вы хотите указать аргументы для сценария настройки, обратитесь к следующей команде.
# 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"
Minkowskiengine поддерживает как CUDA 10.2, так и CUDA 11.1, которые работают для большинства последних версий Pytorch.
Мы рекомендуем python>=3.6 для установки. Во -первых, следуйте документации Anaconda, чтобы установить Anaconda на вашем компьютере.
sudo apt install g++-7 # For CUDA 10.2, must use GCC < 8
# Make sure `g++-7 --version` is at least 7.4.0
conda create -n py3-mink python=3.8
conda activate py3-mink
conda install openblas-devel -c anaconda
conda install pytorch=1.9.0 torchvision cudatoolkit=10.2 -c pytorch -c nvidia
# Install MinkowskiEngine
export CXX=g++-7
# Uncomment the following line to specify the cuda home. Make sure `$CUDA_HOME/nvcc --version` is 10.2
# export CUDA_HOME=/usr/local/cuda-10.2
pip install -U git+https://github.com/NVIDIA/MinkowskiEngine -v --no-deps --install-option="--blas_include_dirs=${CONDA_PREFIX}/include" --install-option="--blas=openblas"
# Or if you want local MinkowskiEngine
git clone https://github.com/NVIDIA/MinkowskiEngine.git
cd MinkowskiEngine
export CXX=g++-7
python setup.py install --blas_include_dirs=${CONDA_PREFIX}/include --blas=openblas
Мы рекомендуем python>=3.6 для установки. Во -первых, следуйте документации Anaconda, чтобы установить Anaconda на вашем компьютере.
conda create -n py3-mink python=3.8
conda activate py3-mink
conda install openblas-devel -c anaconda
conda install pytorch=1.9.0 torchvision cudatoolkit=11.1 -c pytorch -c nvidia
# Install MinkowskiEngine
# Uncomment the following line to specify the cuda home. Make sure `$CUDA_HOME/nvcc --version` is 11.X
# export CUDA_HOME=/usr/local/cuda-11.1
pip install -U git+https://github.com/NVIDIA/MinkowskiEngine -v --no-deps --install-option="--blas_include_dirs=${CONDA_PREFIX}/include" --install-option="--blas=openblas"
# Or if you want local MinkowskiEngine
git clone https://github.com/NVIDIA/MinkowskiEngine.git
cd MinkowskiEngine
python setup.py install --blas_include_dirs=${CONDA_PREFIX}/include --blas=openblas
Как и установка Anaconda, убедитесь, что вы устанавливаете Pytorch с той же версией CUDA, что и nvcc .
# install system requirements
sudo apt install build-essential 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 ninja
git clone https://github.com/NVIDIA/MinkowskiEngine.git
cd MinkowskiEngine
python setup.py install
# To specify blas, CXX, CUDA_HOME and force CUDA installation, use the following command
# export CXX=c++; export CUDA_HOME=/usr/local/cuda-11.1; python setup.py install --blas=openblas --force_cuda
git clone https://github.com/NVIDIA/MinkowskiEngine
cd MinkowskiEngine
docker build -t minkowski_engine docker
Как только Docker будет построен, проверьте его, правильно загружает Minkowskiengine.
docker run MinkowskiEngine python3 -c "import MinkowskiEngine; print(MinkowskiEngine.__version__)"
Двигатель Minkowski поддерживает процессор, который строит только на других платформах, у которых нет графических процессоров NVIDIA. Пожалуйста, обратитесь к быстрому старту для более подробной информации.
Чтобы использовать двигатель Minkowski, вам сначала необходимо импортировать двигатель. Тогда вам нужно будет определить сеть. Если данные, которые у вас есть, не являются квантовыми, вам нужно будет вокселизировать или квантовать (пространственные) данные в редкий тензор. К счастью, двигатель 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 ,
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 ) # 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 , coordinates = coords )
# Forward
output = net ( input )
# Loss
loss = criterion ( output . F , label ) Для обсуждения и вопросов, пожалуйста, используйте [email protected] . Для использования API и общего использования, пожалуйста, обратитесь к странице документации Minkowskiengine для получения более подробной информации.
Для проблем, не указанных в запросах API и функций, не стесняйтесь отправлять проблему на странице выпуска GitHub.
В некоторых случаях вам необходимо явно указать, какие возможности вычисления, которые использует ваш графический процессор. Список по умолчанию может не содержать вашу архитектуру.
export TORCH_CUDA_ARCH_LIST= " 5.2 6.0 6.1 7.0 7.5 8.0 8.6+PTX " ; python setup.py install --force_cudaСуществует известная проблема в тяге с Cuda 10, которая приводит к непревзойденному исключению тяги. Пожалуйста, обратитесь к вопросу для подробностей.
Есть несколько причин для этой ошибки.
Minkowskiengine-это специализированная библиотека, которая может обрабатывать различное количество точек или различное количество ненулевых элементов на каждой итерации во время обучения, что распространено в облачных данных точек. Тем не менее, Pytorch реализуется, предполагая, что количество точек или размер активаций не изменяется на каждой итерации. Таким образом, кэширование памяти GPU, используемое Pytorch, может привести к излишне большому потреблению памяти.
В частности, пирожные кэшируются куски пространств памяти, чтобы ускорить распределение, используемые при каждом создании тензора. Если он не может найти пространство памяти, оно расщепляет существующую кэшированную память или выделяет новое пространство, если нет кэшированной памяти, достаточно большой для запрошенного размера. Таким образом, каждый раз, когда мы используем различное количество точек (количество ненулевых элементов) с Pytorch, он либо разделил существующий кэш, либо резервирует новую память. Если кэш слишком фрагментирован и выделяет все пространство графических процессоров, он вызовет ошибку памяти.
Чтобы предотвратить это, вы должны очистить кэш с регулярным интервалом с помощью torch.cuda.empty_cache() .
wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
sudo sh cuda_11.1.1_455.32.00_linux.run --toolkit --silent --override
# Install MinkowskiEngine with CUDA 11.1
export CUDA_HOME=/usr/local/cuda-11.1; pip install MinkowskiEngine -v --no-deps
Minkowskiengine использует OpenMP для параллелизации генерации карт ядра. Однако, когда количество потоков, используемых для параллелизации, является слишком большим (например, omp_num_threads = 80), эффективность быстро падает, так как все потоки просто ждут выпуска многопоточных замков. В таких случаях установите количество потоков, используемых для OpenMP. Обычно любое число ниже 24 было бы в порядке, но поиск оптимальной настройки в вашей системе.
export OMP_NUM_THREADS=<number of threads to use>; python <your_program.py>
Если вы используете двигатель Minkowski, пожалуйста, цитируйте:
@inproceedings{choy20194d,
title={4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks},
author={Choy, Christopher and Gwak, JunYoung and Savarese, Silvio},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
pages={3075--3084},
year={2019}
}
Для генерации карт многопоточной карты, пожалуйста, цитируйте:
@inproceedings{choy2019fully,
title={Fully Convolutional Geometric Features},
author={Choy, Christopher and Park, Jaesik and Koltun, Vladlen},
booktitle={Proceedings of the IEEE International Conference on Computer Vision},
pages={8958--8966},
year={2019}
}
Для приспособленных слоев объединения для высокомерных свертков, пожалуйста, цитируйте:
@inproceedings{choy2020high,
title={High-dimensional Convolutional Networks for Geometric Pattern Recognition},
author={Choy, Christopher and Lee, Junha and Ranftl, Rene and Park, Jaesik and Koltun, Vladlen},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2020}
}
Для генеративной транспонированной сверты, пожалуйста, цитируйте:
@inproceedings{gwak2020gsdn,
title={Generative Sparse Detection Networks for 3D Single-shot Object Detection},
author={Gwak, JunYoung and Choy, Christopher B and Savarese, Silvio},
booktitle={European conference on computer vision},
year={2020}
}
Для блоков и град, используйте Torch> = 1,7
Пожалуйста, не стесняйтесь обновить страницу вики, чтобы добавить свои проекты!
Проекты с использованием Minkowskiengine
Сегментация: 3D и 4D Spatio-временная семантическая сегментация, CVPR'19
Обучение представления: полностью сверточные геометрические особенности, ICCV'19
3D Регистрация: Обучение Multiview 3D -точка регистрация облака, CVPR'20
3D Регистрация: глубокая глобальная регистрация, CVPR'20
Распознавание схемы: высокомерные сверточные сети для распознавания геометрических схем, CVPR'20
Обнаружение: Генеративные сети обнаружения разреженных декораций для обнаружения 3D одноразового объекта, ECCV'20
Сопоставление изображений: разреженные консенсусные сети соседства, ECCV'20