目前dust3r是三維重建最新最好的技術,運用了ViT編碼器、Transformer、注意力機制、回歸等技術,無需相機參數標定。
但是我部署過程中有很多坑,記錄一下。
1.OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.
我最開始是完全按照readme.md里面的方式部署,用了conda,新建一個環境,環境裝了Python3.11。但是安裝到?
python setup.py build_ext --inplace
這一步時就會報錯。我查了一下,說是Anaconda安裝的cudatoolkit不完整,需要下載完整的Nvidia CUDA Toolkit。似乎要在虛擬環境再裝一個cudatoolkit。但是網上找的解決方案并不能解決問題。
后來我考慮到虛擬環境裝不了,試試不用Anaconda,于是在另一臺電腦上,沒有裝Anaconda,直接裝的Python3.8,然后直接裝,這一步居然沒報錯,過去了。Python3.8后面會有報錯,但是有辦法解決。而我又裝了Python3.12和Python3.11,還是會報這個錯。還有就是Python3.8沒有能裝起來pytorch和pytorch-cuda,報錯好像是說沒有找到滿足條件的庫,但是不影響后面運行。
2.ImportError: cannot import name 'cache' from 'functools' (D:\Python38\lib\functo
ols.py)
這就是前面說的Python3.8的報錯,查了一下Python3.8及以前的版本沒有這個,用Python3.9就沒問題。但是我裝了Python3.12和Python3.11又有了第一個報錯。Python3.8及以前的版本用的不是cache,而是叫lru_cache的,名字變了一下而已。于是我就用Python3.8,把報錯的dust3r\dust3r\cloud_opt\init_im_poses.py里面的cache全部改成lru_cache(共兩處),然后就可以run了。
3.TypeError: 'int' object is not subscriptable
網上查了一下,說是int型不可以被引用。因為報錯的地方是assert(dust3r\dust3r\model.py),于是我直接把這句話注釋掉了,就可以run了。
4.File "demo.py", line 294, in <module>
? ? model = AsymmetricCroCo3DStereo.from_pretrained(weights_path).to(args.device)
因為之前按readme下載了DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth在新建的checkpoints文件夾里面,而demo.py讀取的地方是
weights_path = "naver/" + args.model_name
args.model_name就是DUSt3R_ViTLarge_BaseDecoder_512_dpt。 故weights_path應為checkpoints/DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth。 解決方案:將這一行改為
weights_path = "checkpoints/" + args.model_name + ".pth"
然后就可以run了。
展示一下效果: