淘先锋技术网

首页 1 2 3 4 5 6 7

论文: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,执行:

根据自己电脑的性能,修改config中的batch_size,修改num_works=0。
5.在单GPU上进行test:

测试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虚拟环境:

  1. 安装 opencv, pillow, scipy, matplotlib
pip install opencv-python pillow scipy matplotlib
  1. 安装mayai
    官方是 conda install mayavi -c conda-forge
    我直接 pip install mayavi --user
  2. 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

最终的图像结果
我这边也是能正常显示图像结果的。