论文:SMOKE:Single-Stage Monocular 3D Object Detection via Keypoint Estimation
论文链接
源码
操作系统:ubuntu18.04
显卡:RTX2080TI
一、搭环境(前面和GitHub上一样,补上我踩的坑)
1.创建虚拟环境
conda create -n smoke python=3.7
2.激活smoke环境
source activate smoke
3.创建pytorch环境
torch官方提供的方法
注意:
我的显卡是2080TI,我没安装最新的torch,怕有问题,我之前用的1.7, 1.8, 1.9都是没问题的。所以我安装了1.7。
我一般都不用conda安装,喜欢用pip安装,这边看自己的习惯。
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
4.检查环境是否搭建成功
python
import torch
torch.cuda.is_available()
torch.zeros(1).cuda()
二、 准备训练工作
1.克隆代码
文件夹找到smoke环境,右键,选择从终端打开,执行:
git clone https://github.com/lzccccc/SMOKE
2.修改DCNv2文件
说明:这里使用的torch版本为1.7,所以要修改成对应1.7版本的dcn文件
pytorch1.7时需要用这个库torch1.7对应的DVN2
首先下载DCNv2文件:
git clone -b pytorch_1.7 https://github.com/lbin/DCNv2.git
然后,将SMOKE源码中的smoke/csrc中的文件全部替换为DCNv2/src中的文件,将smoke/layers/dcn_v2.py文件替换为DCNv2/dcn_v2.py文件。
3.上述工作完成后,再cd到SMOKE目录:
cd SMOKE
python setup.py build develop
然后新建数据集目录,并连接到数据集(提前准备好数据集格式)
mkdir datasets
ln -s /path_to_kitti_dataset datasets/kitti
注意:
关于数据集稍微啰嗦一句。
我的数据集目录结构是这样的,train的SMOKE/datasets/kitti/training
kitti
│──training
│ ├──calib
│ ├──label_2
│ ├──image_2
│ └──ImageSets
└──testing
├──calib
├──image_2
└──ImageSets
我的网盘kitti数据集链接: https://pan.baidu.com/s/1te2spGGUtSiNmCOZNqvODQ
提取码: 7btg
可以自取,下好了按照上面目录放就行。
4.开始训练
对于单GPU,执行:
python tools/plain_train_net.py --config-file "configs/smoke_gn_vector.yaml"
根据自己电脑的性能,修改config中的batch_size,修改num_works=0。
5.在单GPU上进行test:
python tools/plain_train_net.py --eval-only --config-file "configs/smoke_gn_vector.yaml"
测试DCN是否可以编译:
git clone -b pytorch_1.7 https://github.com/lbin/DCNv2.git
cd DCNv2
./make.sh
正常人到这边应该结束了。能训练能预测不报错。但我不是正常人,在单GPU上进行test一直报错。
错误1
FileNotFoundError: [Errno 2] No such file or directory: ‘./smoke/data/datasets/evaluation/kitti/kitti_eval’
官方issues里找到了解决方案:
../smoke/data/datasets/evaluation/kitti/kitti_eval
should be
./smoke/data/datasets/evaluation/kitti/kitti_eval
错误2
FileNotFoundError: [Errno 2] No such file or directory: ‘datasets/kitti/testing/ImageSets/test.txt’
数据集链接是这个
下好了里面的txt放ImageSets里
错误3
ERROR: Couldn’t read: 004627.txt of ground truth. Please write me an email! An error occurred while processing your results
官方issues有解决方案 官方issues
两种方法我都可以。造成这个的原因
解释的很清楚。因为测试集没有标签,所以将config/smoke_gn_vector.yaml里的 using " TEST: (“kitti_test”,) " and TEST_SPLIT: “test” 换成"TEST: (“kitti_train”,)" and TEST_SPLIT: “val”。
第一种:
also make sure to have gnuplot, ghostscript, texlive-extra-utils installed
这样再测试我是没问题的。
第二种:
sudo apt-get install texlive-extra-utils
sudo apt-get install gnuplot
sudo apt-get install ghostscript
git clone https://github.com/asharakeh/kitti_native_evaluation.git
cd /content/kitti_native_evaluation
cmake ./
make
再运行这句:
./evaluate_object_3d_offline /media/qiao/autopilot/SMOKE/datasets/kitti/training/label_2 /media/qiao/autopilot/SMOKE/tools/logs/inference/kitti_train
result would be similar to this :
…
cyclist_detection_AP : 96.161880 96.238068 91.152649
PDFCROP 1.38, 2012/11/02 - Copyright © 2002-2012 by Heiko Oberdiek.
==> 1 page written on cyclist_detection_AP.pdf’. cyclist_orientation_AOS : 95.185928 95.402016 90.347366 PDFCROP 1.38, 2012/11/02 - Copyright © 2002-2012 by Heiko Oberdiek. ==> 1 page written on cyclist_orientation_AOS.pdf’.
car_detection_BEV_AP : 86.162407 82.500969 75.850616
PDFCROP 1.38, 2012/11/02 - Copyright © 2002-2012 by Heiko Oberdiek.
==> 1 page written on `car_detection_BEV_AP.pdf’.
接下来不算问题,我想可视化kitti数据集,网上找了找办法。
链接: KITTI Object data transformation and visualization
我是直接用的smoke虚拟环境:
- 安装 opencv, pillow, scipy, matplotlib
pip install opencv-python pillow scipy matplotlib
- 安装mayai
官方是conda install mayavi -c conda-forge
我直接pip install mayavi --user
- test install
python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis
这句运行的时候报错。
错误1
pip install pyqt5时报错:Preparing wheel metadata … error
按照这个博客解决问题 anaconda下tensorflow安装遇到的问题记录及解决办法
sudo pip install --user pyqtwebengine==5.12
sudo pip install --user pyqt5==5.12
sudo pip install typed-ast
这三行可以解决问题。
其他问题我忘了,想起来再补。
运行
python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes
我这边也是能正常显示图像结果的。