本文的基础代码来自于PointRCNN代码库,代码链接
在三维目标检测中,往往需要面临大规模级别包围盒交并比(IoU)计算,如果在计算过程中仅仅通过串行方式进行计算,将会面临计算效率低下,网络训练缓慢等缺点。作者在最近的三维目标检测任务中就遇到了这样的问题,自己编写的代码无法高效的计算,幸好在shi shaoshuai等人开发了iou3d_nms模块,本文将介绍iou_nms的安装,测试。
安装过程
- 首先创建conda虚拟环境(也可以使用已有的虚拟环境),作者这里用的是python 3.7版本
conda create python=3.7 -n iou3d_test
conda activate iou3d_test
- 安装必要软件环境,作者的机器使用的是cuda10.2,且NVIDIA驱动已完整安装,所以使用如下指令安装torch环境
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=10.2 -c pytorch
- Clone 源代码,这里直接将pointrcnn源码clone了下来
git clone --recursive https://github.com/sshaoshuai/PointRCNN.git
- 安装iou3d
cd lib/utils/iou3d/
python setup.py install
- 写一段代码来测试
import os, sys
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '../'))
import torch
import time
from lib.utils.iou3d.iou3d_utils import boxes_iou3d_gpu
boxes_a = torch.rand([100,7]).to('cuda')
boxes_b = torch.rand([100,7]).to('cuda')
start = time.time()
ans = boxes_iou3d_gpu(boxes_a, boxes_b)
end = time.time()
print(f"执行时间: {end - start:.4f}秒")
在测试代码中随机初始化100个包围盒A和100个包围盒B,计算结果包含(100,100)个交并比结果,计算仅用时 0.0022秒
测试成功
最后一点,PointRCNN中的IoU是在相机坐标系下计算的(详见kitti官网),若要使用常规坐标系,建议使用OpenPCDet项目中的iou3d项目。