复现 MonoEF:Monocular 3D Object Detection: An Extrinsic Parameter Free Approach
时间:2022年7月13日
代码连接:
https://github.com/ZhouYunsong-SJTU/MonoEF
1.安装环境
环境:环境与代码中要求的环境一样。
Ubuntu 16.04
Python 3.7
Pytorch 1.3.1
CUDA 10.0
这里pytorch版本1.3.1为什么用这么低的?原因:因为代码中用到了DCN模块,DCN模块需要这么低的pytorch版本。如果要用高版本的pytorch,DCN模块要自己找最新的,然后安装新版的。
2.kitti数据集
kitti数据集的划分,及ImageSets中数据集的划分,可以看我的另一篇博客“kitti数据集划分”。
kitti
│──training
│ ├──calib
│ ├──label_2
│ ├──image_2
│ └──ImageSets
└──testing
├──calib
├──image_2
└──ImageSets
3.下载代码+编译setup.py
1.下载好MonoEF代码后,进入到MonoEF路径下,再下载SMOKE代码!!SMOKE代码连接https://github.com/lzccccc/SMOKE
估计作者的工作是基于SMOKE的,所以要在自己的代码中还要再下载别人SMOKE的代码。
路径大致如下:
--monoEF
--configs
--datasets
--dcn
--smoke
--SMOKE
--tools
--make.sh
--setup.py
--test.sh
--train.sh
注意:smoke和SMOKE不要弄混了,smoke文件夹代码是MonoEF自带的。而SMOKE是从https://github.com/lzccccc/SMOKE下载的,SMOKE是另一个人的工作。
2.进入SMOKE,执行
python setup.py build develop
3.回到MonoEF,执行
python setup.py build develop
4.进入MonoEF/dcn/DCNv2_latest,执行
python setup.py install develop
否则会报错:
no module named _ext
所以是运行了3个不同的setup.py,SMOKE的setup.py,MonoEF的setup.py, DCN的setup.py
4.下载SMOKE的pretrained weights
如果不下载的SMOKE的与训练权重,会报错:
FileNotFoundError: [Errno 2] No such file or directory: './SMOKE/pre_trained/model_final.pth'
权重文件在SMOKE官方代码中提供了连接,不过是google云盘的连接,大小223.43MB。下载好后放在./SMOKE/pre_trained/model_final.pth路径下即可。注意路径名字,别弄错名字了。
为了防止有的学者访问不了google云盘,我在baidu云盘创建了一个备份,如下:
链接:https://pan.baidu.com/s/1ZeaE462nBsiHtdAgFwMvUA
提取码:cumt
5.环境配置
MonoEF和SMOKE官方代码竟然都没有requirement.txt,真离谱!!导致运行代码,一会一个报错:no module named XXX !!!
我这里列举的可能不全,少哪个包,安哪个包!
no module named cv2
no module named skimage
no module named PIL
no module named tqdm
cannot import name PILLOW_VERSION from PIL
着重说一下pillow包,pillow版本太高会报错,pillow安6.1版就好了。
解决方法:
pip install pillow==6.1
pip install opencv-python
pip install scikit-image
pip install tqdm
6.修改代码
MonoEF/tools/plain_train_net.py 中的第6行代码:
sys.path.append('/media/lion/Seagate_Backup/SenseTimeResearch/pod_ad/Smoke_sequence_2/SMOKE/')
修改为自己的SMOKE路径即可。注意:不能用相对路径只能用绝对路径!!!
例如: 我的SMOKE路径是:/root/MonoEF-main/SMOKE,则修改为:
sys.path.append('/root/MonoEF-main/SMOKE')
再次提醒,不能用相对路径,只能用绝对路径。
如果不修改这行代码,会报错,报错内容如下:
Traceback (most recent call last):
File "tools/plain_train_net.py", line 9, in <module>
from smoke.config import cfg
ModuleNotFoundError: No module named 'smoke'
6.训练与检测
单个GPU训练:
python tools/plain_train_net.py --config-file "configs/smoke_gn_vector.yaml"
几秒就训练完了。真奇怪。