疯狂吐槽+不知道对不对的爆改,以及:在GitHub上不更新配置和issue的都是坏人!
参考:GitHub:https://github.com/zju3dv/DetectorFreeSfM
全网根本就没人说这个啊!!!剧多的坑!!
一、配环境
1.cuda的问题:配置文件里面写的cuda11.7在我用的autodl上根本没有对应的镜像,自己安装错误百出!
2.环境配置依赖的问题:这里才是最大的坑啊啊啊啊啊!GitHub上面requirements文件的甚至都互相不兼容!!
所以下面是我的环境,在我的服务器上跑得还是可以的
镜像:
Miniconda conda3
Python 3.10(ubuntu22.04)
Cuda 11.8
依赖:你就按照文件里面的装,但不要太相信版本号,做到相互之间兼容就行
这是我的pip list:里面由于我有其他用途,装了一些别的东西,可以参考需要用的。
Package Version Editable project location
------------------------- ------------ -----------------------------------
absl-py 2.1.0
addict 2.4.0
aiohappyeyeballs 2.4.6
aiohttp 3.11.12
aiosignal 1.3.2
albucore 0.0.23
albumentations 2.0.4
aliyun-python-sdk-core 2.16.0
aliyun-python-sdk-kms 2.16.5
annotated-types 0.7.0
antlr4-python3-runtime 4.9.3
astroid 3.3.8
asttokens 3.0.0
async-timeout 5.0.1
attrs 25.1.0
av 14.1.0
Brotli 1.0.9
certifi 2025.1.31
cffi 1.17.1
charset-normalizer 3.3.2
click 8.1.8
clip 1.0
colorama 0.4.6
contourpy 1.3.1
controlnet-aux 0.0.9
coverage 6.5.0
crcmod 1.7
cryptography 44.0.1
cycler 0.11.0
decorator 5.1.1
diffusers 0.32.2
dill 0.3.8
docker-pycreds 0.4.0
einops 0.8.1
exceptiongroup 1.2.2
executing 2.1.0
face-alignment 1.3.4
facexlib 0.3.0
filelock 3.14.0
filterpy 1.4.5
flatbuffers 25.2.10
fonttools 4.55.3
frozenlist 1.5.0
fsspec 2025.2.0
ftfy 6.3.1
gitdb 4.0.12
GitPython 3.1.44
gmpy2 2.2.1
grpcio 1.70.0
h5py 3.12.1
huggingface-hub 0.28.1
hydra-core 1.3.2
idna 3.7
imageio 2.37.0
imageio-ffmpeg 0.4.4
importlib_metadata 8.6.1
iniconfig 2.0.0
interrogate 1.7.0
ipdb 0.13.13
ipython 8.32.0
isort 5.13.2
jax 0.5.0
jaxlib 0.5.0
jedi 0.19.2
Jinja2 3.1.5
jmespath 0.10.0
joblib 1.4.2
jsonschema 4.23.0
jsonschema-specifications 2024.10.1
kiwisolver 1.4.8
kornia 0.8.0
kornia_rs 0.1.8
lazy_loader 0.4
lightning 2.5.0.post0
lightning-utilities 0.12.0
llvmlite 0.44.0
lmdb 1.6.2
loguru 0.7.2
lpips 0.1.4
Markdown 3.7
markdown-it-py 3.0.0
MarkupSafe 3.0.2
matplotlib 3.10.0
matplotlib-inline 0.1.7
mccabe 0.7.0
mdurl 0.1.2
mediapipe 0.10.21
mkl_fft 1.3.11
mkl_random 1.2.8
mkl-service 2.4.0
ml_dtypes 0.5.1
mmagic 1.2.0.dev0
mmcv 2.1.0
mmcv-full 1.7.2
mmdet 3.3.0
mmedit 0.16.1
mmengine 0.10.6
model-index 0.1.11
mpmath 1.3.0
msgpack 1.1.0
multidict 6.1.0
natsort 8.4.0
networkx 3.4.2
numba 0.61.0
numpy 1.26.4
nvidia-cublas-cu12 12.4.5.8
nvidia-cuda-cupti-cu12 12.4.127
nvidia-cuda-nvrtc-cu12 12.4.127
nvidia-cuda-runtime-cu12 12.4.127
nvidia-cudnn-cu12 9.1.0.70
nvidia-cufft-cu12 11.2.1.3
nvidia-curand-cu12 10.3.5.147
nvidia-cusolver-cu12 11.6.1.9
nvidia-cusparse-cu12 12.3.1.170
nvidia-cusparselt-cu12 0.6.2
nvidia-nccl-cu12 2.21.5
nvidia-nvjitlink-cu12 12.4.127
nvidia-nvtx-cu12 12.4.127
omegaconf 2.3.0
open_clip_torch 2.30.0
opencv-contrib-python 4.11.0.86
opencv-python 4.11.0.86
opencv-python-headless 4.11.0.86
opendatalab 0.0.10
openmim 0.3.9
openxlab 0.1.2
opt_einsum 3.4.0
ordered-set 4.1.0
oss2 2.17.0
packaging 24.2
pandas 2.2.3
parso 0.8.4
pexpect 4.9.0
pickle5 0.0.11
pickleshare 0.7.5
pillow 11.1.0
pip 25.0
platformdirs 3.10.0
pluggy 1.5.0
ply 3.11
prompt_toolkit 3.0.50
propcache 0.2.1
protobuf 4.25.6
psutil 7.0.0
ptyprocess 0.7.0
pure_eval 0.2.3
py 1.11.0
pycocotools 2.0.8
pycolmap 0.6.1
pycparser 2.22
pycryptodome 3.21.0
pydantic 2.10.6
pydantic_core 2.27.2
Pygments 2.19.1
pylint 3.3.3
pyparsing 3.2.0
PyQt5 5.15.10
PyQt5_sip 12.13.0
PySocks 1.7.1
pytest 8.3.4
python-dateutil 2.9.0.post0
pytorch-lightning 1.9.4
pytz 2023.4
PyYAML 6.0.2
ray 2.42.1
referencing 0.36.2
regex 2024.11.6
requests 2.28.2
resize-right 0.0.2
rich 13.4.2
roi_align 0.0.2
rpds-py 0.22.3
safetensors 0.5.2
scikit-image 0.25.1
scipy 1.15.1
sentencepiece 0.2.0
sentry-sdk 2.21.0
setproctitle 1.3.4
setuptools 60.2.0
shapely 2.0.7
simsimd 6.2.1
sip 6.7.12
six 1.16.0
smmap 5.0.2
sounddevice 0.5.1
stack_data 0.6.3
stringzilla 3.11.3
sympy 1.13.1
tabulate 0.9.0
tensorboard 2.19.0
tensorboard-data-server 0.7.2
termcolor 2.5.0
terminaltables 3.1.10
tifffile 2025.1.10
timm 0.6.7
tokenizers 0.21.0
toml 0.10.2
tomli 2.0.1
tomlkit 0.13.2
torch 2.1.0+cu118
torchaudio 2.1.0+cu118
torchmetrics 1.6.1
torchvision 0.16.0+cu118
tornado 6.4.2
tqdm 4.65.2
traitlets 5.14.3
transformers 4.48.3
triton 2.1.0
typing_extensions 4.12.2
tzdata 2025.1
unicodedata2 15.1.0
urllib3 1.26.20
wandb 0.19.6
wcwidth 0.2.13
Werkzeug 3.1.3
wheel 0.45.1
yacs 0.1.8
yapf 0.43.0
yarl 1.18.3
zipp 3.21.0
二、数据集准备:这没什么说的,按照他的指示把所有数据集下载下来放到该放的位置即可
三、Modified COLMAP:最坑的来了!!!
1.首先此版本的colmap在官方colmap上是commit的#1607,他没改过的我都成功编译不了,更别提改过的了。
2.所以我采取的方法是把他所有对#1607的修改copy到一个我可以在我的环境上编译的colmap里面,就是colmap3.11.1,但是必然报很多版本不兼容的错误(主要集中在sfm.cc文件里面),接下来我就是一个个改错。
我把这里面的错误改到了可以成功编译,但是是不是对的我也不确定,因为目前来看它的训练效果并没有达到作者文章中所展示的程度(꒦_꒦) 。
这部分修改的代码由于不知道对不对所以先不放上来了,如果后续结果比较好我会二编放上来。
四、训练:这个部分我也折腾了很久,首先由于前面很多包为了符合我的环境和相互兼容,安的版本跟作者的都不一样了,所以首先改代码改了很久。
1.有许多直接会有下划线的报错就直接改,网上搜一下函数变更就行
2.最麻烦的是这个:pycolmap.verify_matches
函数的参数类型不匹配!!!我整了一个星期啊啊啊啊啊啊,全网搜一个回答都没有,GitHub上有人提了issue也不解答o(╥﹏╥)o,最后我只能用pdb打断点调试,一步一步找问题(感谢deepseek的倾情支持,要是少一点服务器繁忙就更好了)最后发现:
(1)verify_matches
函数不接受 max_num_trials
和 min_inlier_ratio
作为直接参数
(2)这些参数应该通过 TwoViewGeometryOptions
对象传递
更改方法,在triangulation.py文件中,找到verify_matches调用的位置,然后把代码改成:
from pycolmap import TwoViewGeometryOptions
# 创建 TwoViewGeometryOptions 对象并设置参数
options = TwoViewGeometryOptions()
options.max_num_trials = 20000
options.min_inlier_ratio = 0.1
# 调用 verify_matches
pycolmap.verify_matches(database_path, pairs_path, options)
3.最后是一些路径问题,这样运行是可以过编译的,即终端不会有错,但是训练不了,因为找不到colmap的结果。首先这个eval_dataset.py调用colmap就不成功,所以现阶段你可以手动调用:
colmap feature_extractor \
--database_path /your/path/to/database.db \
--image_path /your/path/to/images
colmap exhaustive_matcher \
--database_path /your/path/to/database.db \
colmap mapper \
--database_path your/path/to/database.db \
--image_path /your/path/to/images
--output_path /your/path/to/sparse
调用后如果有结果至少说明你的colmap在运行上没有大问题,至于结果好不好只能看天了。
然后再运行的话如果还是报路径错误,这个时候就得去配置文件dfsfm.yaml里面看看了,是否每个需要修改的数据路径名字都改成现在需要运行的了。
这样运行就没啥问题了,但是我跑出来的结果可以说是惨不忍睹(꒦_꒦) ,不说了,改代码去了。