ห้องสมุดสำหรับการเพิ่มประสิทธิภาพแบบไม่เชิงเส้นที่แตกต่างกัน
กระดาษ•วิดีโอ• Twitter •หน้าเว็บ•บทช่วยสอน
เธเซอุสเป็นไลบรารีแอปพลิเคชันที่มีประสิทธิภาพสำหรับการสร้างเลเยอร์การเพิ่มประสิทธิภาพแบบไม่เชิงเส้นแบบกำหนดเองใน Pytorch เพื่อสนับสนุนการสร้างปัญหาต่าง ๆ ในหุ่นยนต์และวิสัยทัศน์เป็นสถาปัตยกรรมที่แตกต่างจากต้นจนจบ
การเพิ่มประสิทธิภาพแบบไม่เชิงเส้นที่แตกต่างกันเป็นรูปแบบทั่วไปในการเข้ารหัส priors อุปนัยเนื่องจากฟังก์ชั่นวัตถุประสงค์สามารถกำหนดพารามิเตอร์บางส่วนโดยแบบจำลองระบบประสาทและบางส่วนกับโมเดลที่แตกต่างเฉพาะโดเมนผู้เชี่ยวชาญ ความสามารถในการคำนวณการไล่ระดับสีแบบ end-to-end นั้นถูกเก็บไว้โดยการแยกความแตกต่างผ่านเครื่องมือเพิ่มประสิทธิภาพซึ่งช่วยให้โมเดลระบบประสาทสามารถฝึกอบรมการสูญเสียงานสุดท้ายในขณะที่ยังใช้ประโยชน์จากนักบวชที่จับโดยเครื่องมือเพิ่มประสิทธิภาพ
ดูรายการเอกสารที่เผยแพร่โดยใช้ Thensus สำหรับตัวอย่างในโดเมนแอปพลิเคชันต่างๆ
การใช้งานของเราให้อินเทอร์เฟซที่ใช้งานง่ายเพื่อสร้างเลเยอร์การเพิ่มประสิทธิภาพที่กำหนดเองและเสียบเข้ากับสถาปัตยกรรมระบบประสาทใด ๆ ขณะนี้มีคุณสมบัติที่แตกต่างกันในขณะนี้:
เราสนับสนุนคุณสมบัติหลายอย่างที่ปรับปรุงเวลาในการคำนวณและการใช้หน่วยความจำ:
torch ในการติดตั้งสำหรับการกำหนดค่า CPU/CUDA ของคุณโดยเฉพาะให้ทำตามคำแนะนำในเว็บไซต์ Pytorchnvcc --version หากไม่ได้ติดตั้งและตรวจสอบให้แน่ใจว่าตำแหน่งอยู่ในตัวแปร $PATH ของระบบของคุณsuitesparse ซึ่งคุณสามารถติดตั้งผ่าน:sudo apt-get install libsuitesparse-dev (Ubuntu)conda install -c conda-forge suitesparse (MAC)Pypi
pip install theseus-aiขณะนี้เราจัดหาล้อด้วย CUDA ของเราที่รวบรวมโดยใช้ CUDA 11.6 และ Python 3.10 สำหรับรุ่น CUDA อื่น ๆ ให้พิจารณาการติดตั้งจากแหล่งที่มาหรือใช้สคริปต์บิลด์ของเรา
โปรดทราบว่าการติดตั้ง pypi ไม่รวมถึงการทดลองของเราในห้องปฏิบัติการของเรา สำหรับสิ่งนี้โปรดติดตั้งจากแหล่งที่มา
วิธีที่ง่ายที่สุดในการติดตั้งสิ่งเหล่านี้จากแหล่งที่มาคือการเรียกใช้สิ่งต่อไปนี้ (ดูเพิ่มเติมด้านล่างเพื่อรวม Baspacho)
git clone https://github.com/facebookresearch/theseus.git && cd theseus
pip install -e .หากคุณสนใจที่จะมีส่วนร่วมใน Thenus ให้ติดตั้งแทน
pip install -e " .[dev] "
pre-commit installและทำตามคำแนะนำโดยละเอียดเพิ่มเติมในการบริจาค
การติดตั้งส่วนขยาย Baspacho จากแหล่งที่มา
โดยค่าเริ่มต้นการติดตั้งจากแหล่งที่มาไม่รวมถึงส่วนขยายตัวแก้ปัญหา Baspacho Sparse ของเรา สำหรับสิ่งนี้ให้ทำตามขั้นตอนเหล่านี้:
รวบรวม Baspacho จากแหล่งที่มาตามคำแนะนำที่นี่ เราขอแนะนำให้ใช้แฟล็ก -DBLA_STATIC=ON -DBUILD_SHARED_LIBS=OFF
วิ่ง
git clone https://github.com/facebookresearch/theseus.git && cd theseus
BASPACHO_ROOT_DIR= < path/to/root/baspacho/dir > pip install -e . ในกรณีที่ Baspacho Root Dir ต้องมีไบนารีใน build ไดเรกทอรีย่อย
dev ) python -m pytest tests โดยค่าเริ่มต้นการทดสอบหน่วยรวมถึงการทดสอบสำหรับส่วนขยาย CUDA ของเรา คุณสามารถเพิ่มตัวเลือก -m "not cudaext" เพื่อข้ามไปเมื่อติดตั้งโดยไม่สนับสนุน cuda นอกจากนี้การทดสอบสำหรับ solver baspacho solver จะถูกข้ามโดยอัตโนมัติเมื่อ extlib ไม่ได้รวบรวม
ตัวอย่างง่ายๆ ตัวอย่างนี้เหมาะสมกับเส้นโค้ง Objective ที่ CostFunction เดียวที่คำนวณส่วนที่เหลือ Objective และ GaussNewton Optimizer ถูกห่อหุ้มไว้ใน TheseusLayer ด้วยการสูญเสียของ Adam และ MSE TheseusLayer
import torch
import theseus as th
x_true , y_true , v_true = read_data () # shapes (1, N), (1, N), (1, 1)
x = th . Variable ( torch . randn_like ( x_true ), name = "x" )
y = th . Variable ( y_true , name = "y" )
v = th . Vector ( 1 , name = "v" ) # a manifold subclass of Variable for optim_vars
def error_fn ( optim_vars , aux_vars ): # returns y - v * exp(x)
x , y = aux_vars
return y . tensor - optim_vars [ 0 ]. tensor * torch . exp ( x . tensor )
objective = th . Objective ()
cost_function = th . AutoDiffCostFunction (
[ v ], error_fn , y_true . shape [ 1 ], aux_vars = [ x , y ],
cost_weight = th . ScaleCostWeight ( 1.0 ))
objective . add ( cost_function )
layer = th . TheseusLayer ( th . GaussNewton ( objective , max_iterations = 10 ))
phi = torch . nn . Parameter ( x_true + 0.1 * torch . ones_like ( x_true ))
outer_optimizer = torch . optim . Adam ([ phi ], lr = 0.001 )
for epoch in range ( 10 ):
solution , info = layer . forward (
input_tensors = { "x" : phi . clone (), "v" : torch . ones ( 1 , 1 )},
optimizer_kwargs = { "backward_mode" : "implicit" })
outer_loss = torch . nn . functional . mse_loss ( solution [ "v" ], v_true )
outer_loss . backward ()
outer_optimizer . step ()ดูบทเรียนและตัวอย่างหุ่นยนต์และวิสัยทัศน์เพื่อเรียนรู้เกี่ยวกับ API และการใช้งาน
หากคุณใช้สิ่งเหล่านี้ในงานของคุณโปรดอ้างอิงกระดาษกับ bibtex ด้านล่าง
@article { pineda2022theseus ,
title = { {Theseus: A Library for Differentiable Nonlinear Optimization} } ,
author = { Luis Pineda and Taosha Fan and Maurizio Monge and Shobha Venkataraman and Paloma Sodhi and Ricky TQ Chen and Joseph Ortiz and Daniel DeTone and Austin Wang and Stuart Anderson and Jing Dong and Brandon Amos and Mustafa Mukadam } ,
journal = { Advances in Neural Information Processing Systems } ,
year = { 2022 }
}เธเซอุสได้รับใบอนุญาต MIT ดูใบอนุญาตสำหรับรายละเอียด
เธเซอุสเป็นไปได้โดยผู้มีส่วนร่วมต่อไปนี้:
ทำด้วย contrib.rocks