最近看了一篇基于KITTI做2D和3D后融合的论文,CLOCs: Camera-LiDAR Object Candidates Fusion for 3D Object Detection。作者在Github上开源了自己代码,于是想着复现一下结果。结果花了几天搭环境遇到不少bug,就想着记录一下避免其他人遇到相同问题走弯路,也方便自己以后重新搭建的时候有个参照。
其中问题最大的就是那个spconv库了,其他库都是小打小闹,只有这个才是真正的坑。而我恰巧又遇到了最倒霉的情况,比正常人多走了更多的弯路(后文会介绍原因)。
一开始我刚好看到spconv库更新到2.x了,而且宣布速度比1.x快50%同时不需要自己编译了,我于是立马安装了准备用在CLOCs中。结果发现spconv 2.x移除了所有spconv.util模块,而CLOCs中使用了很多spconv.util,我懒得挨个改,就放弃了。其实spconv这个库还是有很多做KITTI数据集检测的文章用的,我想起我之前复现的OpenPCDet框架也用了,并且我还成功复现了于是切换到那个搭建好的环境。结果运行的时候遇到如下bug:
Traceback (most recent call last):
File "./pytorch/train.py", line 918, in <module>
fire.Fire()
File "/home/feng/anaconda3/envs/OpenPCDet/lib/python3.6/site-packages/fire/core.py", line 141, in Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
File "/home/feng/anaconda3/envs/OpenPCDet/lib/python3.6/site-packages/fire/core.py", line 471, in _Fire
target=component.__name__)
File "/home/feng/anaconda3/envs/OpenPCDet/lib/python3.6/site-packages/fire/core.py", line 681, in _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
File "./pytorch/train.py", line 656, in evaluate
for example in iter(eval_dataloader):
File "/home/feng/anaconda3/envs/OpenPCDet/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 346, in __next__
data = self._dataset_fetcher.fetch(index) # may raise StopIteration
File "/home/feng/anaconda3/envs/OpenPCDet/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/home/feng/anaconda3/envs/OpenPCDet/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/home/feng/CLOCs/second/pytorch/builder/input_reader_builder.py", line 18, in __getitem__
return self._dataset[idx]
File "/home/feng/CLOCs/second/data/dataset.py", line 70, in __getitem__
prep_func=self._prep_func)
File "/home/feng/CLOCs/second/data/preprocess.py", l