เครื่องยนต์ Minkowski เป็นห้องสมุดความแตกต่างอัตโนมัติสำหรับเทนเซอร์เบาบาง รองรับเลเยอร์เครือข่ายประสาทมาตรฐานทั้งหมดเช่น convolution, pooling, unpooling และการดำเนินการออกอากาศสำหรับเทนเซอร์กระจัดกระจาย สำหรับข้อมูลเพิ่มเติมกรุณาเยี่ยมชมหน้าเอกสาร
เครื่องยนต์ Minkowski รองรับฟังก์ชั่นต่าง ๆ ที่สามารถสร้างขึ้นบนเทนเซอร์เบาบาง เราแสดงรายการสถาปัตยกรรมเครือข่ายยอดนิยมและแอปพลิเคชันที่นี่ ในการเรียกใช้ตัวอย่างโปรดติดตั้งแพ็คเกจและเรียกใช้คำสั่งในไดเรกทอรีรูทแพ็คเกจ
| ตัวอย่าง | เครือข่ายและคำสั่ง |
|---|---|
| การแบ่งส่วนความหมาย | python -m examples.indoor |
| การจำแนกประเภท | python -m examples.classification_modelnet40 |
| การสร้างใหม่ | python -m examples.reconstruction |
| ความสำเร็จ | python -m examples.completion |
| การตรวจจับ |
การบีบอัดเครือข่ายประสาทเพื่อเพิ่มความเร็วและลดรอยเท้าหน่วยความจำได้รับการศึกษาอย่างกว้างขวาง หนึ่งในเทคนิคยอดนิยมสำหรับการบีบอัดแบบจำลองคือการตัดแต่งน้ำหนักใน Convnets เป็นที่รู้จักกันในชื่อ เครือข่าย sinvolutional ที่กระจัดกระจาย พารามิเตอร์ sparsity sparsity ที่ใช้สำหรับการบีบอัดแบบจำลองการบีบอัดเครือข่ายที่ทำงานบนเทนเซอร์ที่หนาแน่นและการเปิดใช้งานระดับกลางทั้งหมดของเครือข่ายเหล่านี้ก็เป็นเทนเซอร์ที่หนาแน่นเช่นกัน
อย่างไรก็ตามในงานนี้เรามุ่งเน้นไปที่ข้อมูลที่กระจัดกระจาย เชิงพื้นที่ โดยเฉพาะอย่างยิ่งอินพุตมิติที่มีมิติสูงกระจัดกระจายเชิงพื้นที่และข้อมูล 3D และการโน้มน้าวใจบนพื้นผิวของวัตถุ 3 มิติที่เสนอเป็นครั้งแรกใน Siggraph'17 นอกจากนี้เรายังสามารถแสดงข้อมูลเหล่านี้เป็นเทนเซอร์ที่กระจัดกระจายและเทนเซอร์ที่กระจัดกระจายเหล่านี้เป็นเรื่องธรรมดาในปัญหามิติสูงเช่นการรับรู้ 3 มิติการลงทะเบียนและข้อมูลทางสถิติ เรากำหนดเครือข่ายประสาทที่เชี่ยวชาญสำหรับอินพุตเหล่านี้เป็น เครือข่ายเทนเซอร์ที่กระจัดกระจาย และกระบวนการเครือข่ายเทนเซอร์ที่กระจัดกระจายเหล่านี้และสร้างเทนเซอร์เบาบางเป็นเอาต์พุต ในการสร้างเครือข่ายเทนเซอร์ที่กระจัดกระจายเราจะสร้างเลเยอร์เครือข่ายประสาทมาตรฐานทั้งหมดเช่น MLPs, ไม่ใช่เชิงเส้น, convolution, normalizations, การรวมการดำเนินงานเช่นเดียวกับที่เรากำหนดพวกเขาในเทนเซอร์ที่หนาแน่นและนำไปใช้ในเครื่องยนต์ Minkowski
เราเห็นภาพการทำงานของเครือข่ายเทนเซอร์ที่กระจัดกระจายบนเทนเซอร์เบาบาง, Convolution ด้านล่าง เลเยอร์ convolution บนเทนเซอร์เบาบางนั้นทำงานได้คล้ายกับที่เทนเซอร์หนาแน่น อย่างไรก็ตามในเทนเซอร์ที่กระจัดกระจายเราคำนวณเอาต์พุต convolution ในจุดที่ระบุไม่กี่จุดซึ่งเราสามารถควบคุมในการประชุมทั่วไป สำหรับข้อมูลเพิ่มเติมกรุณาเยี่ยมชมหน้าเอกสารบนเครือข่ายเทนเซอร์แบบกระจัดกระจายและหน้าคำศัพท์
| เทนเซอร์หนาแน่น | เทนเซอร์เบาบาง |
|---|---|
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
เมื่อสร้างท่าเทียบเรือให้ตรวจสอบว่าโหลด minkowskiEngine อย่างถูกต้อง
docker run MinkowskiEngine python3 -c "import MinkowskiEngine; print(MinkowskiEngine.__version__)"
เครื่องยนต์ Minkowski รองรับ CPU สร้างขึ้นบนแพลตฟอร์มอื่น ๆ ที่ไม่มี Nvidia GPU เท่านั้น โปรดดูรายละเอียดเพิ่มเติมอย่างรวดเร็ว
ในการใช้เครื่องยนต์ 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 Caches ชิ้นส่วนหน่วยความจำเพื่อเพิ่มความเร็วในการจัดสรรที่ใช้ในการสร้างเทนเซอร์ทุกครั้ง หากไม่สามารถค้นหาพื้นที่หน่วยความจำได้มันจะแยกหน่วยความจำแคชที่มีอยู่หรือจัดสรรพื้นที่ใหม่หากไม่มีหน่วยความจำแคชขนาดใหญ่พอสำหรับขนาดที่ร้องขอ ดังนั้นทุกครั้งที่เราใช้จำนวนจุดที่แตกต่างกัน (จำนวนองค์ประกอบที่ไม่ใช่ศูนย์) กับ 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 เพื่อขนานกับการสร้างแผนที่เคอร์เนล อย่างไรก็ตามเมื่อจำนวนเธรดที่ใช้สำหรับการขนานนั้นมีขนาดใหญ่เกินไป (เช่น 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}
}
สำหรับ unittests และ gradcheck ใช้ Torch> = 1.7
โปรดอย่าลังเลที่จะอัปเดตหน้า Wiki เพื่อเพิ่มโครงการของคุณ!
โครงการที่ใช้ minkowskiEngine
การแบ่งส่วน: 3D และ 4D spatio-temporal semantic semantic, cvpr'19
การเรียนรู้การเป็นตัวแทน: คุณสมบัติทางเรขาคณิตแบบ convolutional อย่างเต็มที่, ICCV'19
การลงทะเบียน 3D: การเรียนรู้การลงทะเบียนคลาวด์ 3D จุด 3D, CVPR'20
การลงทะเบียน 3D: การลงทะเบียนระดับโลกที่ลึก cvpr'20
การจดจำรูปแบบ: เครือข่าย convolutional มิติสูงสำหรับการจดจำรูปแบบทางเรขาคณิต, cvpr'20
การตรวจจับ: เครือข่ายการตรวจจับแบบกระจัดกระจายแบบกำเนิดสำหรับการตรวจจับวัตถุแบบ 3 มิติแบบ 3D, ECCV'20
การจับคู่รูปภาพ: เครือข่ายฉันทามติพื้นที่ใกล้เคียงที่กระจัดกระจาย ECCV'20