前言
这个系列是记录我个人在学习过程中,遇到的一些问题,并记录我成功的方法,真实有效。
BEVFormer本身的安装文档非常不利好于新人,所以在此记录了我遇到的坑与解决办法,帮助和我一样初学入门BEV的朋友们。
使用平台
i7-12700k
4070ti
ubuntu20.04
conda虚拟环境中,python=3.8
遇到的问题
使用官方的安装文档,运行如下测试软件代码时,会报错:OSError: is not a checkpoint file
或 Exception: Error: Invalid box type: None。
这里会有多种形式的报错,但是我在此处遇到了上述两种。
运行此处的代码时,如果你是个人学生党,使用自己的电脑,只有一张显卡,请将结尾的8改为1。
以下是解决办法(错误)
1.报错1:OSError: is not a checkpoint file
根据官方文档的代码,最后的这部分
./path/to/ckpts.path
是指这里补充填写我们的checkpoint file路径地址,根据其官方文档的路径介绍,应当是:
./ckpts/r101_dcn_fcos3d_pretrain.path
完成上述修改之后,你将获得如下完整代码
./tools/dist_test.sh ./projects/configs/bevformer/bevformer_small.py ./ckpts/r101_dcn_fcos3d_pretrain.path
然后你会遇到第二个问题
2.报错2:Exception: Error: Invalid box type: None
出现这个报错说明我们的路径已经可以被识别到了,但是本身的chekpoint文件出现了问题
根据li zhiqi大佬自己的回答https://github.com/fundamentalvision/BEVFormer/issues/45
这里需要更改我们根据官方文档下载的chekpoint文件,具体文件可以前往上述网址查看。
./tools/dist_test.sh ./projects/configs/bevformer/bevformer_small.py ./ckpts/bevformer_r101_dcn_24ep.path
更换了chekpoint文件之后问题得以解决。可顺利运行。
这里我们没有使用官方代码中的bevformer_base.py,参考如下文章:BEVFormer环境配置,报错:RuntimeError: Unable to find a valid cuDNN algorithm to run convolution-CSDN博客
真正的解决办法(补档)
上面的代码虽然不报错了,但是你后续训练会发现怎么都训练的不对。
重新理解这部分,最后的 ./path/to/***.path 应当是我们自己训练后的 path,上面下载的两个 r101 的 path 都只是初始值,训练前用的导入的基础数据,在 bevformer_base.py 文件中使用。
所以这里使用官方文档步骤下载的,最开始的 r101 的 path 是完全没有问题的。
这里已经需要测试了,所以肯定得是我们自己训练完成之后的 path。
正确的测试代码应为:只有一张显卡所以结尾为 1
./tools/dist_test.sh ./projects/configs/bevformer/bevformer.py work_dirs/bevformer/latest.pth 1