محرك Minkowski هو مكتبة الاختلاط التلقائي لتوترات متناثرة. وهو يدعم جميع طبقات الشبكات العصبية القياسية مثل الالتفاف وتجميع ودون تبريد وعمليات البث للموترات المتفرقة. لمزيد من المعلومات ، يرجى زيارة صفحة الوثائق.
يدعم محرك Minkowski مختلف الوظائف التي يمكن بناؤها على موتر متناثر. ندرج بعض بنيات الشبكة الشائعة والتطبيقات هنا. لتشغيل الأمثلة ، يرجى تثبيت الحزمة وتشغيل الأمر في دليل جذر الحزمة.
| أمثلة | الشبكات والأوامر |
|---|---|
| تجزئة الدلالية | python -m examples.indoor |
| تصنيف | python -m examples.classification_modelnet40 |
| إعادة الإعمار | python -m examples.reconstruction |
| انتهاء | python -m examples.completion |
| كشف |
تمت دراسة ضغط الشبكة العصبية لتسريع الاستدلال وتقليل بصمة الذاكرة على نطاق واسع. واحدة من التقنيات الشائعة لضغط النماذج هي تقليم الأوزان في Convnets ، والمعروفة أيضًا باسم الشبكات التلافيفية المتفرقة . مثل هذه التباين في مساحة المعلمة المستخدمة في ضغط النموذج تضغط شبكات تعمل على موتر كثيف وجميع التنشيطات الوسيطة لهذه الشبكات هي أيضًا موترات كثيفة.
ومع ذلك ، في هذا العمل ، نركز على البيانات المتفرقة المكانية ، على وجه الخصوص ، مدخلات عالية الأبعاد متناثرة مكانيًا والبيانات ثلاثية الأبعاد والالتواء على سطح الكائنات ثلاثية الأبعاد ، المقترحة لأول مرة في Siggraph'17. يمكننا أيضًا تمثيل هذه البيانات كموتور متناثرة ، وهذه الموترات المتفرقة شائعة في المشكلات ذات الأبعاد عالية مثل الإدراك ثلاثي الأبعاد والتسجيل والبيانات الإحصائية. نحن نحدد الشبكات العصبية المتخصصة لهذه المدخلات كشبكات التوتر المتفرقة وعملية شبكات التوتر المتفرقة هذه وتوليد موترات متفرقة كمخرجات. لبناء شبكة موتر متناثرة ، نقوم ببناء جميع طبقات الشبكات العصبية القياسية مثل MLPs ، غير الخطية ، الالتفاف ، عمليات التطبيع ، عمليات التجميع بنفس الطريقة التي نحددها بها على موتر كثيف وتنفيذها في محرك Minkowski.
لقد تصورنا عملية شبكة موتر متناثرة على موتر متناثر ، الالتفاف أدناه. تعمل طبقة الالتواء على موتر متناثر بشكل مشابه لتلك الموجودة على موتر كثيف. ومع ذلك ، على موتر متناثر ، نقوم بحساب مخرجات الالتواء على عدد قليل من النقاط المحددة التي يمكننا التحكم فيها في الالتواء المعمم. لمزيد من المعلومات ، يرجى زيارة صفحة الوثائق على شبكات الموتر المتناثرة وصفحة المصطلحات.
| توتر كثيف | موتر متناثر |
|---|---|
conda install -y -c nvidia -c pytorch pytorch=1.8.1 cudatoolkit=10.2 ) يمكنك تثبيت محرك Minkowski مع pip ، مع Anaconda ، أو على النظام مباشرة. إذا واجهت مشكلات في تثبيت الحزمة ، يرجى الخروج من صفحة التثبيت ويكي. إذا لم تتمكن من العثور على مشكلة ذات صلة ، فيرجى الإبلاغ عن المشكلة في صفحة إصدار 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
إذا كنت ترغب في تحديد وسيطات برنامج SETUP ، فيرجى الرجوع إلى الأمر التالي.
# 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 CPU فقط على منصات أخرى لا تحتوي على وحدات معالجة الرسومات NVIDIA. يرجى الرجوع إلى البداية السريعة لمزيد من التفاصيل.
لاستخدام محرك Minkowski ، ستحتاج أولاً إلى استيراد المحرك. بعد ذلك ، ستحتاج إلى تحديد الشبكة. إذا لم تكن البيانات التي لديك كمياً ، فستحتاج إلى voxelize أو تحديد البيانات (المكانية) في موتر متناثر. لحسن الحظ ، يوفر محرك 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.
في بعض الحالات ، تحتاج إلى تحديد إمكانية حساب GPU بشكل صريح. قد لا تحتوي القائمة الافتراضية على بنيةك.
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 من مساحات الذاكرة لتسريع التخصيص المستخدم في كل إنشاء موتر. إذا فشلت في العثور على مساحة الذاكرة ، فإنها تقسم ذاكرة محددة مؤقتًا أو تخصيص مساحة جديدة إذا لم تكن هناك ذاكرة مخزنة مؤقتًا بدرجة كافية للحجم المطلوب. وبالتالي ، في كل مرة نستخدم فيها عددًا مختلفًا من النقاط (عدد العناصر غير الصفر) مع Pytorch ، فإنه إما تقسيم ذاكرة التخزين المؤقت الحالية أو حجز ذاكرة جديدة. إذا كانت ذاكرة التخزين المؤقت مجزأة للغاية وتخصيص جميع مساحة GPU ، فسوف تثير خطأ في الذاكرة.
لمنع ذلك ، يجب مسح ذاكرة التخزين المؤقت في الفاصل الزمني المعتاد باستخدام 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 لموازنة توليد خريطة kernel. ومع ذلك ، عندما يكون عدد مؤشرات الترابط المستخدمة للتوازي كبيرًا جدًا (على سبيل المثال OMP_NUM_THREADS = 80) ، فإن الكفاءة تنخفض بسرعة حيث تنتظر جميع الخيوط ببساطة أن يتم إطلاق أقفال Multithread. في مثل هذه الحالات ، قم بتعيين عدد المواضيع المستخدمة لـ 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}
}
ل unittests و gradcheck ، استخدم Torch> = 1.7
لا تتردد في تحديث صفحة الويكي لإضافة مشاريعك!
مشاريع باستخدام MinkowskiEngine
التجزئة: تجزئة الدلالات الزمانية 3D و 4D ، CVPR'19
التعلم التمثيل: ميزات هندسية تلافيفية بالكامل ، ICCV'19
التسجيل ثلاثي الأبعاد: التعلم Multiview 3D Point Cloud التسجيل ، CVPR'20
التسجيل ثلاثي الأبعاد: التسجيل العالمي العميق ، CVPR'20
التعرف على الأنماط: شبكات تلافيفية عالية الأبعاد للتعرف على الأنماط الهندسية ، CVPR'20
الكشف: شبكات الكشف المتفرقة التوليدية للكشف عن كائنات ثلاثية الأبعاد ، ECCV'20
مطابقة الصور: شبكات إجماع الحي المتفرقة ، ECCV'20