目录
参考文献:需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获取完整版:
地址
概述
随着人工智能的蓬勃发展,自动驾驶技术正成为科技界的一大亮点。在这个领域中,道路信息感知被视为自动驾驶系统中至关重要的一环,因为它为车辆的规划和决策提供了必不可少的基础数据。
我很荣幸地向大家介绍RTM3D算法(单目3D目标检测)。这一算法利用nuscenes数据集中的前视摄像头图像进行训练,能够准确地检测出轿车、巴士、卡车等多种3D目标。更令人振奋的是,我们为您提供了基于PyTorch、ONNX Runtime和TensorRT推理框架的演示,并附带了PyTorch转ONNX、ONNX转TensorRT的脚本,使您可以轻松应用于实际场景中。
算法介绍
RTM3D的主要结构分为backbone和检测头。backbone主要使用ResNet18和DLA-34。其中上采样过程用了跨连接和双线性插值。同时提出了针对keypoint的FPN层。根据速度要求检测头由三个基本单元和6个可选的单元组成。在基本单元中,使用2DBBox的中心点作为哦中枢点负责各数据的联系。因为截断的物体3D框中心可能会超出图像范围,对检测不利。其它基本单元还有9个关键点的热力图和回归坐标,用来做点之间的联合。其它可选的部分有量化误差的补偿、物体的大小、方向,中心点的depth和2D bbox的大小。
网络结构
演示效果
图像推理
视频推理
核心代码
demo代码中定义图像以及模型的地址
model_path = r"weights/rtm3d_nusc_ep100.pth"
image_path = r"demo/demo.jpg"
根据相机参数在lib/rtm3d_detector.py中调整calib
self.calib_np = np.array([[721.5, 0.0, 336, 44.86],
[0.0, 721.5, 140, 0.216],
[0.0, 0.0, 1.0, 0.0027]], dtype=np.float32)
算法处理过程
def process(self, images):
with torch.no_grad():
output = self.model(images)[-1]
output['hm'] = output['hm'].sigmoid_()
dets = car_pose_decode_faster(output['hm'], output['hps'], output['dim'], output['rot'],
prob=output['prob'], K=self.K, meta=self.meta, const=self.const)
return dets
demo代码中调用对应的detector,并返回检测结果和可视化结果
results, show_img = detector.run(img, im1)
使用方式
环境搭建
pip install -r requirements.txt
下载权重文件
请阅读附件中README.md的这一部分。
pytorch 推理(自动选择CPU或GPU)
python image_infer.py # 单张图像推理
python pt_infer.py # 视频推理
onnxruntime 推理(自动选择CPU或GPU)
python pt2onnx.py # pytorch格式模型转onnx格式
python onnx_infer.py # 视频推理
tensorrt 推理
python pt2onnx.py # pytorch格式模型转onnx格式
python onnx2trt.py # onnx格式模型转tensorrt格式
python trt_infer.py # 视频推理
部署方式
在以上的demo文件中选择自己的图片/视频地址,如image_infer.py中修改image_path为自己的图像地址。
参考文献
@misc{2009.00764,
Author = {Peixuan Li},
Title = {Monocular 3D Detection with Geometric Constraints Embedding and Semi-supervised Training},
Year = {2020},
Eprint = {arXiv:2009.00764},
}
@misc{2001.03343,
Author = {Peixuan Li and Huaici Zhao and Pengfei Liu and Feidao Cao},
Title = {RTM3D: Real-time Monocular 3D Detection from Object Keypoints for Autonomous Driving},
Year = {2020},
Eprint = {arXiv:2001.03343},
}